/** * @license * Cesium - https://github.com/CesiumGS/cesium * Version 1.129 * * 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 u1e=Object.create;var nN=Object.defineProperty;var m1e=Object.getOwnPropertyDescriptor;var f1e=Object.getOwnPropertyNames;var h1e=Object.getPrototypeOf,p1e=Object.prototype.hasOwnProperty;var iN=(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 ad=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),b1e=(e,t)=>{for(var n in t)nN(e,n,{get:t[n],enumerable:!0})},Tq=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of f1e(t))!p1e.call(e,o)&&o!==n&&nN(e,o,{get:()=>t[o],enumerable:!(i=m1e(t,o))||i.enumerable});return e};var _=(e,t,n)=>(n=e!=null?u1e(h1e(e)):{},Tq(t||!e||!e.__esModule?nN(n,"default",{value:e,enumerable:!0}):n,e)),y1e=e=>Tq(nN({},"__esModule",{value:!0}),e);var T=ad(()=>{globalThis.CESIUM_WORKERS=atob("dmFyIENlc2l1bVdvcmtlcnM9KCgpPT57dmFyIFhTPU9iamVjdC5jcmVhdGU7dmFyIEJsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgWVM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgJFM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyIFpTPU9iamVjdC5nZXRQcm90b3R5cGVPZixRUz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBwcj0odD0+dHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dHlwZW9mIFByb3h5PCJ1Ij9uZXcgUHJveHkodCx7Z2V0OihlLG4pPT4odHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6ZSlbbl19KTp0KShmdW5jdGlvbih0KXtpZih0eXBlb2YgcmVxdWlyZTwidSIpcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrdCsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KSxwMT10PT5lPT57dmFyIG49dFtlXTtpZihuKXJldHVybiBuKCk7dGhyb3cgbmV3IEVycm9yKCJNb2R1bGUgbm90IGZvdW5kIGluIGJ1bmRsZTogIitlKX07dmFyICQ9KHQsZSk9PigpPT4odCYmKGU9dCh0PTApKSxlKTt2YXIgWG49KHQsZSk9PigpPT4oZXx8dCgoZT17ZXhwb3J0czp7fX0pLmV4cG9ydHMsZSksZS5leHBvcnRzKSxwZT0odCxlKT0+e2Zvcih2YXIgbiBpbiBlKUJsKHQsbix7Z2V0OmVbbl0sZW51bWVyYWJsZTohMH0pfSxkMT0odCxlLG4sbyk9PntpZihlJiZ0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKWZvcihsZXQgciBvZiAkUyhlKSkhUVMuY2FsbCh0LHIpJiZyIT09biYmQmwodCxyLHtnZXQ6KCk9PmVbcl0sZW51bWVyYWJsZTohKG89WVMoZSxyKSl8fG8uZW51bWVyYWJsZX0pO3JldHVybiB0fTt2YXIgZHI9KHQsZSxuKT0+KG49dCE9bnVsbD9YUyhaUyh0KSk6e30sZDEoZXx8IXR8fCF0Ll9fZXNNb2R1bGU/QmwobiwiZGVmYXVsdCIse3ZhbHVlOnQsZW51bWVyYWJsZTohMH0pOm4sdCkpLEpTPXQ9PmQxKEJsKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0KTtmdW5jdGlvbiB0Qyh0KXtyZXR1cm4gdCE9bnVsbH12YXIgaCxhdD0kKCgpPT57aD10Q30pO2Z1bmN0aW9uIGtzKHQpe3RoaXMubmFtZT0iRGV2ZWxvcGVyRXJyb3IiLHRoaXMubWVzc2FnZT10O2xldCBlO3RyeXt0aHJvdyBuZXcgRXJyb3J9Y2F0Y2gobil7ZT1uLnN0YWNrfXRoaXMuc3RhY2s9ZX12YXIgTCxqdD0kKCgpPT57YXQoKTtoKE9iamVjdC5jcmVhdGUpJiYoa3MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxrcy5wcm90b3R5cGUuY29uc3RydWN0b3I9a3MpO2tzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2xldCB0PWAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7cmV0dXJuIGgodGhpcy5zdGFjaykmJih0Kz1gCiR7dGhpcy5zdGFjay50b1N0cmluZygpfWApLHR9O2tzLnRocm93SW5zdGFudGlhdGlvbkVycm9yPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IGtzKCJUaGlzIGZ1bmN0aW9uIGRlZmluZXMgYW4gaW50ZXJmYWNlIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4iKX07TD1rc30pO2Z1bmN0aW9uIGVDKHQpe3JldHVybmAke3R9IGlzIHJlcXVpcmVkLCBhY3R1YWwgdmFsdWUgd2FzIHVuZGVmaW5lZGB9ZnVuY3Rpb24gemModCxlLG4pe3JldHVybmBFeHBlY3RlZCAke259IHRvIGJlIHR5cGVvZiAke2V9LCBhY3R1YWwgdHlwZW9mIHdhcyAke3R9YH12YXIgWW4seSxXdD0kKCgpPT57YXQoKTtqdCgpO1luPXt9O1luLnR5cGVPZj17fTtZbi5kZWZpbmVkPWZ1bmN0aW9uKHQsZSl7aWYoIWgoZSkpdGhyb3cgbmV3IEwoZUModCkpfTtZbi50eXBlT2YuZnVuYz1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBMKHpjKHR5cGVvZiBlLCJmdW5jdGlvbiIsdCkpfTtZbi50eXBlT2Yuc3RyaW5nPWZ1bmN0aW9uKHQsZSl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBMKHpjKHR5cGVvZiBlLCJzdHJpbmciLHQpKX07WW4udHlwZU9mLm51bWJlcj1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiBlIT0ibnVtYmVyIil0aHJvdyBuZXcgTCh6Yyh0eXBlb2YgZSwibnVtYmVyIix0KSl9O1luLnR5cGVPZi5udW1iZXIubGVzc1RoYW49ZnVuY3Rpb24odCxlLG4pe2lmKFluLnR5cGVPZi5udW1iZXIodCxlKSxlPj1uKXRocm93IG5ldyBMKGBFeHBlY3RlZCAke3R9IHRvIGJlIGxlc3MgdGhhbiAke259LCBhY3R1YWwgdmFsdWUgd2FzICR7ZX1gKX07WW4udHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKHQsZSxuKXtpZihZbi50eXBlT2YubnVtYmVyKHQsZSksZT5uKXRocm93IG5ldyBMKGBFeHBlY3RlZCAke3R9IHRvIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke259LCBhY3R1YWwgdmFsdWUgd2FzICR7ZX1gKX07WW4udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbj1mdW5jdGlvbih0LGUsbil7aWYoWW4udHlwZU9mLm51bWJlcih0LGUpLGU8PW4pdGhyb3cgbmV3IEwoYEV4cGVjdGVkICR7dH0gdG8gYmUgZ3JlYXRlciB0aGFuICR7bn0sIGFjdHVhbCB2YWx1ZSB3YXMgJHtlfWApfTtZbi50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHM9ZnVuY3Rpb24odCxlLG4pe2lmKFluLnR5cGVPZi5udW1iZXIodCxlKSxlPG4pdGhyb3cgbmV3IEwoYEV4cGVjdGVkICR7dH0gdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7bn0sIGFjdHVhbCB2YWx1ZSB3YXMgJHtlfWApfTtZbi50eXBlT2Yub2JqZWN0PWZ1bmN0aW9uKHQsZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyBMKHpjKHR5cGVvZiBlLCJvYmplY3QiLHQpKX07WW4udHlwZU9mLmJvb2w9ZnVuY3Rpb24odCxlKXtpZih0eXBlb2YgZSE9ImJvb2xlYW4iKXRocm93IG5ldyBMKHpjKHR5cGVvZiBlLCJib29sZWFuIix0KSl9O1luLnR5cGVPZi5iaWdpbnQ9ZnVuY3Rpb24odCxlKXtpZih0eXBlb2YgZSE9ImJpZ2ludCIpdGhyb3cgbmV3IEwoemModHlwZW9mIGUsImJpZ2ludCIsdCkpfTtZbi50eXBlT2YubnVtYmVyLmVxdWFscz1mdW5jdGlvbih0LGUsbixvKXtpZihZbi50eXBlT2YubnVtYmVyKHQsbiksWW4udHlwZU9mLm51bWJlcihlLG8pLG4hPT1vKXRocm93IG5ldyBMKGAke3R9IG11c3QgYmUgZXF1YWwgdG8gJHtlfSwgdGhlIGFjdHVhbCB2YWx1ZXMgYXJlICR7bn0gYW5kICR7b31gKX07eT1Zbn0pO3ZhciBoMT1YbigoSGssbTEpPT57dmFyIFJpPWZ1bmN0aW9uKHQpe3Q9PW51bGwmJih0PW5ldyBEYXRlKCkuZ2V0VGltZSgpKSx0aGlzLk49NjI0LHRoaXMuTT0zOTcsdGhpcy5NQVRSSVhfQT0yNTY3NDgzNjE1LHRoaXMuVVBQRVJfTUFTSz0yMTQ3NDgzNjQ4LHRoaXMuTE9XRVJfTUFTSz0yMTQ3NDgzNjQ3LHRoaXMubXQ9bmV3IEFycmF5KHRoaXMuTiksdGhpcy5tdGk9dGhpcy5OKzEsdC5jb25zdHJ1Y3Rvcj09QXJyYXk/dGhpcy5pbml0X2J5X2FycmF5KHQsdC5sZW5ndGgpOnRoaXMuaW5pdF9zZWVkKHQpfTtSaS5wcm90b3R5cGUuaW5pdF9zZWVkPWZ1bmN0aW9uKHQpe2Zvcih0aGlzLm10WzBdPXQ+Pj4wLHRoaXMubXRpPTE7dGhpcy5tdGk8dGhpcy5OO3RoaXMubXRpKyspe3ZhciB0PXRoaXMubXRbdGhpcy5tdGktMV1edGhpcy5tdFt0aGlzLm10aS0xXT4+PjMwO3RoaXMubXRbdGhpcy5tdGldPSgoKHQmNDI5NDkwMTc2MCk+Pj4xNikqMTgxMjQzMzI1Mzw8MTYpKyh0JjY1NTM1KSoxODEyNDMzMjUzK3RoaXMubXRpLHRoaXMubXRbdGhpcy5tdGldPj4+PTB9fTtSaS5wcm90b3R5cGUuaW5pdF9ieV9hcnJheT1mdW5jdGlvbih0LGUpe3ZhciBuLG8scjtmb3IodGhpcy5pbml0X3NlZWQoMTk2NTAyMTgpLG49MSxvPTAscj10aGlzLk4+ZT90aGlzLk46ZTtyO3ItLSl7dmFyIGk9dGhpcy5tdFtuLTFdXnRoaXMubXRbbi0xXT4+PjMwO3RoaXMubXRbbl09KHRoaXMubXRbbl1eKCgoaSY0Mjk0OTAxNzYwKT4+PjE2KSoxNjY0NTI1PDwxNikrKGkmNjU1MzUpKjE2NjQ1MjUpK3Rbb10rbyx0aGlzLm10W25dPj4+PTAsbisrLG8rKyxuPj10aGlzLk4mJih0aGlzLm10WzBdPXRoaXMubXRbdGhpcy5OLTFdLG49MSksbz49ZSYmKG89MCl9Zm9yKHI9dGhpcy5OLTE7cjtyLS0pe3ZhciBpPXRoaXMubXRbbi0xXV50aGlzLm10W24tMV0+Pj4zMDt0aGlzLm10W25dPSh0aGlzLm10W25dXigoKGkmNDI5NDkwMTc2MCk+Pj4xNikqMTU2NjA4Mzk0MTw8MTYpKyhpJjY1NTM1KSoxNTY2MDgzOTQxKS1uLHRoaXMubXRbbl0+Pj49MCxuKyssbj49dGhpcy5OJiYodGhpcy5tdFswXT10aGlzLm10W3RoaXMuTi0xXSxuPTEpfXRoaXMubXRbMF09MjE0NzQ4MzY0OH07UmkucHJvdG90eXBlLnJhbmRvbV9pbnQ9ZnVuY3Rpb24oKXt2YXIgdCxlPW5ldyBBcnJheSgwLHRoaXMuTUFUUklYX0EpO2lmKHRoaXMubXRpPj10aGlzLk4pe3ZhciBuO2Zvcih0aGlzLm10aT09dGhpcy5OKzEmJnRoaXMuaW5pdF9zZWVkKDU0ODkpLG49MDtuPHRoaXMuTi10aGlzLk07bisrKXQ9dGhpcy5tdFtuXSZ0aGlzLlVQUEVSX01BU0t8dGhpcy5tdFtuKzFdJnRoaXMuTE9XRVJfTUFTSyx0aGlzLm10W25dPXRoaXMubXRbbit0aGlzLk1dXnQ+Pj4xXmVbdCYxXTtmb3IoO248dGhpcy5OLTE7bisrKXQ9dGhpcy5tdFtuXSZ0aGlzLlVQUEVSX01BU0t8dGhpcy5tdFtuKzFdJnRoaXMuTE9XRVJfTUFTSyx0aGlzLm10W25dPXRoaXMubXRbbisodGhpcy5NLXRoaXMuTildXnQ+Pj4xXmVbdCYxXTt0PXRoaXMubXRbdGhpcy5OLTFdJnRoaXMuVVBQRVJfTUFTS3x0aGlzLm10WzBdJnRoaXMuTE9XRVJfTUFTSyx0aGlzLm10W3RoaXMuTi0xXT10aGlzLm10W3RoaXMuTS0xXV50Pj4+MV5lW3QmMV0sdGhpcy5tdGk9MH1yZXR1cm4gdD10aGlzLm10W3RoaXMubXRpKytdLHRePXQ+Pj4xMSx0Xj10PDw3JjI2MzY5Mjg2NDAsdF49dDw8MTUmNDAyMjczMDc1Mix0Xj10Pj4+MTgsdD4+PjB9O1JpLnByb3RvdHlwZS5yYW5kb21faW50MzE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5kb21faW50KCk+Pj4xfTtSaS5wcm90b3R5cGUucmFuZG9tX2luY2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5kb21faW50KCkqKDEvNDI5NDk2NzI5NSl9O1JpLnByb3RvdHlwZS5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5kb21faW50KCkqKDEvNDI5NDk2NzI5Nil9O1JpLnByb3RvdHlwZS5yYW5kb21fZXhjbD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJhbmRvbV9pbnQoKSsuNSkqKDEvNDI5NDk2NzI5Nil9O1JpLnByb3RvdHlwZS5yYW5kb21fbG9uZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMucmFuZG9tX2ludCgpPj4+NSxlPXRoaXMucmFuZG9tX2ludCgpPj4+NjtyZXR1cm4odCo2NzEwODg2NCtlKSooMS85MDA3MTk5MjU0NzQwOTkyKX07bTEuZXhwb3J0cz1SaX0pO3ZhciB3bSxDdCxVbCxfMSxQLEt0PSQoKCk9Pnt3bT1kcihoMSgpLDEpO1d0KCk7YXQoKTtqdCgpO0N0PXt9O0N0LkVQU0lMT04xPS4xO0N0LkVQU0lMT04yPS4wMTtDdC5FUFNJTE9OMz0uMDAxO0N0LkVQU0lMT040PTFlLTQ7Q3QuRVBTSUxPTjU9MWUtNTtDdC5FUFNJTE9ONj0xZS02O0N0LkVQU0lMT043PTFlLTc7Q3QuRVBTSUxPTjg9MWUtODtDdC5FUFNJTE9OOT0xZS05O0N0LkVQU0lMT04xMD0xZS0xMDtDdC5FUFNJTE9OMTE9MWUtMTE7Q3QuRVBTSUxPTjEyPTFlLTEyO0N0LkVQU0lMT04xMz0xZS0xMztDdC5FUFNJTE9OMTQ9MWUtMTQ7Q3QuRVBTSUxPTjE1PTFlLTE1O0N0LkVQU0lMT04xNj0xZS0xNjtDdC5FUFNJTE9OMTc9MWUtMTc7Q3QuRVBTSUxPTjE4PTFlLTE4O0N0LkVQU0lMT04xOT0xZS0xOTtDdC5FUFNJTE9OMjA9MWUtMjA7Q3QuRVBTSUxPTjIxPTFlLTIxO0N0LkdSQVZJVEFUSU9OQUxQQVJBTUVURVI9Mzk4NjAwNDQxOGU1O0N0LlNPTEFSX1JBRElVUz02OTU1ZTU7Q3QuTFVOQVJfUkFESVVTPTE3Mzc0MDA7Q3QuU0lYVFlfRk9VUl9LSUxPQllURVM9NjQqMTAyNDtDdC5GT1VSX0dJR0FCWVRFUz00KjEwMjQqMTAyNCoxMDI0O0N0LnNpZ249TWF0aC5zaWduPz9mdW5jdGlvbihlKXtyZXR1cm4gZT0rZSxlPT09MHx8ZSE9PWU/ZTplPjA/MTotMX07Q3Quc2lnbk5vdFplcm89ZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD8tMToxfTtDdC50b1NOb3JtPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZT8/MjU1LE1hdGgucm91bmQoKEN0LmNsYW1wKHQsLTEsMSkqLjUrLjUpKmUpfTtDdC5mcm9tU05vcm09ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPz8yNTUsQ3QuY2xhbXAodCwwLGUpL2UqMi0xfTtDdC5ub3JtYWxpemU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPU1hdGgubWF4KG4tZSwwKSxuPT09MD8wOkN0LmNsYW1wKCh0LWUpL24sMCwxKX07Q3Quc2luaD1NYXRoLnNpbmg/P2Z1bmN0aW9uKGUpe3JldHVybihNYXRoLmV4cChlKS1NYXRoLmV4cCgtZSkpLzJ9O0N0LmNvc2g9TWF0aC5jb3NoPz9mdW5jdGlvbihlKXtyZXR1cm4oTWF0aC5leHAoZSkrTWF0aC5leHAoLWUpKS8yfTtDdC5sZXJwPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4oMS1uKSp0K24qZX07Q3QuUEk9TWF0aC5QSTtDdC5PTkVfT1ZFUl9QST0xL01hdGguUEk7Q3QuUElfT1ZFUl9UV089TWF0aC5QSS8yO0N0LlBJX09WRVJfVEhSRUU9TWF0aC5QSS8zO0N0LlBJX09WRVJfRk9VUj1NYXRoLlBJLzQ7Q3QuUElfT1ZFUl9TSVg9TWF0aC5QSS82O0N0LlRIUkVFX1BJX09WRVJfVFdPPTMqTWF0aC5QSS8yO0N0LlRXT19QST0yKk1hdGguUEk7Q3QuT05FX09WRVJfVFdPX1BJPTEvKDIqTWF0aC5QSSk7Q3QuUkFESUFOU19QRVJfREVHUkVFPU1hdGguUEkvMTgwO0N0LkRFR1JFRVNfUEVSX1JBRElBTj0xODAvTWF0aC5QSTtDdC5SQURJQU5TX1BFUl9BUkNTRUNPTkQ9Q3QuUkFESUFOU19QRVJfREVHUkVFLzM2MDA7Q3QudG9SYWRpYW5zPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJkZWdyZWVzIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0KkN0LlJBRElBTlNfUEVSX0RFR1JFRX07Q3QudG9EZWdyZWVzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJyYWRpYW5zIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0KkN0LkRFR1JFRVNfUEVSX1JBRElBTn07Q3QuY29udmVydExvbmdpdHVkZVJhbmdlPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJhbmdsZSBpcyByZXF1aXJlZC4iKTtsZXQgZT1DdC5UV09fUEksbj10LU1hdGguZmxvb3IodC9lKSplO3JldHVybiBuPC1NYXRoLlBJP24rZTpuPj1NYXRoLlBJP24tZTpufTtDdC5jbGFtcFRvTGF0aXR1ZGVSYW5nZT1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgTCgiYW5nbGUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIEN0LmNsYW1wKHQsLTEqQ3QuUElfT1ZFUl9UV08sQ3QuUElfT1ZFUl9UV08pfTtDdC5uZWdhdGl2ZVBpVG9QaT1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgTCgiYW5nbGUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQ+PS1DdC5QSSYmdDw9Q3QuUEk/dDpDdC56ZXJvVG9Ud29QaSh0K0N0LlBJKS1DdC5QSX07Q3QuemVyb1RvVHdvUGk9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImFuZ2xlIGlzIHJlcXVpcmVkLiIpO2lmKHQ+PTAmJnQ8PUN0LlRXT19QSSlyZXR1cm4gdDtsZXQgZT1DdC5tb2QodCxDdC5UV09fUEkpO3JldHVybiBNYXRoLmFicyhlKTxDdC5FUFNJTE9OMTQmJk1hdGguYWJzKHQpPkN0LkVQU0lMT04xND9DdC5UV09fUEk6ZX07Q3QubW9kPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEwoIm0gaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoIm4gaXMgcmVxdWlyZWQuIik7aWYoZT09PTApdGhyb3cgbmV3IEwoImRpdmlzb3IgY2Fubm90IGJlIDAuIik7cmV0dXJuIEN0LnNpZ24odCk9PT1DdC5zaWduKGUpJiZNYXRoLmFicyh0KTxNYXRoLmFicyhlKT90Oih0JWUrZSklZX07Q3QuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgTCgibGVmdCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgicmlnaHQgaXMgcmVxdWlyZWQuIik7bj1uPz8wLG89bz8/bjtsZXQgcj1NYXRoLmFicyh0LWUpO3JldHVybiByPD1vfHxyPD1uKk1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKX07Q3QubGVzc1RoYW49ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJmaXJzdCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgic2Vjb25kIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBMKCJhYnNvbHV0ZUVwc2lsb24gaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQtZTwtbn07Q3QubGVzc1RoYW5PckVxdWFscz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoImZpcnN0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJzZWNvbmQgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEwoImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdC1lPG59O0N0LmdyZWF0ZXJUaGFuPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiZmlyc3QgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoInNlY29uZCBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgTCgiYWJzb2x1dGVFcHNpbG9uIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0LWU+bn07Q3QuZ3JlYXRlclRoYW5PckVxdWFscz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoImZpcnN0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJzZWNvbmQgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEwoImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdC1lPi1ufTtVbD1bMV07Q3QuZmFjdG9yaWFsPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwwKXRocm93IG5ldyBMKCJBIG51bWJlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCBpcyByZXF1aXJlZC4iKTtsZXQgZT1VbC5sZW5ndGg7aWYodD49ZSl7bGV0IG49VWxbZS0xXTtmb3IobGV0IG89ZTtvPD10O28rKyl7bGV0IHI9bipvO1VsLnB1c2gociksbj1yfX1yZXR1cm4gVWxbdF19O0N0LmluY3JlbWVudFdyYXA9ZnVuY3Rpb24odCxlLG4pe2lmKG49bj8/MCwhaCh0KSl0aHJvdyBuZXcgTCgibiBpcyByZXF1aXJlZC4iKTtpZihlPD1uKXRocm93IG5ldyBMKCJtYXhpbXVtVmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gbWluaW11bVZhbHVlLiIpO3JldHVybisrdCx0PmUmJih0PW4pLHR9O0N0LmlzUG93ZXJPZlR3bz1mdW5jdGlvbih0KXtpZih0eXBlb2YgdCE9Im51bWJlciJ8fHQ8MHx8dD40Mjk0OTY3Mjk1KXRocm93IG5ldyBMKCJBIG51bWJlciBiZXR3ZWVuIDAgYW5kICgyXjMyKS0xIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0IT09MCYmKHQmdC0xKT09PTB9O0N0Lm5leHRQb3dlck9mVHdvPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwwfHx0PjIxNDc0ODM2NDgpdGhyb3cgbmV3IEwoIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMl4zMSBpcyByZXF1aXJlZC4iKTtyZXR1cm4tLXQsdHw9dD4+MSx0fD10Pj4yLHR8PXQ+PjQsdHw9dD4+OCx0fD10Pj4xNiwrK3QsdH07Q3QucHJldmlvdXNQb3dlck9mVHdvPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwwfHx0PjQyOTQ5NjcyOTUpdGhyb3cgbmV3IEwoIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKDJeMzIpLTEgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHR8PXQ+PjEsdHw9dD4+Mix0fD10Pj40LHR8PXQ+PjgsdHw9dD4+MTYsdHw9dD4+MzIsdD0odD4+PjApLSh0Pj4+MSksdH07Q3QuY2xhbXA9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5udW1iZXIoInZhbHVlIix0KSx5LnR5cGVPZi5udW1iZXIoIm1pbiIsZSkseS50eXBlT2YubnVtYmVyKCJtYXgiLG4pLHQ8ZT9lOnQ+bj9uOnR9O18xPW5ldyB3bS5kZWZhdWx0O0N0LnNldFJhbmRvbU51bWJlclNlZWQ9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEwoInNlZWQgaXMgcmVxdWlyZWQuIik7XzE9bmV3IHdtLmRlZmF1bHQodCl9O0N0Lm5leHRSYW5kb21OdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gXzEucmFuZG9tKCl9O0N0LnJhbmRvbUJldHdlZW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gQ3QubmV4dFJhbmRvbU51bWJlcigpKihlLXQpK3R9O0N0LmFjb3NDbGFtcGVkPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJ2YWx1ZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gTWF0aC5hY29zKEN0LmNsYW1wKHQsLTEsMSkpfTtDdC5hc2luQ2xhbXBlZD1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgTCgidmFsdWUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIE1hdGguYXNpbihDdC5jbGFtcCh0LC0xLDEpKX07Q3QuY2hvcmRMZW5ndGg9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiYW5nbGUgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoInJhZGl1cyBpcyByZXF1aXJlZC4iKTtyZXR1cm4gMiplKk1hdGguc2luKHQqLjUpfTtDdC5sb2dCYXNlPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEwoIm51bWJlciBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgiYmFzZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5sb2coZSl9O0N0LmNicnQ9TWF0aC5jYnJ0Pz9mdW5jdGlvbihlKXtsZXQgbj1NYXRoLnBvdyhNYXRoLmFicyhlKSwuMzMzMzMzMzMzMzMzMzMzMyk7cmV0dXJuIGU8MD8tbjpufTtDdC5sb2cyPU1hdGgubG9nMj8/ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubG9nKGUpKk1hdGguTE9HMkV9O0N0LmZvZz1mdW5jdGlvbih0LGUpe2xldCBuPXQqZTtyZXR1cm4gMS1NYXRoLmV4cCgtKG4qbikpfTtDdC5mYXN0QXBwcm94aW1hdGVBdGFuPWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoIngiLHQpLHQqKC0uMTc4NCpNYXRoLmFicyh0KS0uMDY2Myp0KnQrMS4wMzAxKX07Q3QuZmFzdEFwcHJveGltYXRlQXRhbjI9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5udW1iZXIoIngiLHQpLHkudHlwZU9mLm51bWJlcigieSIsZSk7bGV0IG4sbz1NYXRoLmFicyh0KTtuPU1hdGguYWJzKGUpO2xldCByPU1hdGgubWF4KG8sbik7bj1NYXRoLm1pbihvLG4pO2xldCBpPW4vcjtpZihpc05hTihpKSl0aHJvdyBuZXcgTCgiZWl0aGVyIHggb3IgeSBtdXN0IGJlIG5vbnplcm8iKTtyZXR1cm4gbz1DdC5mYXN0QXBwcm94aW1hdGVBdGFuKGkpLG89TWF0aC5hYnMoZSk+TWF0aC5hYnModCk/Q3QuUElfT1ZFUl9UV08tbzpvLG89dDwwP0N0LlBJLW86byxvPWU8MD8tbzpvLG99O1A9Q3R9KTtmdW5jdGlvbiBBdCh0LGUsbil7dGhpcy54PXQ/PzAsdGhpcy55PWU/PzAsdGhpcy56PW4/PzB9dmFyIEdsLHkxLGtsLE9tLG5DLG1yLGpjLGEsTHQ9JCgoKT0+e1d0KCk7YXQoKTtqdCgpO0t0KCk7QXQuZnJvbVNwaGVyaWNhbD1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgic3BoZXJpY2FsIix0KSxoKGUpfHwoZT1uZXcgQXQpO2xldCBuPXQuY2xvY2ssbz10LmNvbmUscj10Lm1hZ25pdHVkZT8/MSxpPXIqTWF0aC5zaW4obyk7cmV0dXJuIGUueD1pKk1hdGguY29zKG4pLGUueT1pKk1hdGguc2luKG4pLGUuej1yKk1hdGguY29zKG8pLGV9O0F0LmZyb21FbGVtZW50cz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gaChvKT8oby54PXQsby55PWUsby56PW4sbyk6bmV3IEF0KHQsZSxuKX07QXQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLng9dC54LGUueT10LnksZS56PXQueixlKTpuZXcgQXQodC54LHQueSx0LnopfTtBdC5mcm9tQ2FydGVzaWFuND1BdC5jbG9uZTtBdC5wYWNrZWRMZW5ndGg9MztBdC5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGVbbisrXT10LngsZVtuKytdPXQueSxlW25dPXQueixlfTtBdC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IEF0KSxuLng9dFtlKytdLG4ueT10W2UrK10sbi56PXRbZV0sbn07QXQucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJhcnJheSIsdCk7bGV0IG49dC5sZW5ndGgsbz1uKjM7aWYoIWgoZSkpZT1uZXcgQXJyYXkobyk7ZWxzZXtpZighQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGghPT1vKXRocm93IG5ldyBMKCJJZiByZXN1bHQgaXMgYSB0eXBlZCBhcnJheSwgaXQgbXVzdCBoYXZlIGV4YWN0bHkgYXJyYXkubGVuZ3RoICogMyBlbGVtZW50cyIpO2UubGVuZ3RoIT09byYmKGUubGVuZ3RoPW8pfWZvcihsZXQgcj0wO3I8bjsrK3IpQXQucGFjayh0W3JdLGUsciozKTtyZXR1cm4gZX07QXQudW5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXtpZih5LmRlZmluZWQoImFycmF5Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiYXJyYXkubGVuZ3RoIix0Lmxlbmd0aCwzKSx0Lmxlbmd0aCUzIT09MCl0aHJvdyBuZXcgTCgiYXJyYXkgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzLiIpO2xldCBuPXQubGVuZ3RoO2goZSk/ZS5sZW5ndGg9bi8zOmU9bmV3IEFycmF5KG4vMyk7Zm9yKGxldCBvPTA7bzxuO28rPTMpe2xldCByPW8vMztlW3JdPUF0LnVucGFjayh0LG8sZVtyXSl9cmV0dXJuIGV9O0F0LmZyb21BcnJheT1BdC51bnBhY2s7QXQubWF4aW11bUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLE1hdGgubWF4KHQueCx0LnksdC56KX07QXQubWluaW11bUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLE1hdGgubWluKHQueCx0LnksdC56KX07QXQubWluaW11bUJ5Q29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJmaXJzdCIsdCkseS50eXBlT2Yub2JqZWN0KCJzZWNvbmQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9TWF0aC5taW4odC54LGUueCksbi55PU1hdGgubWluKHQueSxlLnkpLG4uej1NYXRoLm1pbih0LnosZS56KSxufTtBdC5tYXhpbXVtQnlDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImZpcnN0Iix0KSx5LnR5cGVPZi5vYmplY3QoInNlY29uZCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD1NYXRoLm1heCh0LngsZS54KSxuLnk9TWF0aC5tYXgodC55LGUueSksbi56PU1hdGgubWF4KHQueixlLnopLG59O0F0LmNsYW1wPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkudHlwZU9mLm9iamVjdCgibWluIixlKSx5LnR5cGVPZi5vYmplY3QoIm1heCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pO2xldCByPVAuY2xhbXAodC54LGUueCxuLngpLGk9UC5jbGFtcCh0LnksZS55LG4ueSkscz1QLmNsYW1wKHQueixlLnosbi56KTtyZXR1cm4gby54PXIsby55PWksby56PXMsb307QXQubWFnbml0dWRlU3F1YXJlZD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHQueCp0LngrdC55KnQueSt0LnoqdC56fTtBdC5tYWduaXR1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChBdC5tYWduaXR1ZGVTcXVhcmVkKHQpKX07R2w9bmV3IEF0O0F0LmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksQXQuc3VidHJhY3QodCxlLEdsKSxBdC5tYWduaXR1ZGUoR2wpfTtBdC5kaXN0YW5jZVNxdWFyZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSxBdC5zdWJ0cmFjdCh0LGUsR2wpLEF0Lm1hZ25pdHVkZVNxdWFyZWQoR2wpfTtBdC5ub3JtYWxpemU9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPUF0Lm1hZ25pdHVkZSh0KTtpZihlLng9dC54L24sZS55PXQueS9uLGUuej10Lnovbixpc05hTihlLngpfHxpc05hTihlLnkpfHxpc05hTihlLnopKXRocm93IG5ldyBMKCJub3JtYWxpemVkIHJlc3VsdCBpcyBub3QgYSBudW1iZXIiKTtyZXR1cm4gZX07QXQuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdC54KmUueCt0LnkqZS55K3QueiplLnp9O0F0Lm11bHRpcGx5Q29tcG9uZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngqZS54LG4ueT10LnkqZS55LG4uej10LnoqZS56LG59O0F0LmRpdmlkZUNvbXBvbmVudHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2UueCxuLnk9dC55L2UueSxuLno9dC56L2UueixufTtBdC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54K2UueCxuLnk9dC55K2UueSxuLno9dC56K2UueixufTtBdC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngtZS54LG4ueT10LnktZS55LG4uej10LnotZS56LG59O0F0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUsbi55PXQueSplLG4uej10LnoqZSxufTtBdC5kaXZpZGVCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxhciIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngvZSxuLnk9dC55L2Usbi56PXQuei9lLG59O0F0Lm5lZ2F0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD0tdC54LGUueT0tdC55LGUuej0tdC56LGV9O0F0LmFicz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD1NYXRoLmFicyh0LngpLGUueT1NYXRoLmFicyh0LnkpLGUuej1NYXRoLmFicyh0LnopLGV9O3kxPW5ldyBBdDtBdC5sZXJwPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksQXQubXVsdGlwbHlCeVNjYWxhcihlLG4seTEpLG89QXQubXVsdGlwbHlCeVNjYWxhcih0LDEtbixvKSxBdC5hZGQoeTEsbyxvKX07a2w9bmV3IEF0LE9tPW5ldyBBdDtBdC5hbmdsZUJldHdlZW49ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLEF0Lm5vcm1hbGl6ZSh0LGtsKSxBdC5ub3JtYWxpemUoZSxPbSk7bGV0IG49QXQuZG90KGtsLE9tKSxvPUF0Lm1hZ25pdHVkZShBdC5jcm9zcyhrbCxPbSxrbCkpO3JldHVybiBNYXRoLmF0YW4yKG8sbil9O25DPW5ldyBBdDtBdC5tb3N0T3J0aG9nb25hbEF4aXM9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPUF0Lm5vcm1hbGl6ZSh0LG5DKTtyZXR1cm4gQXQuYWJzKG4sbiksbi54PD1uLnk/bi54PD1uLno/ZT1BdC5jbG9uZShBdC5VTklUX1gsZSk6ZT1BdC5jbG9uZShBdC5VTklUX1osZSk6bi55PD1uLno/ZT1BdC5jbG9uZShBdC5VTklUX1ksZSk6ZT1BdC5jbG9uZShBdC5VTklUX1osZSksZX07QXQucHJvamVjdFZlY3Rvcj1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhIix0KSx5LmRlZmluZWQoImIiLGUpLHkuZGVmaW5lZCgicmVzdWx0IixuKTtsZXQgbz1BdC5kb3QodCxlKS9BdC5kb3QoZSxlKTtyZXR1cm4gQXQubXVsdGlwbHlCeVNjYWxhcihlLG8sbil9O0F0LmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmdC54PT09ZS54JiZ0Lnk9PT1lLnkmJnQuej09PWUuen07QXQuZXF1YWxzQXJyYXk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lng9PT1lW25dJiZ0Lnk9PT1lW24rMV0mJnQuej09PWVbbisyXX07QXQuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJlAuZXF1YWxzRXBzaWxvbih0LngsZS54LG4sbykmJlAuZXF1YWxzRXBzaWxvbih0LnksZS55LG4sbykmJlAuZXF1YWxzRXBzaWxvbih0LnosZS56LG4sbyl9O0F0LmNyb3NzPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10Lngscj10LnksaT10Lnoscz1lLngsZj1lLnksdT1lLnosYz1yKnUtaSpmLGw9aSpzLW8qdSxwPW8qZi1yKnM7cmV0dXJuIG4ueD1jLG4ueT1sLG4uej1wLG59O0F0Lm1pZHBvaW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PSh0LngrZS54KSouNSxuLnk9KHQueStlLnkpKi41LG4uej0odC56K2UueikqLjUsbn07QXQuZnJvbURlZ3JlZXM9ZnVuY3Rpb24odCxlLG4sbyxyKXtyZXR1cm4geS50eXBlT2YubnVtYmVyKCJsb25naXR1ZGUiLHQpLHkudHlwZU9mLm51bWJlcigibGF0aXR1ZGUiLGUpLHQ9UC50b1JhZGlhbnModCksZT1QLnRvUmFkaWFucyhlKSxBdC5mcm9tUmFkaWFucyh0LGUsbixvLHIpfTttcj1uZXcgQXQsamM9bmV3IEF0O0F0Ll9lbGxpcHNvaWRSYWRpaVNxdWFyZWQ9bmV3IEF0KDYzNzgxMzcqNjM3ODEzNyw2Mzc4MTM3KjYzNzgxMzcsNjM1Njc1MjMxNDI0NTE3OWUtOSo2MzU2NzUyMzE0MjQ1MTc5ZS05KTtBdC5mcm9tUmFkaWFucz1mdW5jdGlvbih0LGUsbixvLHIpe3kudHlwZU9mLm51bWJlcigibG9uZ2l0dWRlIix0KSx5LnR5cGVPZi5udW1iZXIoImxhdGl0dWRlIixlKSxuPW4/PzA7bGV0IGk9aChvKT9vLnJhZGlpU3F1YXJlZDpBdC5fZWxsaXBzb2lkUmFkaWlTcXVhcmVkLHM9TWF0aC5jb3MoZSk7bXIueD1zKk1hdGguY29zKHQpLG1yLnk9cypNYXRoLnNpbih0KSxtci56PU1hdGguc2luKGUpLG1yPUF0Lm5vcm1hbGl6ZShtcixtciksQXQubXVsdGlwbHlDb21wb25lbnRzKGksbXIsamMpO2xldCBmPU1hdGguc3FydChBdC5kb3QobXIsamMpKTtyZXR1cm4gamM9QXQuZGl2aWRlQnlTY2FsYXIoamMsZixqYyksbXI9QXQubXVsdGlwbHlCeVNjYWxhcihtcixuLG1yKSxoKHIpfHwocj1uZXcgQXQpLEF0LmFkZChqYyxtcixyKX07QXQuZnJvbURlZ3JlZXNBcnJheT1mdW5jdGlvbih0LGUsbil7aWYoeS5kZWZpbmVkKCJjb29yZGluYXRlcyIsdCksdC5sZW5ndGg8Mnx8dC5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEwoInRoZSBudW1iZXIgb2YgY29vcmRpbmF0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDIgYW5kIGF0IGxlYXN0IDIiKTtsZXQgbz10Lmxlbmd0aDtoKG4pP24ubGVuZ3RoPW8vMjpuPW5ldyBBcnJheShvLzIpO2ZvcihsZXQgcj0wO3I8bztyKz0yKXtsZXQgaT10W3JdLHM9dFtyKzFdLGY9ci8yO25bZl09QXQuZnJvbURlZ3JlZXMoaSxzLDAsZSxuW2ZdKX1yZXR1cm4gbn07QXQuZnJvbVJhZGlhbnNBcnJheT1mdW5jdGlvbih0LGUsbil7aWYoeS5kZWZpbmVkKCJjb29yZGluYXRlcyIsdCksdC5sZW5ndGg8Mnx8dC5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEwoInRoZSBudW1iZXIgb2YgY29vcmRpbmF0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDIgYW5kIGF0IGxlYXN0IDIiKTtsZXQgbz10Lmxlbmd0aDtoKG4pP24ubGVuZ3RoPW8vMjpuPW5ldyBBcnJheShvLzIpO2ZvcihsZXQgcj0wO3I8bztyKz0yKXtsZXQgaT10W3JdLHM9dFtyKzFdLGY9ci8yO25bZl09QXQuZnJvbVJhZGlhbnMoaSxzLDAsZSxuW2ZdKX1yZXR1cm4gbn07QXQuZnJvbURlZ3JlZXNBcnJheUhlaWdodHM9ZnVuY3Rpb24odCxlLG4pe2lmKHkuZGVmaW5lZCgiY29vcmRpbmF0ZXMiLHQpLHQubGVuZ3RoPDN8fHQubGVuZ3RoJTMhPT0wKXRocm93IG5ldyBMKCJ0aGUgbnVtYmVyIG9mIGNvb3JkaW5hdGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzIGFuZCBhdCBsZWFzdCAzIik7bGV0IG89dC5sZW5ndGg7aChuKT9uLmxlbmd0aD1vLzM6bj1uZXcgQXJyYXkoby8zKTtmb3IobGV0IHI9MDtyPG87cis9Myl7bGV0IGk9dFtyXSxzPXRbcisxXSxmPXRbcisyXSx1PXIvMztuW3VdPUF0LmZyb21EZWdyZWVzKGkscyxmLGUsblt1XSl9cmV0dXJuIG59O0F0LmZyb21SYWRpYW5zQXJyYXlIZWlnaHRzPWZ1bmN0aW9uKHQsZSxuKXtpZih5LmRlZmluZWQoImNvb3JkaW5hdGVzIix0KSx0Lmxlbmd0aDwzfHx0Lmxlbmd0aCUzIT09MCl0aHJvdyBuZXcgTCgidGhlIG51bWJlciBvZiBjb29yZGluYXRlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMyBhbmQgYXQgbGVhc3QgMyIpO2xldCBvPXQubGVuZ3RoO2gobik/bi5sZW5ndGg9by8zOm49bmV3IEFycmF5KG8vMyk7Zm9yKGxldCByPTA7cjxvO3IrPTMpe2xldCBpPXRbcl0scz10W3IrMV0sZj10W3IrMl0sdT1yLzM7blt1XT1BdC5mcm9tUmFkaWFucyhpLHMsZixlLG5bdV0pfXJldHVybiBufTtBdC5aRVJPPU9iamVjdC5mcmVlemUobmV3IEF0KDAsMCwwKSk7QXQuT05FPU9iamVjdC5mcmVlemUobmV3IEF0KDEsMSwxKSk7QXQuVU5JVF9YPU9iamVjdC5mcmVlemUobmV3IEF0KDEsMCwwKSk7QXQuVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IEF0KDAsMSwwKSk7QXQuVU5JVF9aPU9iamVjdC5mcmVlemUobmV3IEF0KDAsMCwxKSk7QXQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBBdC5jbG9uZSh0aGlzLHQpfTtBdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBBdC5lcXVhbHModGhpcyx0KX07QXQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiBBdC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlLG4pfTtBdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen0pYH07YT1BdH0pO2Z1bmN0aW9uIGlDKHQsZSxuLG8scil7aWYoIWgodCkpdGhyb3cgbmV3IEwoImNhcnRlc2lhbiBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgib25lT3ZlclJhZGlpIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBMKCJvbmVPdmVyUmFkaWlTcXVhcmVkIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBMKCJjZW50ZXJUb2xlcmFuY2VTcXVhcmVkIGlzIHJlcXVpcmVkLiIpO2xldCBpPXQueCxzPXQueSxmPXQueix1PWUueCxjPWUueSxsPWUueixwPWkqaSp1KnUsZD1zKnMqYypjLG09ZipmKmwqbCxfPXArZCttLGc9TWF0aC5zcXJ0KDEvXyksYj1hLm11bHRpcGx5QnlTY2FsYXIodCxnLG9DKTtpZihfPG8pcmV0dXJuIGlzRmluaXRlKGcpP2EuY2xvbmUoYixyKTp2b2lkIDA7bGV0IFQ9bi54LE89bi55LEU9bi56LHc9ckM7dy54PWIueCpUKjIsdy55PWIueSpPKjIsdy56PWIueipFKjI7bGV0IEM9KDEtZykqYS5tYWduaXR1ZGUodCkvKC41KmEubWFnbml0dWRlKHcpKSxNPTAsTixGLEksdixCLEEsUyx4LEQseixqO2Rve0MtPU0sST0xLygxK0MqVCksdj0xLygxK0MqTyksQj0xLygxK0MqRSksQT1JKkksUz12KnYseD1CKkIsRD1BKkksej1TKnYsaj14KkIsTj1wKkErZCpTK20qeC0xLEY9cCpEKlQrZCp6Kk8rbSpqKkU7bGV0IGs9LTIqRjtNPU4va313aGlsZShNYXRoLmFicyhOKT5QLkVQU0lMT04xMik7cmV0dXJuIGgocik/KHIueD1pKkksci55PXMqdixyLno9ZipCLHIpOm5ldyBhKGkqSSxzKnYsZipCKX12YXIgb0MsckMsVmwsRW09JCgoKT0+e0x0KCk7YXQoKTtqdCgpO0t0KCk7b0M9bmV3IGEsckM9bmV3IGE7Vmw9aUN9KTtmdW5jdGlvbiBfbih0LGUsbil7dGhpcy5sb25naXR1ZGU9dD8/MCx0aGlzLmxhdGl0dWRlPWU/PzAsdGhpcy5oZWlnaHQ9bj8/MH12YXIgc0MsY0MsYUMsc3QsSWU9JCgoKT0+e0x0KCk7V3QoKTthdCgpO0t0KCk7RW0oKTtfbi5mcm9tUmFkaWFucz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4geS50eXBlT2YubnVtYmVyKCJsb25naXR1ZGUiLHQpLHkudHlwZU9mLm51bWJlcigibGF0aXR1ZGUiLGUpLG49bj8/MCxoKG8pPyhvLmxvbmdpdHVkZT10LG8ubGF0aXR1ZGU9ZSxvLmhlaWdodD1uLG8pOm5ldyBfbih0LGUsbil9O19uLmZyb21EZWdyZWVzPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5udW1iZXIoImxvbmdpdHVkZSIsdCkseS50eXBlT2YubnVtYmVyKCJsYXRpdHVkZSIsZSksdD1QLnRvUmFkaWFucyh0KSxlPVAudG9SYWRpYW5zKGUpLF9uLmZyb21SYWRpYW5zKHQsZSxuLG8pfTtzQz1uZXcgYSxjQz1uZXcgYSxhQz1uZXcgYTtfbi5fZWxsaXBzb2lkT25lT3ZlclJhZGlpPW5ldyBhKDEvNjM3ODEzNywxLzYzNzgxMzcsMS82MzU2NzUyMzE0MjQ1MTc5ZS05KTtfbi5fZWxsaXBzb2lkT25lT3ZlclJhZGlpU3F1YXJlZD1uZXcgYSgxLyg2Mzc4MTM3KjYzNzgxMzcpLDEvKDYzNzgxMzcqNjM3ODEzNyksMS8oNjM1Njc1MjMxNDI0NTE3OWUtOSo2MzU2NzUyMzE0MjQ1MTc5ZS05KSk7X24uX2VsbGlwc29pZENlbnRlclRvbGVyYW5jZVNxdWFyZWQ9UC5FUFNJTE9OMTtfbi5mcm9tQ2FydGVzaWFuPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1oKGUpP2Uub25lT3ZlclJhZGlpOl9uLl9lbGxpcHNvaWRPbmVPdmVyUmFkaWkscj1oKGUpP2Uub25lT3ZlclJhZGlpU3F1YXJlZDpfbi5fZWxsaXBzb2lkT25lT3ZlclJhZGlpU3F1YXJlZCxpPWgoZSk/ZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZDpfbi5fZWxsaXBzb2lkQ2VudGVyVG9sZXJhbmNlU3F1YXJlZCxzPVZsKHQsbyxyLGksY0MpO2lmKCFoKHMpKXJldHVybjtsZXQgZj1hLm11bHRpcGx5Q29tcG9uZW50cyhzLHIsc0MpO2Y9YS5ub3JtYWxpemUoZixmKTtsZXQgdT1hLnN1YnRyYWN0KHQscyxhQyksYz1NYXRoLmF0YW4yKGYueSxmLngpLGw9TWF0aC5hc2luKGYueikscD1QLnNpZ24oYS5kb3QodSx0KSkqYS5tYWduaXR1ZGUodSk7cmV0dXJuIGgobik/KG4ubG9uZ2l0dWRlPWMsbi5sYXRpdHVkZT1sLG4uaGVpZ2h0PXAsbik6bmV3IF9uKGMsbCxwKX07X24udG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImNhcnRvZ3JhcGhpYyIsdCksYS5mcm9tUmFkaWFucyh0LmxvbmdpdHVkZSx0LmxhdGl0dWRlLHQuaGVpZ2h0LGUsbil9O19uLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZS5sb25naXR1ZGU9dC5sb25naXR1ZGUsZS5sYXRpdHVkZT10LmxhdGl0dWRlLGUuaGVpZ2h0PXQuaGVpZ2h0LGUpOm5ldyBfbih0LmxvbmdpdHVkZSx0LmxhdGl0dWRlLHQuaGVpZ2h0KX07X24uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0LmxvbmdpdHVkZT09PWUubG9uZ2l0dWRlJiZ0LmxhdGl0dWRlPT09ZS5sYXRpdHVkZSYmdC5oZWlnaHQ9PT1lLmhlaWdodH07X24uZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49bj8/MCx0PT09ZXx8aCh0KSYmaChlKSYmTWF0aC5hYnModC5sb25naXR1ZGUtZS5sb25naXR1ZGUpPD1uJiZNYXRoLmFicyh0LmxhdGl0dWRlLWUubGF0aXR1ZGUpPD1uJiZNYXRoLmFicyh0LmhlaWdodC1lLmhlaWdodCk8PW59O19uLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgX24oMCwwLDApKTtfbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIF9uLmNsb25lKHRoaXMsdCl9O19uLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIF9uLmVxdWFscyh0aGlzLHQpfTtfbi5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUpe3JldHVybiBfbi5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlKX07X24ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMubG9uZ2l0dWRlfSwgJHt0aGlzLmxhdGl0dWRlfSwgJHt0aGlzLmhlaWdodH0pYH07c3Q9X259KTtmdW5jdGlvbiB6dCh0LGUpe3RoaXMueD10Pz8wLHRoaXMueT1lPz8wfXZhciB6bCxnMSxBMSxiMSxmQyxKLFVlPSQoKCk9PntXdCgpO2F0KCk7anQoKTtLdCgpO3p0LmZyb21FbGVtZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGgobik/KG4ueD10LG4ueT1lLG4pOm5ldyB6dCh0LGUpfTt6dC5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGUueD10LngsZS55PXQueSxlKTpuZXcgenQodC54LHQueSl9O3p0LmZyb21DYXJ0ZXNpYW4zPXp0LmNsb25lO3p0LmZyb21DYXJ0ZXNpYW40PXp0LmNsb25lO3p0LnBhY2tlZExlbmd0aD0yO3p0LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXQueCxlW25dPXQueSxlfTt6dC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IHp0KSxuLng9dFtlKytdLG4ueT10W2VdLG59O3p0LnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiYXJyYXkiLHQpO2xldCBuPXQubGVuZ3RoLG89bioyO2lmKCFoKGUpKWU9bmV3IEFycmF5KG8pO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoIT09byl0aHJvdyBuZXcgTCgiSWYgcmVzdWx0IGlzIGEgdHlwZWQgYXJyYXksIGl0IG11c3QgaGF2ZSBleGFjdGx5IGFycmF5Lmxlbmd0aCAqIDIgZWxlbWVudHMiKTtlLmxlbmd0aCE9PW8mJihlLmxlbmd0aD1vKX1mb3IobGV0IHI9MDtyPG47KytyKXp0LnBhY2sodFtyXSxlLHIqMik7cmV0dXJuIGV9O3p0LnVucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJhcnJheSIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImFycmF5Lmxlbmd0aCIsdC5sZW5ndGgsMiksdC5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEwoImFycmF5IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMi4iKTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW4vMjplPW5ldyBBcnJheShuLzIpO2ZvcihsZXQgbz0wO288bjtvKz0yKXtsZXQgcj1vLzI7ZVtyXT16dC51bnBhY2sodCxvLGVbcl0pfXJldHVybiBlfTt6dC5mcm9tQXJyYXk9enQudW5wYWNrO3p0Lm1heGltdW1Db21wb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSxNYXRoLm1heCh0LngsdC55KX07enQubWluaW11bUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLE1hdGgubWluKHQueCx0LnkpfTt6dC5taW5pbXVtQnlDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImZpcnN0Iix0KSx5LnR5cGVPZi5vYmplY3QoInNlY29uZCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD1NYXRoLm1pbih0LngsZS54KSxuLnk9TWF0aC5taW4odC55LGUueSksbn07enQubWF4aW11bUJ5Q29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJmaXJzdCIsdCkseS50eXBlT2Yub2JqZWN0KCJzZWNvbmQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9TWF0aC5tYXgodC54LGUueCksbi55PU1hdGgubWF4KHQueSxlLnkpLG59O3p0LmNsYW1wPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkudHlwZU9mLm9iamVjdCgibWluIixlKSx5LnR5cGVPZi5vYmplY3QoIm1heCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pO2xldCByPVAuY2xhbXAodC54LGUueCxuLngpLGk9UC5jbGFtcCh0LnksZS55LG4ueSk7cmV0dXJuIG8ueD1yLG8ueT1pLG99O3p0Lm1hZ25pdHVkZVNxdWFyZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx0LngqdC54K3QueSp0Lnl9O3p0Lm1hZ25pdHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KHp0Lm1hZ25pdHVkZVNxdWFyZWQodCkpfTt6bD1uZXcgenQ7enQuZGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx6dC5zdWJ0cmFjdCh0LGUsemwpLHp0Lm1hZ25pdHVkZSh6bCl9O3p0LmRpc3RhbmNlU3F1YXJlZD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHp0LnN1YnRyYWN0KHQsZSx6bCksenQubWFnbml0dWRlU3F1YXJlZCh6bCl9O3p0Lm5vcm1hbGl6ZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49enQubWFnbml0dWRlKHQpO2lmKGUueD10LngvbixlLnk9dC55L24saXNOYU4oZS54KXx8aXNOYU4oZS55KSl0aHJvdyBuZXcgTCgibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyIik7cmV0dXJuIGV9O3p0LmRvdD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHQueCplLngrdC55KmUueX07enQuY3Jvc3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx0LngqZS55LXQueSplLnh9O3p0Lm11bHRpcGx5Q29tcG9uZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngqZS54LG4ueT10LnkqZS55LG59O3p0LmRpdmlkZUNvbXBvbmVudHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2UueCxuLnk9dC55L2UueSxufTt6dC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54K2UueCxuLnk9dC55K2UueSxufTt6dC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngtZS54LG4ueT10LnktZS55LG59O3p0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUsbi55PXQueSplLG59O3p0LmRpdmlkZUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueC9lLG4ueT10LnkvZSxufTt6dC5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9LXQueCxlLnk9LXQueSxlfTt6dC5hYnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9TWF0aC5hYnModC54KSxlLnk9TWF0aC5hYnModC55KSxlfTtnMT1uZXcgenQ7enQubGVycD1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzdGFydCIsdCkseS50eXBlT2Yub2JqZWN0KCJlbmQiLGUpLHkudHlwZU9mLm51bWJlcigidCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pLHp0Lm11bHRpcGx5QnlTY2FsYXIoZSxuLGcxKSxvPXp0Lm11bHRpcGx5QnlTY2FsYXIodCwxLW4sbyksenQuYWRkKGcxLG8sbyl9O0ExPW5ldyB6dCxiMT1uZXcgenQ7enQuYW5nbGVCZXR3ZWVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksenQubm9ybWFsaXplKHQsQTEpLHp0Lm5vcm1hbGl6ZShlLGIxKSxQLmFjb3NDbGFtcGVkKHp0LmRvdChBMSxiMSkpfTtmQz1uZXcgenQ7enQubW9zdE9ydGhvZ29uYWxBeGlzPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj16dC5ub3JtYWxpemUodCxmQyk7cmV0dXJuIHp0LmFicyhuLG4pLG4ueDw9bi55P2U9enQuY2xvbmUoenQuVU5JVF9YLGUpOmU9enQuY2xvbmUoenQuVU5JVF9ZLGUpLGV9O3p0LmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmdC54PT09ZS54JiZ0Lnk9PT1lLnl9O3p0LmVxdWFsc0FycmF5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC54PT09ZVtuXSYmdC55PT09ZVtuKzFdfTt6dC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmUC5lcXVhbHNFcHNpbG9uKHQueCxlLngsbixvKSYmUC5lcXVhbHNFcHNpbG9uKHQueSxlLnksbixvKX07enQuWkVSTz1PYmplY3QuZnJlZXplKG5ldyB6dCgwLDApKTt6dC5PTkU9T2JqZWN0LmZyZWV6ZShuZXcgenQoMSwxKSk7enQuVU5JVF9YPU9iamVjdC5mcmVlemUobmV3IHp0KDEsMCkpO3p0LlVOSVRfWT1PYmplY3QuZnJlZXplKG5ldyB6dCgwLDEpKTt6dC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHp0LmNsb25lKHRoaXMsdCl9O3p0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHp0LmVxdWFscyh0aGlzLHQpfTt6dC5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHp0LmVxdWFsc0Vwc2lsb24odGhpcyx0LGUsbil9O3p0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzLnh9LCAke3RoaXMueX0pYH07Sj16dH0pO2Z1bmN0aW9uIHcxKHQsZSxuLG8pe2U9ZT8/MCxuPW4/PzAsbz1vPz8wLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ4IixlLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ5IixuLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ6IixvLDApLHQuX3JhZGlpPW5ldyBhKGUsbixvKSx0Ll9yYWRpaVNxdWFyZWQ9bmV3IGEoZSplLG4qbixvKm8pLHQuX3JhZGlpVG9UaGVGb3VydGg9bmV3IGEoZSplKmUqZSxuKm4qbipuLG8qbypvKm8pLHQuX29uZU92ZXJSYWRpaT1uZXcgYShlPT09MD8wOjEvZSxuPT09MD8wOjEvbixvPT09MD8wOjEvbyksdC5fb25lT3ZlclJhZGlpU3F1YXJlZD1uZXcgYShlPT09MD8wOjEvKGUqZSksbj09PTA/MDoxLyhuKm4pLG89PT0wPzA6MS8obypvKSksdC5fbWluaW11bVJhZGl1cz1NYXRoLm1pbihlLG4sbyksdC5fbWF4aW11bVJhZGl1cz1NYXRoLm1heChlLG4sbyksdC5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZD1QLkVQU0lMT04xLHQuX3JhZGlpU3F1YXJlZC56IT09MCYmKHQuX3NxdWFyZWRYT3ZlclNxdWFyZWRaPXQuX3JhZGlpU3F1YXJlZC54L3QuX3JhZGlpU3F1YXJlZC56KX1mdW5jdGlvbiB4ZSh0LGUsbil7dGhpcy5fcmFkaWk9dm9pZCAwLHRoaXMuX3JhZGlpU3F1YXJlZD12b2lkIDAsdGhpcy5fcmFkaWlUb1RoZUZvdXJ0aD12b2lkIDAsdGhpcy5fb25lT3ZlclJhZGlpPXZvaWQgMCx0aGlzLl9vbmVPdmVyUmFkaWlTcXVhcmVkPXZvaWQgMCx0aGlzLl9taW5pbXVtUmFkaXVzPXZvaWQgMCx0aGlzLl9tYXhpbXVtUmFkaXVzPXZvaWQgMCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkPXZvaWQgMCx0aGlzLl9zcXVhcmVkWE92ZXJTcXVhcmVkWj12b2lkIDAsdzEodGhpcyx0LGUsbil9ZnVuY3Rpb24gVDEodCxlLG4pe3kudHlwZU9mLm51bWJlcigiYSIsdCkseS50eXBlT2YubnVtYmVyKCJiIixlKSx5LnR5cGVPZi5mdW5jKCJmdW5jIixuKTtsZXQgbz0uNSooZSt0KSxyPS41KihlLXQpLGk9MDtmb3IobGV0IHM9MDtzPDU7cysrKXtsZXQgZj1yKl9DW3NdO2krPXlDW3NdKihuKG8rZikrbihvLWYpKX1yZXR1cm4gaSo9cixpfXZhciB1QyxsQyxwQyxkQyxtQyxoQyxfQyx5QyxZLCR0PSQoKCk9PntVZSgpO0x0KCk7SWUoKTtXdCgpO2F0KCk7anQoKTtLdCgpO0VtKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeGUucHJvdG90eXBlLHtyYWRpaTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGlpfX0scmFkaWlTcXVhcmVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaWlTcXVhcmVkfX0scmFkaWlUb1RoZUZvdXJ0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGlpVG9UaGVGb3VydGh9fSxvbmVPdmVyUmFkaWk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbmVPdmVyUmFkaWl9fSxvbmVPdmVyUmFkaWlTcXVhcmVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZH19LG1pbmltdW1SYWRpdXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5pbXVtUmFkaXVzfX0sbWF4aW11bVJhZGl1czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heGltdW1SYWRpdXN9fX0pO3hlLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpcmV0dXJuO2xldCBuPXQuX3JhZGlpO3JldHVybiBoKGUpPyhhLmNsb25lKG4sZS5fcmFkaWkpLGEuY2xvbmUodC5fcmFkaWlTcXVhcmVkLGUuX3JhZGlpU3F1YXJlZCksYS5jbG9uZSh0Ll9yYWRpaVRvVGhlRm91cnRoLGUuX3JhZGlpVG9UaGVGb3VydGgpLGEuY2xvbmUodC5fb25lT3ZlclJhZGlpLGUuX29uZU92ZXJSYWRpaSksYS5jbG9uZSh0Ll9vbmVPdmVyUmFkaWlTcXVhcmVkLGUuX29uZU92ZXJSYWRpaVNxdWFyZWQpLGUuX21pbmltdW1SYWRpdXM9dC5fbWluaW11bVJhZGl1cyxlLl9tYXhpbXVtUmFkaXVzPXQuX21heGltdW1SYWRpdXMsZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZD10Ll9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkLGUpOm5ldyB4ZShuLngsbi55LG4ueil9O3hlLmZyb21DYXJ0ZXNpYW4zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgoZSl8fChlPW5ldyB4ZSksaCh0KSYmdzEoZSx0LngsdC55LHQueiksZX07eGUuV0dTODQ9T2JqZWN0LmZyZWV6ZShuZXcgeGUoNjM3ODEzNyw2Mzc4MTM3LDYzNTY3NTIzMTQyNDUxNzllLTkpKTt4ZS5VTklUX1NQSEVSRT1PYmplY3QuZnJlZXplKG5ldyB4ZSgxLDEsMSkpO3hlLk1PT049T2JqZWN0LmZyZWV6ZShuZXcgeGUoUC5MVU5BUl9SQURJVVMsUC5MVU5BUl9SQURJVVMsUC5MVU5BUl9SQURJVVMpKTt4ZS5fZGVmYXVsdD14ZS5XR1M4NDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh4ZSx7ZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHhlLl9kZWZhdWx0fSxzZXQ6ZnVuY3Rpb24odCl7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseGUuX2RlZmF1bHQ9dCxhLl9lbGxpcHNvaWRSYWRpaVNxdWFyZWQ9dC5yYWRpaVNxdWFyZWQsc3QuX2VsbGlwc29pZE9uZU92ZXJSYWRpaT10Lm9uZU92ZXJSYWRpaSxzdC5fZWxsaXBzb2lkT25lT3ZlclJhZGlpU3F1YXJlZD10Lm9uZU92ZXJSYWRpaVNxdWFyZWQsc3QuX2VsbGlwc29pZENlbnRlclRvbGVyYW5jZVNxdWFyZWQ9dC5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZH19fSk7eGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB4ZS5jbG9uZSh0aGlzLHQpfTt4ZS5wYWNrZWRMZW5ndGg9YS5wYWNrZWRMZW5ndGg7eGUucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxhLnBhY2sodC5fcmFkaWksZSxuKSxlfTt4ZS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1hLnVucGFjayh0LGUpO3JldHVybiB4ZS5mcm9tQ2FydGVzaWFuMyhvLG4pfTt4ZS5wcm90b3R5cGUuZ2VvY2VudHJpY1N1cmZhY2VOb3JtYWw9YS5ub3JtYWxpemU7eGUucHJvdG90eXBlLmdlb2RldGljU3VyZmFjZU5vcm1hbENhcnRvZ3JhcGhpYz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydG9ncmFwaGljIix0KTtsZXQgbj10LmxvbmdpdHVkZSxvPXQubGF0aXR1ZGUscj1NYXRoLmNvcyhvKSxpPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGY9TWF0aC5zaW4obyk7cmV0dXJuIGgoZSl8fChlPW5ldyBhKSxlLng9aSxlLnk9cyxlLno9ZixhLm5vcm1hbGl6ZShlLGUpfTt4ZS5wcm90b3R5cGUuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLGlzTmFOKHQueCl8fGlzTmFOKHQueSl8fGlzTmFOKHQueikpdGhyb3cgbmV3IEwoImNhcnRlc2lhbiBoYXMgYSBOYU4gY29tcG9uZW50Iik7aWYoIWEuZXF1YWxzRXBzaWxvbih0LGEuWkVSTyxQLkVQU0lMT04xNCkpcmV0dXJuIGgoZSl8fChlPW5ldyBhKSxlPWEubXVsdGlwbHlDb21wb25lbnRzKHQsdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZCxlKSxhLm5vcm1hbGl6ZShlLGUpfTt1Qz1uZXcgYSxsQz1uZXcgYTt4ZS5wcm90b3R5cGUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlKXtsZXQgbj11QyxvPWxDO3RoaXMuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsQ2FydG9ncmFwaGljKHQsbiksYS5tdWx0aXBseUNvbXBvbmVudHModGhpcy5fcmFkaWlTcXVhcmVkLG4sbyk7bGV0IHI9TWF0aC5zcXJ0KGEuZG90KG4sbykpO3JldHVybiBhLmRpdmlkZUJ5U2NhbGFyKG8scixvKSxhLm11bHRpcGx5QnlTY2FsYXIobix0LmhlaWdodCxuKSxoKGUpfHwoZT1uZXcgYSksYS5hZGQobyxuLGUpfTt4ZS5wcm90b3R5cGUuY2FydG9ncmFwaGljQXJyYXlUb0NhcnRlc2lhbkFycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0b2dyYXBoaWNzIix0KTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW46ZT1uZXcgQXJyYXkobik7Zm9yKGxldCBvPTA7bzxuO28rKyllW29dPXRoaXMuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odFtvXSxlW29dKTtyZXR1cm4gZX07cEM9bmV3IGEsZEM9bmV3IGEsbUM9bmV3IGE7eGUucHJvdG90eXBlLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljPWZ1bmN0aW9uKHQsZSl7bGV0IG49dGhpcy5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHQsZEMpO2lmKCFoKG4pKXJldHVybjtsZXQgbz10aGlzLmdlb2RldGljU3VyZmFjZU5vcm1hbChuLHBDKSxyPWEuc3VidHJhY3QodCxuLG1DKSxpPU1hdGguYXRhbjIoby55LG8ueCkscz1NYXRoLmFzaW4oby56KSxmPVAuc2lnbihhLmRvdChyLHQpKSphLm1hZ25pdHVkZShyKTtyZXR1cm4gaChlKT8oZS5sb25naXR1ZGU9aSxlLmxhdGl0dWRlPXMsZS5oZWlnaHQ9ZixlKTpuZXcgc3QoaSxzLGYpfTt4ZS5wcm90b3R5cGUuY2FydGVzaWFuQXJyYXlUb0NhcnRvZ3JhcGhpY0FycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0ZXNpYW5zIix0KTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW46ZT1uZXcgQXJyYXkobik7Zm9yKGxldCBvPTA7bzxuOysrbyllW29dPXRoaXMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModFtvXSxlW29dKTtyZXR1cm4gZX07eGUucHJvdG90eXBlLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmwodCx0aGlzLl9vbmVPdmVyUmFkaWksdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkLGUpfTt4ZS5wcm90b3R5cGUuc2NhbGVUb0dlb2NlbnRyaWNTdXJmYWNlPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLGgoZSl8fChlPW5ldyBhKTtsZXQgbj10Lngsbz10Lnkscj10LnosaT10aGlzLl9vbmVPdmVyUmFkaWlTcXVhcmVkLHM9MS9NYXRoLnNxcnQobipuKmkueCtvKm8qaS55K3IqcippLnopO3JldHVybiBhLm11bHRpcGx5QnlTY2FsYXIodCxzLGUpfTt4ZS5wcm90b3R5cGUudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgoZSl8fChlPW5ldyBhKSxhLm11bHRpcGx5Q29tcG9uZW50cyh0LHRoaXMuX29uZU92ZXJSYWRpaSxlKX07eGUucHJvdG90eXBlLnRyYW5zZm9ybVBvc2l0aW9uRnJvbVNjYWxlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgoZSl8fChlPW5ldyBhKSxhLm11bHRpcGx5Q29tcG9uZW50cyh0LHRoaXMuX3JhZGlpLGUpfTt4ZS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dHx8aCh0KSYmYS5lcXVhbHModGhpcy5fcmFkaWksdC5fcmFkaWkpfTt4ZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaWkudG9TdHJpbmcoKX07eGUucHJvdG90eXBlLmdldFN1cmZhY2VOb3JtYWxJbnRlcnNlY3Rpb25XaXRoWkF4aXM9ZnVuY3Rpb24odCxlLG4pe2lmKHkudHlwZU9mLm9iamVjdCgicG9zaXRpb24iLHQpLCFQLmVxdWFsc0Vwc2lsb24odGhpcy5fcmFkaWkueCx0aGlzLl9yYWRpaS55LFAuRVBTSUxPTjE1KSl0aHJvdyBuZXcgTCgiRWxsaXBzb2lkIG11c3QgYmUgYW4gZWxsaXBzb2lkIG9mIHJldm9sdXRpb24gKHJhZGlpLnggPT0gcmFkaWkueSkiKTt5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oIkVsbGlwc29pZC5yYWRpaS56Iix0aGlzLl9yYWRpaS56LDApLGU9ZT8/MDtsZXQgbz10aGlzLl9zcXVhcmVkWE92ZXJTcXVhcmVkWjtpZihoKG4pfHwobj1uZXcgYSksbi54PTAsbi55PTAsbi56PXQueiooMS1vKSwhKE1hdGguYWJzKG4ueik+PXRoaXMuX3JhZGlpLnotZSkpcmV0dXJuIG59O2hDPW5ldyBhO3hlLnByb3RvdHlwZS5nZXRMb2NhbEN1cnZhdHVyZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgic3VyZmFjZVBvc2l0aW9uIix0KSxoKGUpfHwoZT1uZXcgSik7bGV0IG49dGhpcy5nZXRTdXJmYWNlTm9ybWFsSW50ZXJzZWN0aW9uV2l0aFpBeGlzKHQsMCxoQyksbz1hLmRpc3RhbmNlKHQsbikscj10aGlzLm1pbmltdW1SYWRpdXMqby90aGlzLm1heGltdW1SYWRpdXMqKjIsaT1vKnIqKjI7cmV0dXJuIEouZnJvbUVsZW1lbnRzKDEvbywxL2ksZSl9O19DPVsuMTQ4ODc0MzM4OTgxNjMsLjQzMzM5NTM5NDEyOTI1LC42Nzk0MDk1NjgyOTkwMiwuODY1MDYzMzY2Njg4OTgsLjk3MzkwNjUyODUxNzE3LDBdLHlDPVsuMjk1NTI0MjI0NzE0NzUsLjI2OTI2NjcxOTMwOTk5LC4yMTkwODYzNjI1MTU5OCwuMTQ5NDUxMzQ5MTUwNTgsLjA2NjY3MTM0NDMwODY4NCwwXTt4ZS5wcm90b3R5cGUuc3VyZmFjZUFyZWE9ZnVuY3Rpb24odCl7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpO2xldCBlPXQud2VzdCxuPXQuZWFzdCxvPXQuc291dGgscj10Lm5vcnRoO2Zvcig7bjxlOyluKz1QLlRXT19QSTtsZXQgaT10aGlzLl9yYWRpaVNxdWFyZWQscz1pLngsZj1pLnksdT1pLnosYz1zKmY7cmV0dXJuIFQxKG8scixmdW5jdGlvbihsKXtsZXQgcD1NYXRoLmNvcyhsKSxkPU1hdGguc2luKGwpO3JldHVybiBNYXRoLmNvcyhsKSpUMShlLG4sZnVuY3Rpb24obSl7bGV0IF89TWF0aC5jb3MobSksZz1NYXRoLnNpbihtKTtyZXR1cm4gTWF0aC5zcXJ0KGMqZCpkK3UqKGYqXypfK3MqZypnKSpwKnApfSl9KX07WT14ZX0pO2Z1bmN0aW9uIGpsKHQpe3RoaXMuX2VsbGlwc29pZD10Pz9ZLmRlZmF1bHQsdGhpcy5fc2VtaW1ham9yQXhpcz10aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcz0xL3RoaXMuX3NlbWltYWpvckF4aXN9dmFyIEpuLFNpPSQoKCk9PntMdCgpO0llKCk7YXQoKTtqdCgpOyR0KCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoamwucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fX0pO2psLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7bGV0IG49dGhpcy5fc2VtaW1ham9yQXhpcyxvPXQubG9uZ2l0dWRlKm4scj10LmxhdGl0dWRlKm4saT10LmhlaWdodDtyZXR1cm4gaChlKT8oZS54PW8sZS55PXIsZS56PWksZSk6bmV3IGEobyxyLGkpfTtqbC5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImNhcnRlc2lhbiBpcyByZXF1aXJlZCIpO2xldCBuPXRoaXMuX29uZU92ZXJTZW1pbWFqb3JBeGlzLG89dC54Km4scj10LnkqbixpPXQuejtyZXR1cm4gaChlKT8oZS5sb25naXR1ZGU9byxlLmxhdGl0dWRlPXIsZS5oZWlnaHQ9aSxlKTpuZXcgc3QobyxyLGkpfTtKbj1qbH0pO3ZhciBnQyxTbixHcz0kKCgpPT57Z0M9e09VVFNJREU6LTEsSU5URVJTRUNUSU5HOjAsSU5TSURFOjF9LFNuPU9iamVjdC5mcmVlemUoZ0MpfSk7ZnVuY3Rpb24gQUModCxlKXt0aGlzLnN0YXJ0PXQ/PzAsdGhpcy5zdG9wPWU/PzB9dmFyIFFyLEhsPSQoKCk9PntRcj1BQ30pO2Z1bmN0aW9uIFR0KHQsZSxuLG8scixpLHMsZix1KXt0aGlzWzBdPXQ/PzAsdGhpc1sxXT1vPz8wLHRoaXNbMl09cz8/MCx0aGlzWzNdPWU/PzAsdGhpc1s0XT1yPz8wLHRoaXNbNV09Zj8/MCx0aGlzWzZdPW4/PzAsdGhpc1s3XT1pPz8wLHRoaXNbOF09dT8/MH1mdW5jdGlvbiBFQyh0KXtsZXQgZT0wO2ZvcihsZXQgbj0wO248OTsrK24pe2xldCBvPXRbbl07ZSs9bypvfXJldHVybiBNYXRoLnNxcnQoZSl9ZnVuY3Rpb24gUkModCl7bGV0IGU9MDtmb3IobGV0IG49MDtuPDM7KytuKXtsZXQgbz10W1R0LmdldEVsZW1lbnRJbmRleChDbVtuXSxTbVtuXSldO2UrPTIqbypvfXJldHVybiBNYXRoLnNxcnQoZSl9ZnVuY3Rpb24gU0ModCxlKXtsZXQgbj1QLkVQU0lMT04xNSxvPTAscj0xO2ZvcihsZXQgYz0wO2M8MzsrK2Mpe2xldCBsPU1hdGguYWJzKHRbVHQuZ2V0RWxlbWVudEluZGV4KENtW2NdLFNtW2NdKV0pO2w+byYmKHI9YyxvPWwpfWxldCBpPTEscz0wLGY9U21bcl0sdT1DbVtyXTtpZihNYXRoLmFicyh0W1R0LmdldEVsZW1lbnRJbmRleCh1LGYpXSk+bil7bGV0IGM9dFtUdC5nZXRFbGVtZW50SW5kZXgodSx1KV0sbD10W1R0LmdldEVsZW1lbnRJbmRleChmLGYpXSxwPXRbVHQuZ2V0RWxlbWVudEluZGV4KHUsZildLGQ9KGMtbCkvMi9wLG07ZDwwP209LTEvKC1kK01hdGguc3FydCgxK2QqZCkpOm09MS8oZCtNYXRoLnNxcnQoMStkKmQpKSxpPTEvTWF0aC5zcXJ0KDErbSptKSxzPW0qaX1yZXR1cm4gZT1UdC5jbG9uZShUdC5JREVOVElUWSxlKSxlW1R0LmdldEVsZW1lbnRJbmRleChmLGYpXT1lW1R0LmdldEVsZW1lbnRJbmRleCh1LHUpXT1pLGVbVHQuZ2V0RWxlbWVudEluZGV4KHUsZildPXMsZVtUdC5nZXRFbGVtZW50SW5kZXgoZix1KV09LXMsZX12YXIgYkMsVEMsUm0sTzEsd0MsT0MsU20sQ20scWwsRTEsQ0MsWixCbj0kKCgpPT57THQoKTtXdCgpO2F0KCk7anQoKTtLdCgpO1R0LnBhY2tlZExlbmd0aD05O1R0LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXRbMF0sZVtuKytdPXRbMV0sZVtuKytdPXRbMl0sZVtuKytdPXRbM10sZVtuKytdPXRbNF0sZVtuKytdPXRbNV0sZVtuKytdPXRbNl0sZVtuKytdPXRbN10sZVtuKytdPXRbOF0sZX07VHQudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLGgobil8fChuPW5ldyBUdCksblswXT10W2UrK10sblsxXT10W2UrK10sblsyXT10W2UrK10sblszXT10W2UrK10sbls0XT10W2UrK10sbls1XT10W2UrK10sbls2XT10W2UrK10sbls3XT10W2UrK10sbls4XT10W2UrK10sbn07VHQucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJhcnJheSIsdCk7bGV0IG49dC5sZW5ndGgsbz1uKjk7aWYoIWgoZSkpZT1uZXcgQXJyYXkobyk7ZWxzZXtpZighQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGghPT1vKXRocm93IG5ldyBMKCJJZiByZXN1bHQgaXMgYSB0eXBlZCBhcnJheSwgaXQgbXVzdCBoYXZlIGV4YWN0bHkgYXJyYXkubGVuZ3RoICogOSBlbGVtZW50cyIpO2UubGVuZ3RoIT09byYmKGUubGVuZ3RoPW8pfWZvcihsZXQgcj0wO3I8bjsrK3IpVHQucGFjayh0W3JdLGUscio5KTtyZXR1cm4gZX07VHQudW5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXtpZih5LmRlZmluZWQoImFycmF5Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiYXJyYXkubGVuZ3RoIix0Lmxlbmd0aCw5KSx0Lmxlbmd0aCU5IT09MCl0aHJvdyBuZXcgTCgiYXJyYXkgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA5LiIpO2xldCBuPXQubGVuZ3RoO2goZSk/ZS5sZW5ndGg9bi85OmU9bmV3IEFycmF5KG4vOSk7Zm9yKGxldCBvPTA7bzxuO28rPTkpe2xldCByPW8vOTtlW3JdPVR0LnVucGFjayh0LG8sZVtyXSl9cmV0dXJuIGV9O1R0LmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZSk6bmV3IFR0KHRbMF0sdFszXSx0WzZdLHRbMV0sdFs0XSx0WzddLHRbMl0sdFs1XSx0WzhdKX07VHQuZnJvbUFycmF5PVR0LnVucGFjaztUdC5mcm9tQ29sdW1uTWFqb3JBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoInZhbHVlcyIsdCksVHQuY2xvbmUodCxlKX07VHQuZnJvbVJvd01ham9yQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZXMiLHQpLGgoZSk/KGVbMF09dFswXSxlWzFdPXRbM10sZVsyXT10WzZdLGVbM109dFsxXSxlWzRdPXRbNF0sZVs1XT10WzddLGVbNl09dFsyXSxlWzddPXRbNV0sZVs4XT10WzhdLGUpOm5ldyBUdCh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSx0WzZdLHRbN10sdFs4XSl9O1R0LmZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KTtsZXQgbj10LngqdC54LG89dC54KnQueSxyPXQueCp0LnosaT10LngqdC53LHM9dC55KnQueSxmPXQueSp0LnosdT10LnkqdC53LGM9dC56KnQueixsPXQueip0LncscD10LncqdC53LGQ9bi1zLWMrcCxtPTIqKG8tbCksXz0yKihyK3UpLGc9MioobytsKSxiPS1uK3MtYytwLFQ9MiooZi1pKSxPPTIqKHItdSksRT0yKihmK2kpLHc9LW4tcytjK3A7cmV0dXJuIGgoZSk/KGVbMF09ZCxlWzFdPWcsZVsyXT1PLGVbM109bSxlWzRdPWIsZVs1XT1FLGVbNl09XyxlWzddPVQsZVs4XT13LGUpOm5ldyBUdChkLG0sXyxnLGIsVCxPLEUsdyl9O1R0LmZyb21IZWFkaW5nUGl0Y2hSb2xsPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJoZWFkaW5nUGl0Y2hSb2xsIix0KTtsZXQgbj1NYXRoLmNvcygtdC5waXRjaCksbz1NYXRoLmNvcygtdC5oZWFkaW5nKSxyPU1hdGguY29zKHQucm9sbCksaT1NYXRoLnNpbigtdC5waXRjaCkscz1NYXRoLnNpbigtdC5oZWFkaW5nKSxmPU1hdGguc2luKHQucm9sbCksdT1uKm8sYz0tcipzK2YqaSpvLGw9ZipzK3IqaSpvLHA9bipzLGQ9cipvK2YqaSpzLG09LWYqbytyKmkqcyxfPS1pLGc9ZipuLGI9cipuO3JldHVybiBoKGUpPyhlWzBdPXUsZVsxXT1wLGVbMl09XyxlWzNdPWMsZVs0XT1kLGVbNV09ZyxlWzZdPWwsZVs3XT1tLGVbOF09YixlKTpuZXcgVHQodSxjLGwscCxkLG0sXyxnLGIpfTtUdC5mcm9tU2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsdCksaChlKT8oZVswXT10LngsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT10LnksZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT10LnosZSk6bmV3IFR0KHQueCwwLDAsMCx0LnksMCwwLDAsdC56KX07VHQuZnJvbVVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoInNjYWxlIix0KSxoKGUpPyhlWzBdPXQsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT10LGVbNV09MCxlWzZdPTAsZVs3XT0wLGVbOF09dCxlKTpuZXcgVHQodCwwLDAsMCx0LDAsMCwwLHQpfTtUdC5mcm9tQ3Jvc3NQcm9kdWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmVjdG9yIix0KSxoKGUpPyhlWzBdPTAsZVsxXT10LnosZVsyXT0tdC55LGVbM109LXQueixlWzRdPTAsZVs1XT10LngsZVs2XT10LnksZVs3XT0tdC54LGVbOF09MCxlKTpuZXcgVHQoMCwtdC56LHQueSx0LnosMCwtdC54LC10LnksdC54LDApfTtUdC5mcm9tUm90YXRpb25YPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YubnVtYmVyKCJhbmdsZSIsdCk7bGV0IG49TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gaChlKT8oZVswXT0xLGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09bixlWzVdPW8sZVs2XT0wLGVbN109LW8sZVs4XT1uLGUpOm5ldyBUdCgxLDAsMCwwLG4sLW8sMCxvLG4pfTtUdC5mcm9tUm90YXRpb25ZPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YubnVtYmVyKCJhbmdsZSIsdCk7bGV0IG49TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gaChlKT8oZVswXT1uLGVbMV09MCxlWzJdPS1vLGVbM109MCxlWzRdPTEsZVs1XT0wLGVbNl09byxlWzddPTAsZVs4XT1uLGUpOm5ldyBUdChuLDAsbywwLDEsMCwtbywwLG4pfTtUdC5mcm9tUm90YXRpb25aPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YubnVtYmVyKCJhbmdsZSIsdCk7bGV0IG49TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gaChlKT8oZVswXT1uLGVbMV09byxlWzJdPTAsZVszXT0tbyxlWzRdPW4sZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT0xLGUpOm5ldyBUdChuLC1vLDAsbyxuLDAsMCwwLDEpfTtUdC50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSxoKGUpPyhlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlKTpbdFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSx0WzddLHRbOF1dfTtUdC5nZXRFbGVtZW50SW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInJvdyIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygicm93IixlLDIpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJjb2x1bW4iLHQsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImNvbHVtbiIsdCwyKSx0KjMrZX07VHQuZ2V0Q29sdW1uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZSozLHI9dFtvXSxpPXRbbysxXSxzPXRbbysyXTtyZXR1cm4gbi54PXIsbi55PWksbi56PXMsbn07VHQuc2V0Q29sdW1uPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDIpLHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksbz1UdC5jbG9uZSh0LG8pO2xldCByPWUqMztyZXR1cm4gb1tyXT1uLngsb1tyKzFdPW4ueSxvW3IrMl09bi56LG99O1R0LmdldFJvdz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXRbZV0scj10W2UrM10saT10W2UrNl07cmV0dXJuIG4ueD1vLG4ueT1yLG4uej1pLG59O1R0LnNldFJvdz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMikseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvPVR0LmNsb25lKHQsbyksb1tlXT1uLngsb1tlKzNdPW4ueSxvW2UrNl09bi56LG99O2JDPW5ldyBhO1R0LnNldFNjYWxlPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPVR0LmdldFNjYWxlKHQsYkMpLHI9ZS54L28ueCxpPWUueS9vLnkscz1lLnovby56O3JldHVybiBuWzBdPXRbMF0qcixuWzFdPXRbMV0qcixuWzJdPXRbMl0qcixuWzNdPXRbM10qaSxuWzRdPXRbNF0qaSxuWzVdPXRbNV0qaSxuWzZdPXRbNl0qcyxuWzddPXRbN10qcyxuWzhdPXRbOF0qcyxufTtUQz1uZXcgYTtUdC5zZXRVbmlmb3JtU2NhbGU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89VHQuZ2V0U2NhbGUodCxUQykscj1lL28ueCxpPWUvby55LHM9ZS9vLno7cmV0dXJuIG5bMF09dFswXSpyLG5bMV09dFsxXSpyLG5bMl09dFsyXSpyLG5bM109dFszXSppLG5bNF09dFs0XSppLG5bNV09dFs1XSppLG5bNl09dFs2XSpzLG5bN109dFs3XSpzLG5bOF09dFs4XSpzLG59O1JtPW5ldyBhO1R0LmdldFNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbMF0sdFsxXSx0WzJdLFJtKSksZS55PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbM10sdFs0XSx0WzVdLFJtKSksZS56PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbNl0sdFs3XSx0WzhdLFJtKSksZX07TzE9bmV3IGE7VHQuZ2V0TWF4aW11bVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBUdC5nZXRTY2FsZSh0LE8xKSxhLm1heGltdW1Db21wb25lbnQoTzEpfTt3Qz1uZXcgYTtUdC5zZXRSb3RhdGlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1UdC5nZXRTY2FsZSh0LHdDKTtyZXR1cm4gblswXT1lWzBdKm8ueCxuWzFdPWVbMV0qby54LG5bMl09ZVsyXSpvLngsblszXT1lWzNdKm8ueSxuWzRdPWVbNF0qby55LG5bNV09ZVs1XSpvLnksbls2XT1lWzZdKm8ueixuWzddPWVbN10qby56LG5bOF09ZVs4XSpvLnosbn07T0M9bmV3IGE7VHQuZ2V0Um90YXRpb249ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPVR0LmdldFNjYWxlKHQsT0MpO3JldHVybiBlWzBdPXRbMF0vbi54LGVbMV09dFsxXS9uLngsZVsyXT10WzJdL24ueCxlWzNdPXRbM10vbi55LGVbNF09dFs0XS9uLnksZVs1XT10WzVdL24ueSxlWzZdPXRbNl0vbi56LGVbN109dFs3XS9uLnosZVs4XT10WzhdL24ueixlfTtUdC5tdWx0aXBseT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89dFswXSplWzBdK3RbM10qZVsxXSt0WzZdKmVbMl0scj10WzFdKmVbMF0rdFs0XSplWzFdK3RbN10qZVsyXSxpPXRbMl0qZVswXSt0WzVdKmVbMV0rdFs4XSplWzJdLHM9dFswXSplWzNdK3RbM10qZVs0XSt0WzZdKmVbNV0sZj10WzFdKmVbM10rdFs0XSplWzRdK3RbN10qZVs1XSx1PXRbMl0qZVszXSt0WzVdKmVbNF0rdFs4XSplWzVdLGM9dFswXSplWzZdK3RbM10qZVs3XSt0WzZdKmVbOF0sbD10WzFdKmVbNl0rdFs0XSplWzddK3RbN10qZVs4XSxwPXRbMl0qZVs2XSt0WzVdKmVbN10rdFs4XSplWzhdO3JldHVybiBuWzBdPW8sblsxXT1yLG5bMl09aSxuWzNdPXMsbls0XT1mLG5bNV09dSxuWzZdPWMsbls3XT1sLG5bOF09cCxufTtUdC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0rZVswXSxuWzFdPXRbMV0rZVsxXSxuWzJdPXRbMl0rZVsyXSxuWzNdPXRbM10rZVszXSxuWzRdPXRbNF0rZVs0XSxuWzVdPXRbNV0rZVs1XSxuWzZdPXRbNl0rZVs2XSxuWzddPXRbN10rZVs3XSxuWzhdPXRbOF0rZVs4XSxufTtUdC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXS1lWzBdLG5bMV09dFsxXS1lWzFdLG5bMl09dFsyXS1lWzJdLG5bM109dFszXS1lWzNdLG5bNF09dFs0XS1lWzRdLG5bNV09dFs1XS1lWzVdLG5bNl09dFs2XS1lWzZdLG5bN109dFs3XS1lWzddLG5bOF09dFs4XS1lWzhdLG59O1R0Lm11bHRpcGx5QnlWZWN0b3I9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPWUueCxyPWUueSxpPWUueixzPXRbMF0qbyt0WzNdKnIrdFs2XSppLGY9dFsxXSpvK3RbNF0qcit0WzddKmksdT10WzJdKm8rdFs1XSpyK3RbOF0qaTtyZXR1cm4gbi54PXMsbi55PWYsbi56PXUsbn07VHQubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxhciIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXSplLG5bMV09dFsxXSplLG5bMl09dFsyXSplLG5bM109dFszXSplLG5bNF09dFs0XSplLG5bNV09dFs1XSplLG5bNl09dFs2XSplLG5bN109dFs3XSplLG5bOF09dFs4XSplLG59O1R0Lm11bHRpcGx5QnlTY2FsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUueCxuWzFdPXRbMV0qZS54LG5bMl09dFsyXSplLngsblszXT10WzNdKmUueSxuWzRdPXRbNF0qZS55LG5bNV09dFs1XSplLnksbls2XT10WzZdKmUueixuWzddPXRbN10qZS56LG5bOF09dFs4XSplLnosbn07VHQubXVsdGlwbHlCeVVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUsblsxXT10WzFdKmUsblsyXT10WzJdKmUsblszXT10WzNdKmUsbls0XT10WzRdKmUsbls1XT10WzVdKmUsbls2XT10WzZdKmUsbls3XT10WzddKmUsbls4XT10WzhdKmUsbn07VHQubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT0tdFswXSxlWzFdPS10WzFdLGVbMl09LXRbMl0sZVszXT0tdFszXSxlWzRdPS10WzRdLGVbNV09LXRbNV0sZVs2XT0tdFs2XSxlWzddPS10WzddLGVbOF09LXRbOF0sZX07VHQudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj10WzBdLG89dFszXSxyPXRbNl0saT10WzFdLHM9dFs0XSxmPXRbN10sdT10WzJdLGM9dFs1XSxsPXRbOF07cmV0dXJuIGVbMF09bixlWzFdPW8sZVsyXT1yLGVbM109aSxlWzRdPXMsZVs1XT1mLGVbNl09dSxlWzddPWMsZVs4XT1sLGV9O1NtPVsxLDAsMF0sQ209WzIsMiwxXTtxbD1uZXcgVHQsRTE9bmV3IFR0O1R0LmNvbXB1dGVFaWdlbkRlY29tcG9zaXRpb249ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCk7bGV0IG49UC5FUFNJTE9OMjAsbz0xMCxyPTAsaT0wO2goZSl8fChlPXt9KTtsZXQgcz1lLnVuaXRhcnk9VHQuY2xvbmUoVHQuSURFTlRJVFksZS51bml0YXJ5KSxmPWUuZGlhZ29uYWw9VHQuY2xvbmUodCxlLmRpYWdvbmFsKSx1PW4qRUMoZik7Zm9yKDtpPG8mJlJDKGYpPnU7KVNDKGYscWwpLFR0LnRyYW5zcG9zZShxbCxFMSksVHQubXVsdGlwbHkoZixxbCxmKSxUdC5tdWx0aXBseShFMSxmLGYpLFR0Lm11bHRpcGx5KHMscWwscyksKytyPjImJigrK2kscj0wKTtyZXR1cm4gZX07VHQuYWJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT1NYXRoLmFicyh0WzBdKSxlWzFdPU1hdGguYWJzKHRbMV0pLGVbMl09TWF0aC5hYnModFsyXSksZVszXT1NYXRoLmFicyh0WzNdKSxlWzRdPU1hdGguYWJzKHRbNF0pLGVbNV09TWF0aC5hYnModFs1XSksZVs2XT1NYXRoLmFicyh0WzZdKSxlWzddPU1hdGguYWJzKHRbN10pLGVbOF09TWF0aC5hYnModFs4XSksZX07VHQuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24odCl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpO2xldCBlPXRbMF0sbj10WzNdLG89dFs2XSxyPXRbMV0saT10WzRdLHM9dFs3XSxmPXRbMl0sdT10WzVdLGM9dFs4XTtyZXR1cm4gZSooaSpjLXUqcykrcioodSpvLW4qYykrZioobipzLWkqbyl9O1R0LmludmVyc2U9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXRbMF0sbz10WzFdLHI9dFsyXSxpPXRbM10scz10WzRdLGY9dFs1XSx1PXRbNl0sYz10WzddLGw9dFs4XSxwPVR0LmRldGVybWluYW50KHQpO2lmKE1hdGguYWJzKHApPD1QLkVQU0lMT04xNSl0aHJvdyBuZXcgTCgibWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIik7ZVswXT1zKmwtYypmLGVbMV09YypyLW8qbCxlWzJdPW8qZi1zKnIsZVszXT11KmYtaSpsLGVbNF09bipsLXUqcixlWzVdPWkqci1uKmYsZVs2XT1pKmMtdSpzLGVbN109dSpvLW4qYyxlWzhdPW4qcy1pKm87bGV0IGQ9MS9wO3JldHVybiBUdC5tdWx0aXBseUJ5U2NhbGFyKGUsZCxlKX07Q0M9bmV3IFR0O1R0LmludmVyc2VUcmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxUdC5pbnZlcnNlKFR0LnRyYW5zcG9zZSh0LENDKSxlKX07VHQuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzNdPT09ZVszXSYmdFs0XT09PWVbNF0mJnRbNV09PT1lWzVdJiZ0WzZdPT09ZVs2XSYmdFs3XT09PWVbN10mJnRbOF09PT1lWzhdfTtUdC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj1uPz8wLHQ9PT1lfHxoKHQpJiZoKGUpJiZNYXRoLmFicyh0WzBdLWVbMF0pPD1uJiZNYXRoLmFicyh0WzFdLWVbMV0pPD1uJiZNYXRoLmFicyh0WzJdLWVbMl0pPD1uJiZNYXRoLmFicyh0WzNdLWVbM10pPD1uJiZNYXRoLmFicyh0WzRdLWVbNF0pPD1uJiZNYXRoLmFicyh0WzVdLWVbNV0pPD1uJiZNYXRoLmFicyh0WzZdLWVbNl0pPD1uJiZNYXRoLmFicyh0WzddLWVbN10pPD1uJiZNYXRoLmFicyh0WzhdLWVbOF0pPD1ufTtUdC5JREVOVElUWT1PYmplY3QuZnJlZXplKG5ldyBUdCgxLDAsMCwwLDEsMCwwLDAsMSkpO1R0LlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgVHQoMCwwLDAsMCwwLDAsMCwwLDApKTtUdC5DT0xVTU4wUk9XMD0wO1R0LkNPTFVNTjBST1cxPTE7VHQuQ09MVU1OMFJPVzI9MjtUdC5DT0xVTU4xUk9XMD0zO1R0LkNPTFVNTjFST1cxPTQ7VHQuQ09MVU1OMVJPVzI9NTtUdC5DT0xVTU4yUk9XMD02O1R0LkNPTFVNTjJST1cxPTc7VHQuQ09MVU1OMlJPVzI9ODtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUdC5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFR0LnBhY2tlZExlbmd0aH19fSk7VHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBUdC5jbG9uZSh0aGlzLHQpfTtUdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBUdC5lcXVhbHModGhpcyx0KX07VHQuZXF1YWxzQXJyYXk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0WzBdPT09ZVtuXSYmdFsxXT09PWVbbisxXSYmdFsyXT09PWVbbisyXSYmdFszXT09PWVbbiszXSYmdFs0XT09PWVbbis0XSYmdFs1XT09PWVbbis1XSYmdFs2XT09PWVbbis2XSYmdFs3XT09PWVbbis3XSYmdFs4XT09PWVbbis4XX07VHQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gVHQuZXF1YWxzRXBzaWxvbih0aGlzLHQsZSl9O1R0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzWzBdfSwgJHt0aGlzWzNdfSwgJHt0aGlzWzZdfSkKKCR7dGhpc1sxXX0sICR7dGhpc1s0XX0sICR7dGhpc1s3XX0pCigke3RoaXNbMl19LCAke3RoaXNbNV19LCAke3RoaXNbOF19KWB9O1o9VHR9KTtmdW5jdGlvbiB2dCh0LGUsbixvKXt0aGlzLng9dD8/MCx0aGlzLnk9ZT8/MCx0aGlzLno9bj8/MCx0aGlzLnc9bz8/MH12YXIgS2wsUjEseEMseG0sYm8sUEMsTUMsUzEsbWUsaHI9JCgoKT0+e1d0KCk7YXQoKTtqdCgpO0t0KCk7dnQuZnJvbUVsZW1lbnRzPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIGgocik/KHIueD10LHIueT1lLHIuej1uLHIudz1vLHIpOm5ldyB2dCh0LGUsbixvKX07dnQuZnJvbUNvbG9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY29sb3IiLHQpLGgoZSk/KGUueD10LnJlZCxlLnk9dC5ncmVlbixlLno9dC5ibHVlLGUudz10LmFscGhhLGUpOm5ldyB2dCh0LnJlZCx0LmdyZWVuLHQuYmx1ZSx0LmFscGhhKX07dnQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLng9dC54LGUueT10LnksZS56PXQueixlLnc9dC53LGUpOm5ldyB2dCh0LngsdC55LHQueix0LncpfTt2dC5wYWNrZWRMZW5ndGg9NDt2dC5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGVbbisrXT10LngsZVtuKytdPXQueSxlW24rK109dC56LGVbbl09dC53LGV9O3Z0LnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MCxoKG4pfHwobj1uZXcgdnQpLG4ueD10W2UrK10sbi55PXRbZSsrXSxuLno9dFtlKytdLG4udz10W2VdLG59O3Z0LnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiYXJyYXkiLHQpO2xldCBuPXQubGVuZ3RoLG89bio0O2lmKCFoKGUpKWU9bmV3IEFycmF5KG8pO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoIT09byl0aHJvdyBuZXcgTCgiSWYgcmVzdWx0IGlzIGEgdHlwZWQgYXJyYXksIGl0IG11c3QgaGF2ZSBleGFjdGx5IGFycmF5Lmxlbmd0aCAqIDQgZWxlbWVudHMiKTtlLmxlbmd0aCE9PW8mJihlLmxlbmd0aD1vKX1mb3IobGV0IHI9MDtyPG47KytyKXZ0LnBhY2sodFtyXSxlLHIqNCk7cmV0dXJuIGV9O3Z0LnVucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJhcnJheSIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImFycmF5Lmxlbmd0aCIsdC5sZW5ndGgsNCksdC5sZW5ndGglNCE9PTApdGhyb3cgbmV3IEwoImFycmF5IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4iKTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW4vNDplPW5ldyBBcnJheShuLzQpO2ZvcihsZXQgbz0wO288bjtvKz00KXtsZXQgcj1vLzQ7ZVtyXT12dC51bnBhY2sodCxvLGVbcl0pfXJldHVybiBlfTt2dC5mcm9tQXJyYXk9dnQudW5wYWNrO3Z0Lm1heGltdW1Db21wb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSxNYXRoLm1heCh0LngsdC55LHQueix0LncpfTt2dC5taW5pbXVtQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCksTWF0aC5taW4odC54LHQueSx0LnosdC53KX07dnQubWluaW11bUJ5Q29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJmaXJzdCIsdCkseS50eXBlT2Yub2JqZWN0KCJzZWNvbmQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9TWF0aC5taW4odC54LGUueCksbi55PU1hdGgubWluKHQueSxlLnkpLG4uej1NYXRoLm1pbih0LnosZS56KSxuLnc9TWF0aC5taW4odC53LGUudyksbn07dnQubWF4aW11bUJ5Q29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJmaXJzdCIsdCkseS50eXBlT2Yub2JqZWN0KCJzZWNvbmQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9TWF0aC5tYXgodC54LGUueCksbi55PU1hdGgubWF4KHQueSxlLnkpLG4uej1NYXRoLm1heCh0LnosZS56KSxuLnc9TWF0aC5tYXgodC53LGUudyksbn07dnQuY2xhbXA9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS50eXBlT2Yub2JqZWN0KCJtaW4iLGUpLHkudHlwZU9mLm9iamVjdCgibWF4IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyk7bGV0IHI9UC5jbGFtcCh0LngsZS54LG4ueCksaT1QLmNsYW1wKHQueSxlLnksbi55KSxzPVAuY2xhbXAodC56LGUueixuLnopLGY9UC5jbGFtcCh0LncsZS53LG4udyk7cmV0dXJuIG8ueD1yLG8ueT1pLG8uej1zLG8udz1mLG99O3Z0Lm1hZ25pdHVkZVNxdWFyZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx0LngqdC54K3QueSp0LnkrdC56KnQueit0LncqdC53fTt2dC5tYWduaXR1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh2dC5tYWduaXR1ZGVTcXVhcmVkKHQpKX07S2w9bmV3IHZ0O3Z0LmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdnQuc3VidHJhY3QodCxlLEtsKSx2dC5tYWduaXR1ZGUoS2wpfTt2dC5kaXN0YW5jZVNxdWFyZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx2dC5zdWJ0cmFjdCh0LGUsS2wpLHZ0Lm1hZ25pdHVkZVNxdWFyZWQoS2wpfTt2dC5ub3JtYWxpemU9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXZ0Lm1hZ25pdHVkZSh0KTtpZihlLng9dC54L24sZS55PXQueS9uLGUuej10LnovbixlLnc9dC53L24saXNOYU4oZS54KXx8aXNOYU4oZS55KXx8aXNOYU4oZS56KXx8aXNOYU4oZS53KSl0aHJvdyBuZXcgTCgibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyIik7cmV0dXJuIGV9O3Z0LmRvdD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHQueCplLngrdC55KmUueSt0LnoqZS56K3QudyplLnd9O3Z0Lm11bHRpcGx5Q29tcG9uZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngqZS54LG4ueT10LnkqZS55LG4uej10LnoqZS56LG4udz10LncqZS53LG59O3Z0LmRpdmlkZUNvbXBvbmVudHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2UueCxuLnk9dC55L2UueSxuLno9dC56L2UueixuLnc9dC53L2UudyxufTt2dC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54K2UueCxuLnk9dC55K2UueSxuLno9dC56K2UueixuLnc9dC53K2UudyxufTt2dC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngtZS54LG4ueT10LnktZS55LG4uej10LnotZS56LG4udz10LnctZS53LG59O3Z0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUsbi55PXQueSplLG4uej10LnoqZSxuLnc9dC53KmUsbn07dnQuZGl2aWRlQnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2Usbi55PXQueS9lLG4uej10LnovZSxuLnc9dC53L2Usbn07dnQubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PS10LngsZS55PS10LnksZS56PS10LnosZS53PS10LncsZX07dnQuYWJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PU1hdGguYWJzKHQueCksZS55PU1hdGguYWJzKHQueSksZS56PU1hdGguYWJzKHQueiksZS53PU1hdGguYWJzKHQudyksZX07UjE9bmV3IHZ0O3Z0LmxlcnA9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic3RhcnQiLHQpLHkudHlwZU9mLm9iamVjdCgiZW5kIixlKSx5LnR5cGVPZi5udW1iZXIoInQiLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSx2dC5tdWx0aXBseUJ5U2NhbGFyKGUsbixSMSksbz12dC5tdWx0aXBseUJ5U2NhbGFyKHQsMS1uLG8pLHZ0LmFkZChSMSxvLG8pfTt4Qz1uZXcgdnQ7dnQubW9zdE9ydGhvZ29uYWxBeGlzPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj12dC5ub3JtYWxpemUodCx4Qyk7cmV0dXJuIHZ0LmFicyhuLG4pLG4ueDw9bi55P24ueDw9bi56P24ueDw9bi53P2U9dnQuY2xvbmUodnQuVU5JVF9YLGUpOmU9dnQuY2xvbmUodnQuVU5JVF9XLGUpOm4uejw9bi53P2U9dnQuY2xvbmUodnQuVU5JVF9aLGUpOmU9dnQuY2xvbmUodnQuVU5JVF9XLGUpOm4ueTw9bi56P24ueTw9bi53P2U9dnQuY2xvbmUodnQuVU5JVF9ZLGUpOmU9dnQuY2xvbmUodnQuVU5JVF9XLGUpOm4uejw9bi53P2U9dnQuY2xvbmUodnQuVU5JVF9aLGUpOmU9dnQuY2xvbmUodnQuVU5JVF9XLGUpLGV9O3Z0LmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmdC54PT09ZS54JiZ0Lnk9PT1lLnkmJnQuej09PWUueiYmdC53PT09ZS53fTt2dC5lcXVhbHNBcnJheT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQueD09PWVbbl0mJnQueT09PWVbbisxXSYmdC56PT09ZVtuKzJdJiZ0Lnc9PT1lW24rM119O3Z0LmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZQLmVxdWFsc0Vwc2lsb24odC54LGUueCxuLG8pJiZQLmVxdWFsc0Vwc2lsb24odC55LGUueSxuLG8pJiZQLmVxdWFsc0Vwc2lsb24odC56LGUueixuLG8pJiZQLmVxdWFsc0Vwc2lsb24odC53LGUudyxuLG8pfTt2dC5aRVJPPU9iamVjdC5mcmVlemUobmV3IHZ0KDAsMCwwLDApKTt2dC5PTkU9T2JqZWN0LmZyZWV6ZShuZXcgdnQoMSwxLDEsMSkpO3Z0LlVOSVRfWD1PYmplY3QuZnJlZXplKG5ldyB2dCgxLDAsMCwwKSk7dnQuVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IHZ0KDAsMSwwLDApKTt2dC5VTklUX1o9T2JqZWN0LmZyZWV6ZShuZXcgdnQoMCwwLDEsMCkpO3Z0LlVOSVRfVz1PYmplY3QuZnJlZXplKG5ldyB2dCgwLDAsMCwxKSk7dnQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB2dC5jbG9uZSh0aGlzLHQpfTt2dC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB2dC5lcXVhbHModGhpcyx0KX07dnQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2dC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlLG4pfTt2dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen0sICR7dGhpcy53fSlgfTt4bT1uZXcgRmxvYXQzMkFycmF5KDEpLGJvPW5ldyBVaW50OEFycmF5KHhtLmJ1ZmZlciksUEM9bmV3IFVpbnQzMkFycmF5KFsyODc0NTQwMjBdKSxNQz1uZXcgVWludDhBcnJheShQQy5idWZmZXIpLFMxPU1DWzBdPT09Njg7dnQucGFja0Zsb2F0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlcigidmFsdWUiLHQpLGgoZSl8fChlPW5ldyB2dCkseG1bMF09dCxTMT8oZS54PWJvWzBdLGUueT1ib1sxXSxlLno9Ym9bMl0sZS53PWJvWzNdKTooZS54PWJvWzNdLGUueT1ib1syXSxlLno9Ym9bMV0sZS53PWJvWzBdKSxlfTt2dC51bnBhY2tGbG9hdD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJwYWNrZWRGbG9hdCIsdCksUzE/KGJvWzBdPXQueCxib1sxXT10LnksYm9bMl09dC56LGJvWzNdPXQudyk6KGJvWzBdPXQudyxib1sxXT10LnosYm9bMl09dC55LGJvWzNdPXQueCkseG1bMF19O21lPXZ0fSk7dmFyIFBtLE50LHllPSQoKCk9PntQbT17fTtQbS5FTVBUWV9PQkpFQ1Q9T2JqZWN0LmZyZWV6ZSh7fSk7UG0uRU1QVFlfQVJSQVk9T2JqZWN0LmZyZWV6ZShbXSk7TnQ9UG19KTtmdW5jdGlvbiByZih0KXt0aGlzLm5hbWU9IlJ1bnRpbWVFcnJvciIsdGhpcy5tZXNzYWdlPXQ7bGV0IGU7dHJ5e3Rocm93IG5ldyBFcnJvcn1jYXRjaChuKXtlPW4uc3RhY2t9dGhpcy5zdGFjaz1lfXZhciBBZSxKcj0kKCgpPT57YXQoKTtoKE9iamVjdC5jcmVhdGUpJiYocmYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxyZi5wcm90b3R5cGUuY29uc3RydWN0b3I9cmYpO3JmLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2xldCB0PWAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7cmV0dXJuIGgodGhpcy5zdGFjaykmJih0Kz1gCiR7dGhpcy5zdGFjay50b1N0cmluZygpfWApLHR9O0FlPXJmfSk7ZnVuY3Rpb24gYnQodCxlLG4sbyxyLGkscyxmLHUsYyxsLHAsZCxtLF8sZyl7dGhpc1swXT10Pz8wLHRoaXNbMV09cj8/MCx0aGlzWzJdPXU/PzAsdGhpc1szXT1kPz8wLHRoaXNbNF09ZT8/MCx0aGlzWzVdPWk/PzAsdGhpc1s2XT1jPz8wLHRoaXNbN109bT8/MCx0aGlzWzhdPW4/PzAsdGhpc1s5XT1zPz8wLHRoaXNbMTBdPWw/PzAsdGhpc1sxMV09Xz8/MCx0aGlzWzEyXT1vPz8wLHRoaXNbMTNdPWY/PzAsdGhpc1sxNF09cD8/MCx0aGlzWzE1XT1nPz8wfXZhciBIYyxxYyxzZixOQyxJQyxNbSxDMSx2QyxGQyxMQyxEQyxCQyxVQyxrQyxpdCxVbj0kKCgpPT57THQoKTtocigpO1d0KCk7eWUoKTthdCgpO2p0KCk7S3QoKTtCbigpO0pyKCk7YnQucGFja2VkTGVuZ3RoPTE2O2J0LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXRbMF0sZVtuKytdPXRbMV0sZVtuKytdPXRbMl0sZVtuKytdPXRbM10sZVtuKytdPXRbNF0sZVtuKytdPXRbNV0sZVtuKytdPXRbNl0sZVtuKytdPXRbN10sZVtuKytdPXRbOF0sZVtuKytdPXRbOV0sZVtuKytdPXRbMTBdLGVbbisrXT10WzExXSxlW24rK109dFsxMl0sZVtuKytdPXRbMTNdLGVbbisrXT10WzE0XSxlW25dPXRbMTVdLGV9O2J0LnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MCxoKG4pfHwobj1uZXcgYnQpLG5bMF09dFtlKytdLG5bMV09dFtlKytdLG5bMl09dFtlKytdLG5bM109dFtlKytdLG5bNF09dFtlKytdLG5bNV09dFtlKytdLG5bNl09dFtlKytdLG5bN109dFtlKytdLG5bOF09dFtlKytdLG5bOV09dFtlKytdLG5bMTBdPXRbZSsrXSxuWzExXT10W2UrK10sblsxMl09dFtlKytdLG5bMTNdPXRbZSsrXSxuWzE0XT10W2UrK10sblsxNV09dFtlXSxufTtidC5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImFycmF5Iix0KTtsZXQgbj10Lmxlbmd0aCxvPW4qMTY7aWYoIWgoZSkpZT1uZXcgQXJyYXkobyk7ZWxzZXtpZighQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGghPT1vKXRocm93IG5ldyBMKCJJZiByZXN1bHQgaXMgYSB0eXBlZCBhcnJheSwgaXQgbXVzdCBoYXZlIGV4YWN0bHkgYXJyYXkubGVuZ3RoICogMTYgZWxlbWVudHMiKTtlLmxlbmd0aCE9PW8mJihlLmxlbmd0aD1vKX1mb3IobGV0IHI9MDtyPG47KytyKWJ0LnBhY2sodFtyXSxlLHIqMTYpO3JldHVybiBlfTtidC51bnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe2lmKHkuZGVmaW5lZCgiYXJyYXkiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJhcnJheS5sZW5ndGgiLHQubGVuZ3RoLDE2KSx0Lmxlbmd0aCUxNiE9PTApdGhyb3cgbmV3IEwoImFycmF5IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYuIik7bGV0IG49dC5sZW5ndGg7aChlKT9lLmxlbmd0aD1uLzE2OmU9bmV3IEFycmF5KG4vMTYpO2ZvcihsZXQgbz0wO288bjtvKz0xNil7bGV0IHI9by8xNjtlW3JdPWJ0LnVucGFjayh0LG8sZVtyXSl9cmV0dXJuIGV9O2J0LmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdLGUpOm5ldyBidCh0WzBdLHRbNF0sdFs4XSx0WzEyXSx0WzFdLHRbNV0sdFs5XSx0WzEzXSx0WzJdLHRbNl0sdFsxMF0sdFsxNF0sdFszXSx0WzddLHRbMTFdLHRbMTVdKX07YnQuZnJvbUFycmF5PWJ0LnVucGFjaztidC5mcm9tQ29sdW1uTWFqb3JBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoInZhbHVlcyIsdCksYnQuY2xvbmUodCxlKX07YnQuZnJvbVJvd01ham9yQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZXMiLHQpLGgoZSk/KGVbMF09dFswXSxlWzFdPXRbNF0sZVsyXT10WzhdLGVbM109dFsxMl0sZVs0XT10WzFdLGVbNV09dFs1XSxlWzZdPXRbOV0sZVs3XT10WzEzXSxlWzhdPXRbMl0sZVs5XT10WzZdLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTRdLGVbMTJdPXRbM10sZVsxM109dFs3XSxlWzE0XT10WzExXSxlWzE1XT10WzE1XSxlKTpuZXcgYnQodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSx0WzddLHRbOF0sdFs5XSx0WzEwXSx0WzExXSx0WzEyXSx0WzEzXSx0WzE0XSx0WzE1XSl9O2J0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyb3RhdGlvbiIsdCksZT1lPz9hLlpFUk8saChuKT8oblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT0wLG5bNF09dFszXSxuWzVdPXRbNF0sbls2XT10WzVdLG5bN109MCxuWzhdPXRbNl0sbls5XT10WzddLG5bMTBdPXRbOF0sblsxMV09MCxuWzEyXT1lLngsblsxM109ZS55LG5bMTRdPWUueixuWzE1XT0xLG4pOm5ldyBidCh0WzBdLHRbM10sdFs2XSxlLngsdFsxXSx0WzRdLHRbN10sZS55LHRbMl0sdFs1XSx0WzhdLGUueiwwLDAsMCwxKX07YnQuZnJvbVRyYW5zbGF0aW9uUXVhdGVybmlvblJvdGF0aW9uU2NhbGU9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJ0cmFuc2xhdGlvbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyb3RhdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsbiksaChvKXx8KG89bmV3IGJ0KTtsZXQgcj1uLngsaT1uLnkscz1uLnosZj1lLngqZS54LHU9ZS54KmUueSxjPWUueCplLnosbD1lLngqZS53LHA9ZS55KmUueSxkPWUueSplLnosbT1lLnkqZS53LF89ZS56KmUueixnPWUueiplLncsYj1lLncqZS53LFQ9Zi1wLV8rYixPPTIqKHUtZyksRT0yKihjK20pLHc9MioodStnKSxDPS1mK3AtXytiLE09MiooZC1sKSxOPTIqKGMtbSksRj0yKihkK2wpLEk9LWYtcCtfK2I7cmV0dXJuIG9bMF09VCpyLG9bMV09dypyLG9bMl09TipyLG9bM109MCxvWzRdPU8qaSxvWzVdPUMqaSxvWzZdPUYqaSxvWzddPTAsb1s4XT1FKnMsb1s5XT1NKnMsb1sxMF09SSpzLG9bMTFdPTAsb1sxMl09dC54LG9bMTNdPXQueSxvWzE0XT10Lnosb1sxNV09MSxvfTtidC5mcm9tVHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlIix0KSxidC5mcm9tVHJhbnNsYXRpb25RdWF0ZXJuaW9uUm90YXRpb25TY2FsZSh0LnRyYW5zbGF0aW9uLHQucm90YXRpb24sdC5zY2FsZSxlKX07YnQuZnJvbVRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidHJhbnNsYXRpb24iLHQpLGJ0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKFouSURFTlRJVFksdCxlKX07YnQuZnJvbVNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic2NhbGUiLHQpLGgoZSk/KGVbMF09dC54LGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPXQueSxlWzZdPTAsZVs3XT0wLGVbOF09MCxlWzldPTAsZVsxMF09dC56LGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSxlKTpuZXcgYnQodC54LDAsMCwwLDAsdC55LDAsMCwwLDAsdC56LDAsMCwwLDAsMSl9O2J0LmZyb21Vbmlmb3JtU2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2YubnVtYmVyKCJzY2FsZSIsdCksaChlKT8oZVswXT10LGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPXQsZVs2XT0wLGVbN109MCxlWzhdPTAsZVs5XT0wLGVbMTBdPXQsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGUpOm5ldyBidCh0LDAsMCwwLDAsdCwwLDAsMCwwLHQsMCwwLDAsMCwxKX07YnQuZnJvbVJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicm90YXRpb24iLHQpLGgoZSl8fChlPW5ldyBidCksZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT0wLGVbNF09dFszXSxlWzVdPXRbNF0sZVs2XT10WzVdLGVbN109MCxlWzhdPXRbNl0sZVs5XT10WzddLGVbMTBdPXRbOF0sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGV9O0hjPW5ldyBhLHFjPW5ldyBhLHNmPW5ldyBhO2J0LmZyb21DYW1lcmE9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhbWVyYSIsdCk7bGV0IG49dC5wb3NpdGlvbixvPXQuZGlyZWN0aW9uLHI9dC51cDt5LnR5cGVPZi5vYmplY3QoImNhbWVyYS5wb3NpdGlvbiIsbikseS50eXBlT2Yub2JqZWN0KCJjYW1lcmEuZGlyZWN0aW9uIixvKSx5LnR5cGVPZi5vYmplY3QoImNhbWVyYS51cCIsciksYS5ub3JtYWxpemUobyxIYyksYS5ub3JtYWxpemUoYS5jcm9zcyhIYyxyLHFjKSxxYyksYS5ub3JtYWxpemUoYS5jcm9zcyhxYyxIYyxzZiksc2YpO2xldCBpPXFjLngscz1xYy55LGY9cWMueix1PUhjLngsYz1IYy55LGw9SGMueixwPXNmLngsZD1zZi55LG09c2YueixfPW4ueCxnPW4ueSxiPW4ueixUPWkqLV8rcyotZytmKi1iLE89cCotXytkKi1nK20qLWIsRT11Kl8rYypnK2wqYjtyZXR1cm4gaChlKT8oZVswXT1pLGVbMV09cCxlWzJdPS11LGVbM109MCxlWzRdPXMsZVs1XT1kLGVbNl09LWMsZVs3XT0wLGVbOF09ZixlWzldPW0sZVsxMF09LWwsZVsxMV09MCxlWzEyXT1ULGVbMTNdPU8sZVsxNF09RSxlWzE1XT0xLGUpOm5ldyBidChpLHMsZixULHAsZCxtLE8sLXUsLWMsLWwsRSwwLDAsMCwxKX07YnQuY29tcHV0ZVBlcnNwZWN0aXZlRmllbGRPZlZpZXc9ZnVuY3Rpb24odCxlLG4sbyxyKXt5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oImZvdlkiLHQsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuKCJmb3ZZIix0LE1hdGguUEkpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbigibmVhciIsbiwwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oImZhciIsbywwKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIscik7bGV0IHM9MS9NYXRoLnRhbih0Ki41KSxmPXMvZSx1PShvK24pLyhuLW8pLGM9MipvKm4vKG4tbyk7cmV0dXJuIHJbMF09ZixyWzFdPTAsclsyXT0wLHJbM109MCxyWzRdPTAscls1XT1zLHJbNl09MCxyWzddPTAscls4XT0wLHJbOV09MCxyWzEwXT11LHJbMTFdPS0xLHJbMTJdPTAsclsxM109MCxyWzE0XT1jLHJbMTVdPTAscn07YnQuY29tcHV0ZU9ydGhvZ3JhcGhpY09mZkNlbnRlcj1mdW5jdGlvbih0LGUsbixvLHIsaSxzKXt5LnR5cGVPZi5udW1iZXIoImxlZnQiLHQpLHkudHlwZU9mLm51bWJlcigicmlnaHQiLGUpLHkudHlwZU9mLm51bWJlcigiYm90dG9tIixuKSx5LnR5cGVPZi5udW1iZXIoInRvcCIsbykseS50eXBlT2YubnVtYmVyKCJuZWFyIixyKSx5LnR5cGVPZi5udW1iZXIoImZhciIsaSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLHMpO2xldCBmPTEvKGUtdCksdT0xLyhvLW4pLGM9MS8oaS1yKSxsPS0oZSt0KSpmLHA9LShvK24pKnUsZD0tKGkrcikqYztyZXR1cm4gZio9Mix1Kj0yLGMqPS0yLHNbMF09ZixzWzFdPTAsc1syXT0wLHNbM109MCxzWzRdPTAsc1s1XT11LHNbNl09MCxzWzddPTAsc1s4XT0wLHNbOV09MCxzWzEwXT1jLHNbMTFdPTAsc1sxMl09bCxzWzEzXT1wLHNbMTRdPWQsc1sxNV09MSxzfTtidC5jb21wdXRlUGVyc3BlY3RpdmVPZmZDZW50ZXI9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7eS50eXBlT2YubnVtYmVyKCJsZWZ0Iix0KSx5LnR5cGVPZi5udW1iZXIoInJpZ2h0IixlKSx5LnR5cGVPZi5udW1iZXIoImJvdHRvbSIsbikseS50eXBlT2YubnVtYmVyKCJ0b3AiLG8pLHkudHlwZU9mLm51bWJlcigibmVhciIscikseS50eXBlT2YubnVtYmVyKCJmYXIiLGkpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixzKTtsZXQgZj0yKnIvKGUtdCksdT0yKnIvKG8tbiksYz0oZSt0KS8oZS10KSxsPShvK24pLyhvLW4pLHA9LShpK3IpLyhpLXIpLGQ9LTEsbT0tMippKnIvKGktcik7cmV0dXJuIHNbMF09ZixzWzFdPTAsc1syXT0wLHNbM109MCxzWzRdPTAsc1s1XT11LHNbNl09MCxzWzddPTAsc1s4XT1jLHNbOV09bCxzWzEwXT1wLHNbMTFdPWQsc1sxMl09MCxzWzEzXT0wLHNbMTRdPW0sc1sxNV09MCxzfTtidC5jb21wdXRlSW5maW5pdGVQZXJzcGVjdGl2ZU9mZkNlbnRlcj1mdW5jdGlvbih0LGUsbixvLHIsaSl7eS50eXBlT2YubnVtYmVyKCJsZWZ0Iix0KSx5LnR5cGVPZi5udW1iZXIoInJpZ2h0IixlKSx5LnR5cGVPZi5udW1iZXIoImJvdHRvbSIsbikseS50eXBlT2YubnVtYmVyKCJ0b3AiLG8pLHkudHlwZU9mLm51bWJlcigibmVhciIscikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGkpO2xldCBzPTIqci8oZS10KSxmPTIqci8oby1uKSx1PShlK3QpLyhlLXQpLGM9KG8rbikvKG8tbiksbD0tMSxwPS0xLGQ9LTIqcjtyZXR1cm4gaVswXT1zLGlbMV09MCxpWzJdPTAsaVszXT0wLGlbNF09MCxpWzVdPWYsaVs2XT0wLGlbN109MCxpWzhdPXUsaVs5XT1jLGlbMTBdPWwsaVsxMV09cCxpWzEyXT0wLGlbMTNdPTAsaVsxNF09ZCxpWzE1XT0wLGl9O2J0LmNvbXB1dGVWaWV3cG9ydFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSxuLG8pe2gobyl8fChvPW5ldyBidCksdD10Pz9OdC5FTVBUWV9PQkpFQ1Q7bGV0IHI9dC54Pz8wLGk9dC55Pz8wLHM9dC53aWR0aD8/MCxmPXQuaGVpZ2h0Pz8wO2U9ZT8/MCxuPW4/PzE7bGV0IHU9cyouNSxjPWYqLjUsbD0obi1lKSouNSxwPXUsZD1jLG09bCxfPXIrdSxnPWkrYyxiPWUrbCxUPTE7cmV0dXJuIG9bMF09cCxvWzFdPTAsb1syXT0wLG9bM109MCxvWzRdPTAsb1s1XT1kLG9bNl09MCxvWzddPTAsb1s4XT0wLG9bOV09MCxvWzEwXT1tLG9bMTFdPTAsb1sxMl09XyxvWzEzXT1nLG9bMTRdPWIsb1sxNV09VCxvfTtidC5jb21wdXRlVmlldz1mdW5jdGlvbih0LGUsbixvLHIpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInBvc2l0aW9uIix0KSx5LnR5cGVPZi5vYmplY3QoImRpcmVjdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJ1cCIsbikseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsbykseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLHIpLHJbMF09by54LHJbMV09bi54LHJbMl09LWUueCxyWzNdPTAscls0XT1vLnkscls1XT1uLnkscls2XT0tZS55LHJbN109MCxyWzhdPW8ueixyWzldPW4ueixyWzEwXT0tZS56LHJbMTFdPTAsclsxMl09LWEuZG90KG8sdCksclsxM109LWEuZG90KG4sdCksclsxNF09YS5kb3QoZSx0KSxyWzE1XT0xLHJ9O2J0LnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLGgoZSk/KGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlKTpbdFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSx0WzddLHRbOF0sdFs5XSx0WzEwXSx0WzExXSx0WzEyXSx0WzEzXSx0WzE0XSx0WzE1XV19O2J0LmdldEVsZW1lbnRJbmRleD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygicm93IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJyb3ciLGUsMykseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImNvbHVtbiIsdCwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiY29sdW1uIix0LDMpLHQqNCtlfTtidC5nZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDMpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lKjQscj10W29dLGk9dFtvKzFdLHM9dFtvKzJdLGY9dFtvKzNdO3JldHVybiBuLng9cixuLnk9aSxuLno9cyxuLnc9ZixufTtidC5zZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMykseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvPWJ0LmNsb25lKHQsbyk7bGV0IHI9ZSo0O3JldHVybiBvW3JdPW4ueCxvW3IrMV09bi55LG9bcisyXT1uLnosb1tyKzNdPW4udyxvfTtidC5nZXRSb3c9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDMpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10W2VdLHI9dFtlKzRdLGk9dFtlKzhdLHM9dFtlKzEyXTtyZXR1cm4gbi54PW8sbi55PXIsbi56PWksbi53PXMsbn07YnQuc2V0Um93PWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwzKSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pLG89YnQuY2xvbmUodCxvKSxvW2VdPW4ueCxvW2UrNF09bi55LG9bZSs4XT1uLnosb1tlKzEyXT1uLncsb307YnQuc2V0VHJhbnNsYXRpb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJ0cmFuc2xhdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXSxuWzFdPXRbMV0sblsyXT10WzJdLG5bM109dFszXSxuWzRdPXRbNF0sbls1XT10WzVdLG5bNl09dFs2XSxuWzddPXRbN10sbls4XT10WzhdLG5bOV09dFs5XSxuWzEwXT10WzEwXSxuWzExXT10WzExXSxuWzEyXT1lLngsblsxM109ZS55LG5bMTRdPWUueixuWzE1XT10WzE1XSxufTtOQz1uZXcgYTtidC5zZXRTY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1idC5nZXRTY2FsZSh0LE5DKSxyPWUueC9vLngsaT1lLnkvby55LHM9ZS56L28uejtyZXR1cm4gblswXT10WzBdKnIsblsxXT10WzFdKnIsblsyXT10WzJdKnIsblszXT10WzNdLG5bNF09dFs0XSppLG5bNV09dFs1XSppLG5bNl09dFs2XSppLG5bN109dFs3XSxuWzhdPXRbOF0qcyxuWzldPXRbOV0qcyxuWzEwXT10WzEwXSpzLG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O0lDPW5ldyBhO2J0LnNldFVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1idC5nZXRTY2FsZSh0LElDKSxyPWUvby54LGk9ZS9vLnkscz1lL28uejtyZXR1cm4gblswXT10WzBdKnIsblsxXT10WzFdKnIsblsyXT10WzJdKnIsblszXT10WzNdLG5bNF09dFs0XSppLG5bNV09dFs1XSppLG5bNl09dFs2XSppLG5bN109dFs3XSxuWzhdPXRbOF0qcyxuWzldPXRbOV0qcyxuWzEwXT10WzEwXSpzLG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O01tPW5ldyBhO2J0LmdldFNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbMF0sdFsxXSx0WzJdLE1tKSksZS55PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbNF0sdFs1XSx0WzZdLE1tKSksZS56PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbOF0sdFs5XSx0WzEwXSxNbSkpLGV9O0MxPW5ldyBhO2J0LmdldE1heGltdW1TY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYnQuZ2V0U2NhbGUodCxDMSksYS5tYXhpbXVtQ29tcG9uZW50KEMxKX07dkM9bmV3IGE7YnQuc2V0Um90YXRpb249ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89YnQuZ2V0U2NhbGUodCx2Qyk7cmV0dXJuIG5bMF09ZVswXSpvLngsblsxXT1lWzFdKm8ueCxuWzJdPWVbMl0qby54LG5bM109dFszXSxuWzRdPWVbM10qby55LG5bNV09ZVs0XSpvLnksbls2XT1lWzVdKm8ueSxuWzddPXRbN10sbls4XT1lWzZdKm8ueixuWzldPWVbN10qby56LG5bMTBdPWVbOF0qby56LG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O0ZDPW5ldyBhO2J0LmdldFJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1idC5nZXRTY2FsZSh0LEZDKTtyZXR1cm4gZVswXT10WzBdL24ueCxlWzFdPXRbMV0vbi54LGVbMl09dFsyXS9uLngsZVszXT10WzRdL24ueSxlWzRdPXRbNV0vbi55LGVbNV09dFs2XS9uLnksZVs2XT10WzhdL24ueixlWzddPXRbOV0vbi56LGVbOF09dFsxMF0vbi56LGV9O2J0Lm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10WzBdLHI9dFsxXSxpPXRbMl0scz10WzNdLGY9dFs0XSx1PXRbNV0sYz10WzZdLGw9dFs3XSxwPXRbOF0sZD10WzldLG09dFsxMF0sXz10WzExXSxnPXRbMTJdLGI9dFsxM10sVD10WzE0XSxPPXRbMTVdLEU9ZVswXSx3PWVbMV0sQz1lWzJdLE09ZVszXSxOPWVbNF0sRj1lWzVdLEk9ZVs2XSx2PWVbN10sQj1lWzhdLEE9ZVs5XSxTPWVbMTBdLHg9ZVsxMV0sRD1lWzEyXSx6PWVbMTNdLGo9ZVsxNF0saz1lWzE1XSxxPW8qRStmKncrcCpDK2cqTSxXPXIqRSt1KncrZCpDK2IqTSxSPWkqRStjKncrbSpDK1QqTSxudD1zKkUrbCp3K18qQytPKk0sY3Q9bypOK2YqRitwKkkrZyp2LGx0PXIqTit1KkYrZCpJK2IqdixfdD1pKk4rYypGK20qSStUKnYsb3Q9cypOK2wqRitfKkkrTyp2LHh0PW8qQitmKkErcCpTK2cqeCx5dD1yKkIrdSpBK2QqUytiKngsU3Q9aSpCK2MqQSttKlMrVCp4LGR0PXMqQitsKkErXypTK08qeCxmdD1vKkQrZip6K3AqaitnKmssSXQ9cipEK3UqeitkKmorYiprLFZ0PWkqRCtjKnorbSpqK1QqayxkZT1zKkQrbCp6K18qaitPKms7cmV0dXJuIG5bMF09cSxuWzFdPVcsblsyXT1SLG5bM109bnQsbls0XT1jdCxuWzVdPWx0LG5bNl09X3Qsbls3XT1vdCxuWzhdPXh0LG5bOV09eXQsblsxMF09U3QsblsxMV09ZHQsblsxMl09ZnQsblsxM109SXQsblsxNF09VnQsblsxNV09ZGUsbn07YnQuYWRkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdK2VbMF0sblsxXT10WzFdK2VbMV0sblsyXT10WzJdK2VbMl0sblszXT10WzNdK2VbM10sbls0XT10WzRdK2VbNF0sbls1XT10WzVdK2VbNV0sbls2XT10WzZdK2VbNl0sbls3XT10WzddK2VbN10sbls4XT10WzhdK2VbOF0sbls5XT10WzldK2VbOV0sblsxMF09dFsxMF0rZVsxMF0sblsxMV09dFsxMV0rZVsxMV0sblsxMl09dFsxMl0rZVsxMl0sblsxM109dFsxM10rZVsxM10sblsxNF09dFsxNF0rZVsxNF0sblsxNV09dFsxNV0rZVsxNV0sbn07YnQuc3VidHJhY3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0tZVswXSxuWzFdPXRbMV0tZVsxXSxuWzJdPXRbMl0tZVsyXSxuWzNdPXRbM10tZVszXSxuWzRdPXRbNF0tZVs0XSxuWzVdPXRbNV0tZVs1XSxuWzZdPXRbNl0tZVs2XSxuWzddPXRbN10tZVs3XSxuWzhdPXRbOF0tZVs4XSxuWzldPXRbOV0tZVs5XSxuWzEwXT10WzEwXS1lWzEwXSxuWzExXT10WzExXS1lWzExXSxuWzEyXT10WzEyXS1lWzEyXSxuWzEzXT10WzEzXS1lWzEzXSxuWzE0XT10WzE0XS1lWzE0XSxuWzE1XT10WzE1XS1lWzE1XSxufTtidC5tdWx0aXBseVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10WzBdLHI9dFsxXSxpPXRbMl0scz10WzRdLGY9dFs1XSx1PXRbNl0sYz10WzhdLGw9dFs5XSxwPXRbMTBdLGQ9dFsxMl0sbT10WzEzXSxfPXRbMTRdLGc9ZVswXSxiPWVbMV0sVD1lWzJdLE89ZVs0XSxFPWVbNV0sdz1lWzZdLEM9ZVs4XSxNPWVbOV0sTj1lWzEwXSxGPWVbMTJdLEk9ZVsxM10sdj1lWzE0XSxCPW8qZytzKmIrYypULEE9cipnK2YqYitsKlQsUz1pKmcrdSpiK3AqVCx4PW8qTytzKkUrYyp3LEQ9cipPK2YqRStsKncsej1pKk8rdSpFK3AqdyxqPW8qQytzKk0rYypOLGs9cipDK2YqTStsKk4scT1pKkMrdSpNK3AqTixXPW8qRitzKkkrYyp2K2QsUj1yKkYrZipJK2wqdittLG50PWkqRit1KkkrcCp2K187cmV0dXJuIG5bMF09QixuWzFdPUEsblsyXT1TLG5bM109MCxuWzRdPXgsbls1XT1ELG5bNl09eixuWzddPTAsbls4XT1qLG5bOV09ayxuWzEwXT1xLG5bMTFdPTAsblsxMl09VyxuWzEzXT1SLG5bMTRdPW50LG5bMTVdPTEsbn07YnQubXVsdGlwbHlCeU1hdHJpeDM9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJvdGF0aW9uIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89dFswXSxyPXRbMV0saT10WzJdLHM9dFs0XSxmPXRbNV0sdT10WzZdLGM9dFs4XSxsPXRbOV0scD10WzEwXSxkPWVbMF0sbT1lWzFdLF89ZVsyXSxnPWVbM10sYj1lWzRdLFQ9ZVs1XSxPPWVbNl0sRT1lWzddLHc9ZVs4XSxDPW8qZCtzKm0rYypfLE09cipkK2YqbStsKl8sTj1pKmQrdSptK3AqXyxGPW8qZytzKmIrYypULEk9cipnK2YqYitsKlQsdj1pKmcrdSpiK3AqVCxCPW8qTytzKkUrYyp3LEE9cipPK2YqRStsKncsUz1pKk8rdSpFK3AqdztyZXR1cm4gblswXT1DLG5bMV09TSxuWzJdPU4sblszXT0wLG5bNF09RixuWzVdPUksbls2XT12LG5bN109MCxuWzhdPUIsbls5XT1BLG5bMTBdPVMsblsxMV09MCxuWzEyXT10WzEyXSxuWzEzXT10WzEzXSxuWzE0XT10WzE0XSxuWzE1XT10WzE1XSxufTtidC5tdWx0aXBseUJ5VHJhbnNsYXRpb249ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInRyYW5zbGF0aW9uIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZS54LHI9ZS55LGk9ZS56LHM9byp0WzBdK3IqdFs0XStpKnRbOF0rdFsxMl0sZj1vKnRbMV0rcip0WzVdK2kqdFs5XSt0WzEzXSx1PW8qdFsyXStyKnRbNl0raSp0WzEwXSt0WzE0XTtyZXR1cm4gblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT10WzNdLG5bNF09dFs0XSxuWzVdPXRbNV0sbls2XT10WzZdLG5bN109dFs3XSxuWzhdPXRbOF0sbls5XT10WzldLG5bMTBdPXRbMTBdLG5bMTFdPXRbMTFdLG5bMTJdPXMsblsxM109ZixuWzE0XT11LG5bMTVdPXRbMTVdLG59O2J0Lm11bHRpcGx5QnlTY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lLngscj1lLnksaT1lLno7cmV0dXJuIG89PT0xJiZyPT09MSYmaT09PTE/YnQuY2xvbmUodCxuKTooblswXT1vKnRbMF0sblsxXT1vKnRbMV0sblsyXT1vKnRbMl0sblszXT10WzNdLG5bNF09cip0WzRdLG5bNV09cip0WzVdLG5bNl09cip0WzZdLG5bN109dFs3XSxuWzhdPWkqdFs4XSxuWzldPWkqdFs5XSxuWzEwXT1pKnRbMTBdLG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG4pfTtidC5tdWx0aXBseUJ5VW5pZm9ybVNjYWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0qZSxuWzFdPXRbMV0qZSxuWzJdPXRbMl0qZSxuWzNdPXRbM10sbls0XT10WzRdKmUsbls1XT10WzVdKmUsbls2XT10WzZdKmUsbls3XT10WzddLG5bOF09dFs4XSplLG5bOV09dFs5XSplLG5bMTBdPXRbMTBdKmUsblsxMV09dFsxMV0sblsxMl09dFsxMl0sblsxM109dFsxM10sblsxNF09dFsxNF0sblsxNV09dFsxNV0sbn07YnQubXVsdGlwbHlCeVZlY3Rvcj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZS54LHI9ZS55LGk9ZS56LHM9ZS53LGY9dFswXSpvK3RbNF0qcit0WzhdKmkrdFsxMl0qcyx1PXRbMV0qbyt0WzVdKnIrdFs5XSppK3RbMTNdKnMsYz10WzJdKm8rdFs2XSpyK3RbMTBdKmkrdFsxNF0qcyxsPXRbM10qbyt0WzddKnIrdFsxMV0qaSt0WzE1XSpzO3JldHVybiBuLng9ZixuLnk9dSxuLno9YyxuLnc9bCxufTtidC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3Rvcj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZS54LHI9ZS55LGk9ZS56LHM9dFswXSpvK3RbNF0qcit0WzhdKmksZj10WzFdKm8rdFs1XSpyK3RbOV0qaSx1PXRbMl0qbyt0WzZdKnIrdFsxMF0qaTtyZXR1cm4gbi54PXMsbi55PWYsbi56PXUsbn07YnQubXVsdGlwbHlCeVBvaW50PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lLngscj1lLnksaT1lLnoscz10WzBdKm8rdFs0XSpyK3RbOF0qaSt0WzEyXSxmPXRbMV0qbyt0WzVdKnIrdFs5XSppK3RbMTNdLHU9dFsyXSpvK3RbNl0qcit0WzEwXSppK3RbMTRdO3JldHVybiBuLng9cyxuLnk9ZixuLno9dSxufTtidC5tdWx0aXBseUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUsblsxXT10WzFdKmUsblsyXT10WzJdKmUsblszXT10WzNdKmUsbls0XT10WzRdKmUsbls1XT10WzVdKmUsbls2XT10WzZdKmUsbls3XT10WzddKmUsbls4XT10WzhdKmUsbls5XT10WzldKmUsblsxMF09dFsxMF0qZSxuWzExXT10WzExXSplLG5bMTJdPXRbMTJdKmUsblsxM109dFsxM10qZSxuWzE0XT10WzE0XSplLG5bMTVdPXRbMTVdKmUsbn07YnQubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT0tdFswXSxlWzFdPS10WzFdLGVbMl09LXRbMl0sZVszXT0tdFszXSxlWzRdPS10WzRdLGVbNV09LXRbNV0sZVs2XT0tdFs2XSxlWzddPS10WzddLGVbOF09LXRbOF0sZVs5XT0tdFs5XSxlWzEwXT0tdFsxMF0sZVsxMV09LXRbMTFdLGVbMTJdPS10WzEyXSxlWzEzXT0tdFsxM10sZVsxNF09LXRbMTRdLGVbMTVdPS10WzE1XSxlfTtidC50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXRbMV0sbz10WzJdLHI9dFszXSxpPXRbNl0scz10WzddLGY9dFsxMV07cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbNF0sZVsyXT10WzhdLGVbM109dFsxMl0sZVs0XT1uLGVbNV09dFs1XSxlWzZdPXRbOV0sZVs3XT10WzEzXSxlWzhdPW8sZVs5XT1pLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTRdLGVbMTJdPXIsZVsxM109cyxlWzE0XT1mLGVbMTVdPXRbMTVdLGV9O2J0LmFicz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGVbMF09TWF0aC5hYnModFswXSksZVsxXT1NYXRoLmFicyh0WzFdKSxlWzJdPU1hdGguYWJzKHRbMl0pLGVbM109TWF0aC5hYnModFszXSksZVs0XT1NYXRoLmFicyh0WzRdKSxlWzVdPU1hdGguYWJzKHRbNV0pLGVbNl09TWF0aC5hYnModFs2XSksZVs3XT1NYXRoLmFicyh0WzddKSxlWzhdPU1hdGguYWJzKHRbOF0pLGVbOV09TWF0aC5hYnModFs5XSksZVsxMF09TWF0aC5hYnModFsxMF0pLGVbMTFdPU1hdGguYWJzKHRbMTFdKSxlWzEyXT1NYXRoLmFicyh0WzEyXSksZVsxM109TWF0aC5hYnModFsxM10pLGVbMTRdPU1hdGguYWJzKHRbMTRdKSxlWzE1XT1NYXRoLmFicyh0WzE1XSksZX07YnQuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0WzEyXT09PWVbMTJdJiZ0WzEzXT09PWVbMTNdJiZ0WzE0XT09PWVbMTRdJiZ0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzRdPT09ZVs0XSYmdFs1XT09PWVbNV0mJnRbNl09PT1lWzZdJiZ0WzhdPT09ZVs4XSYmdFs5XT09PWVbOV0mJnRbMTBdPT09ZVsxMF0mJnRbM109PT1lWzNdJiZ0WzddPT09ZVs3XSYmdFsxMV09PT1lWzExXSYmdFsxNV09PT1lWzE1XX07YnQuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49bj8/MCx0PT09ZXx8aCh0KSYmaChlKSYmTWF0aC5hYnModFswXS1lWzBdKTw9biYmTWF0aC5hYnModFsxXS1lWzFdKTw9biYmTWF0aC5hYnModFsyXS1lWzJdKTw9biYmTWF0aC5hYnModFszXS1lWzNdKTw9biYmTWF0aC5hYnModFs0XS1lWzRdKTw9biYmTWF0aC5hYnModFs1XS1lWzVdKTw9biYmTWF0aC5hYnModFs2XS1lWzZdKTw9biYmTWF0aC5hYnModFs3XS1lWzddKTw9biYmTWF0aC5hYnModFs4XS1lWzhdKTw9biYmTWF0aC5hYnModFs5XS1lWzldKTw9biYmTWF0aC5hYnModFsxMF0tZVsxMF0pPD1uJiZNYXRoLmFicyh0WzExXS1lWzExXSk8PW4mJk1hdGguYWJzKHRbMTJdLWVbMTJdKTw9biYmTWF0aC5hYnModFsxM10tZVsxM10pPD1uJiZNYXRoLmFicyh0WzE0XS1lWzE0XSk8PW4mJk1hdGguYWJzKHRbMTVdLWVbMTVdKTw9bn07YnQuZ2V0VHJhbnNsYXRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9dFsxMl0sZS55PXRbMTNdLGUuej10WzE0XSxlfTtidC5nZXRNYXRyaXgzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzRdLGVbNF09dFs1XSxlWzVdPXRbNl0sZVs2XT10WzhdLGVbN109dFs5XSxlWzhdPXRbMTBdLGV9O0xDPW5ldyBaLERDPW5ldyBaLEJDPW5ldyBtZSxVQz1uZXcgbWUoMCwwLDAsMSk7YnQuaW52ZXJzZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49dFswXSxvPXRbNF0scj10WzhdLGk9dFsxMl0scz10WzFdLGY9dFs1XSx1PXRbOV0sYz10WzEzXSxsPXRbMl0scD10WzZdLGQ9dFsxMF0sbT10WzE0XSxfPXRbM10sZz10WzddLGI9dFsxMV0sVD10WzE1XSxPPWQqVCxFPW0qYix3PXAqVCxDPW0qZyxNPXAqYixOPWQqZyxGPWwqVCxJPW0qXyx2PWwqYixCPWQqXyxBPWwqZyxTPXAqXyx4PU8qZitDKnUrTSpjLShFKmYrdyp1K04qYyksRD1FKnMrRip1K0IqYy0oTypzK0kqdSt2KmMpLHo9dypzK0kqZitBKmMtKEMqcytGKmYrUypjKSxqPU4qcyt2KmYrUyp1LShNKnMrQipmK0EqdSksaz1FKm8rdypyK04qaS0oTypvK0MqcitNKmkpLHE9TypuK0kqcit2KmktKEUqbitGKnIrQippKSxXPUMqbitGKm8rUyppLSh3Km4rSSpvK0EqaSksUj1NKm4rQipvK0Eqci0oTipuK3YqbytTKnIpO089cipjLEU9aSp1LHc9bypjLEM9aSpmLE09byp1LE49cipmLEY9bipjLEk9aSpzLHY9bip1LEI9cipzLEE9bipmLFM9bypzO2xldCBudD1PKmcrQypiK00qVC0oRSpnK3cqYitOKlQpLGN0PUUqXytGKmIrQipULShPKl8rSSpiK3YqVCksbHQ9dypfK0kqZytBKlQtKEMqXytGKmcrUypUKSxfdD1OKl8rdipnK1MqYi0oTSpfK0IqZytBKmIpLG90PXcqZCtOKm0rRSpwLShNKm0rTypwK0MqZCkseHQ9diptK08qbCtJKmQtKEYqZCtCKm0rRSpsKSx5dD1GKnArUyptK0MqbC0oQSptK3cqbCtJKnApLFN0PUEqZCtNKmwrQipwLSh2KnArUypkK04qbCksZHQ9bip4K28qRCtyKnoraSpqO2lmKE1hdGguYWJzKGR0KTxQLkVQU0lMT04yMSl7aWYoWi5lcXVhbHNFcHNpbG9uKGJ0LmdldE1hdHJpeDModCxMQyksREMsUC5FUFNJTE9ONykmJm1lLmVxdWFscyhidC5nZXRSb3codCwzLEJDKSxVQykpcmV0dXJuIGVbMF09MCxlWzFdPTAsZVsyXT0wLGVbM109MCxlWzRdPTAsZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT0wLGVbOV09MCxlWzEwXT0wLGVbMTFdPTAsZVsxMl09LXRbMTJdLGVbMTNdPS10WzEzXSxlWzE0XT0tdFsxNF0sZVsxNV09MSxlO3Rocm93IG5ldyBBZSgibWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIGJlY2F1c2UgaXRzIGRldGVybWluYXRlIGlzIHplcm8uIil9cmV0dXJuIGR0PTEvZHQsZVswXT14KmR0LGVbMV09RCpkdCxlWzJdPXoqZHQsZVszXT1qKmR0LGVbNF09aypkdCxlWzVdPXEqZHQsZVs2XT1XKmR0LGVbN109UipkdCxlWzhdPW50KmR0LGVbOV09Y3QqZHQsZVsxMF09bHQqZHQsZVsxMV09X3QqZHQsZVsxMl09b3QqZHQsZVsxM109eHQqZHQsZVsxNF09eXQqZHQsZVsxNV09U3QqZHQsZX07YnQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj10WzBdLG89dFsxXSxyPXRbMl0saT10WzRdLHM9dFs1XSxmPXRbNl0sdT10WzhdLGM9dFs5XSxsPXRbMTBdLHA9dFsxMl0sZD10WzEzXSxtPXRbMTRdLF89LW4qcC1vKmQtciptLGc9LWkqcC1zKmQtZiptLGI9LXUqcC1jKmQtbCptO3JldHVybiBlWzBdPW4sZVsxXT1pLGVbMl09dSxlWzNdPTAsZVs0XT1vLGVbNV09cyxlWzZdPWMsZVs3XT0wLGVbOF09cixlWzldPWYsZVsxMF09bCxlWzExXT0wLGVbMTJdPV8sZVsxM109ZyxlWzE0XT1iLGVbMTVdPTEsZX07a0M9bmV3IGJ0O2J0LmludmVyc2VUcmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxidC5pbnZlcnNlKGJ0LnRyYW5zcG9zZSh0LGtDKSxlKX07YnQuSURFTlRJVFk9T2JqZWN0LmZyZWV6ZShuZXcgYnQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSkpO2J0LlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgYnQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCkpO2J0LkNPTFVNTjBST1cwPTA7YnQuQ09MVU1OMFJPVzE9MTtidC5DT0xVTU4wUk9XMj0yO2J0LkNPTFVNTjBST1czPTM7YnQuQ09MVU1OMVJPVzA9NDtidC5DT0xVTU4xUk9XMT01O2J0LkNPTFVNTjFST1cyPTY7YnQuQ09MVU1OMVJPVzM9NztidC5DT0xVTU4yUk9XMD04O2J0LkNPTFVNTjJST1cxPTk7YnQuQ09MVU1OMlJPVzI9MTA7YnQuQ09MVU1OMlJPVzM9MTE7YnQuQ09MVU1OM1JPVzA9MTI7YnQuQ09MVU1OM1JPVzE9MTM7YnQuQ09MVU1OM1JPVzI9MTQ7YnQuQ09MVU1OM1JPVzM9MTU7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYnQucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBidC5wYWNrZWRMZW5ndGh9fX0pO2J0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gYnQuY2xvbmUodGhpcyx0KX07YnQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gYnQuZXF1YWxzKHRoaXMsdCl9O2J0LmVxdWFsc0FycmF5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFswXT09PWVbbl0mJnRbMV09PT1lW24rMV0mJnRbMl09PT1lW24rMl0mJnRbM109PT1lW24rM10mJnRbNF09PT1lW24rNF0mJnRbNV09PT1lW24rNV0mJnRbNl09PT1lW24rNl0mJnRbN109PT1lW24rN10mJnRbOF09PT1lW24rOF0mJnRbOV09PT1lW24rOV0mJnRbMTBdPT09ZVtuKzEwXSYmdFsxMV09PT1lW24rMTFdJiZ0WzEyXT09PWVbbisxMl0mJnRbMTNdPT09ZVtuKzEzXSYmdFsxNF09PT1lW24rMTRdJiZ0WzE1XT09PWVbbisxNV19O2J0LnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJ0LmVxdWFsc0Vwc2lsb24odGhpcyx0LGUpfTtidC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpc1swXX0sICR7dGhpc1s0XX0sICR7dGhpc1s4XX0sICR7dGhpc1sxMl19KQooJHt0aGlzWzFdfSwgJHt0aGlzWzVdfSwgJHt0aGlzWzldfSwgJHt0aGlzWzEzXX0pCigke3RoaXNbMl19LCAke3RoaXNbNl19LCAke3RoaXNbMTBdfSwgJHt0aGlzWzE0XX0pCigke3RoaXNbM119LCAke3RoaXNbN119LCAke3RoaXNbMTFdfSwgJHt0aGlzWzE1XX0pYH07aXQ9YnR9KTtmdW5jdGlvbiBHQyh0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCkseS5kZWZpbmVkKCJpdGVtVG9GaW5kIixlKSx5LmRlZmluZWQoImNvbXBhcmF0b3IiLG4pO2xldCBvPTAscj10Lmxlbmd0aC0xLGkscztmb3IoO288PXI7KXtpZihpPX5+KChvK3IpLzIpLHM9bih0W2ldLGUpLHM8MCl7bz1pKzE7Y29udGludWV9aWYocz4wKXtyPWktMTtjb250aW51ZX1yZXR1cm4gaX1yZXR1cm5+KHIrMSl9dmFyIFZzLE5tPSQoKCk9PntXdCgpO1ZzPUdDfSk7ZnVuY3Rpb24gVkModCxlLG4sbyxyKXt0aGlzLnhQb2xlV2FuZGVyPXQsdGhpcy55UG9sZVdhbmRlcj1lLHRoaXMueFBvbGVPZmZzZXQ9bix0aGlzLnlQb2xlT2Zmc2V0PW8sdGhpcy51dDFNaW51c1V0Yz1yfXZhciBjZixJbT0kKCgpPT57Y2Y9VkN9KTtmdW5jdGlvbiB6Qyh0KXtpZih0PT09bnVsbHx8aXNOYU4odCkpdGhyb3cgbmV3IEwoInllYXIgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBudW1iZXIuIik7cmV0dXJuIHQlND09PTAmJnQlMTAwIT09MHx8dCU0MDA9PT0wfXZhciBhZix2bT0kKCgpPT57anQoKTthZj16Q30pO2Z1bmN0aW9uIGpDKHQsZSxuLG8scixpLHMsZil7dD10Pz8xLGU9ZT8/MSxuPW4/PzEsbz1vPz8wLHI9cj8/MCxpPWk/PzAscz1zPz8wLGY9Zj8/ITEsZygpLGIoKSx0aGlzLnllYXI9dCx0aGlzLm1vbnRoPWUsdGhpcy5kYXk9bix0aGlzLmhvdXI9byx0aGlzLm1pbnV0ZT1yLHRoaXMuc2Vjb25kPWksdGhpcy5taWxsaXNlY29uZD1zLHRoaXMuaXNMZWFwU2Vjb25kPWY7ZnVuY3Rpb24gZygpe3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJZZWFyIix0LDEpLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJZZWFyIix0LDk5OTkpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJNb250aCIsZSwxKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiTW9udGgiLGUsMTIpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJEYXkiLG4sMSkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIkRheSIsbiwzMSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIkhvdXIiLG8sMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIkhvdXIiLG8sMjMpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJNaW51dGUiLHIsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIk1pbnV0ZSIsciw1OSkseS50eXBlT2YuYm9vbCgiSXNMZWFwU2Vjb25kIixmKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiU2Vjb25kIixpLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJTZWNvbmQiLGksZj82MDo1OSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIk1pbGxpc2Vjb25kIixzLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbigiTWlsbGlzZWNvbmQiLHMsMWUzKX1mdW5jdGlvbiBiKCl7bGV0IFQ9ZT09PTImJmFmKHQpP3gxW2UtMV0rMTp4MVtlLTFdO2lmKG4+VCl0aHJvdyBuZXcgTCgiTW9udGggYW5kIERheSByZXByZXNlbnRzIGludmFsaWQgZGF0ZSIpfX12YXIgeDEsV2wsUDE9JCgoKT0+e1d0KCk7anQoKTt2bSgpO3gxPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07V2w9akN9KTtmdW5jdGlvbiBIQyh0LGUpe3RoaXMuanVsaWFuRGF0ZT10LHRoaXMub2Zmc2V0PWV9dmFyIFdlLEZtPSQoKCk9PntXZT1IQ30pO3ZhciBxQyx5bixYbD0kKCgpPT57cUM9e1NFQ09ORFNfUEVSX01JTExJU0VDT05EOi4wMDEsU0VDT05EU19QRVJfTUlOVVRFOjYwLE1JTlVURVNfUEVSX0hPVVI6NjAsSE9VUlNfUEVSX0RBWToyNCxTRUNPTkRTX1BFUl9IT1VSOjM2MDAsTUlOVVRFU19QRVJfREFZOjE0NDAsU0VDT05EU19QRVJfREFZOjg2NDAwLERBWVNfUEVSX0pVTElBTl9DRU5UVVJZOjM2NTI1LFBJQ09TRUNPTkQ6MWUtOSxNT0RJRklFRF9KVUxJQU5fREFURV9ESUZGRVJFTkNFOjI0MDAwMDA1ZS0xfSx5bj1PYmplY3QuZnJlZXplKHFDKX0pO3ZhciBLQyxPZSxZbD0kKCgpPT57S0M9e1VUQzowLFRBSToxfSxPZT1PYmplY3QuZnJlZXplKEtDKX0pO2Z1bmN0aW9uIExtKHQsZSl7cmV0dXJuIEd0LmNvbXBhcmUodC5qdWxpYW5EYXRlLGUuanVsaWFuRGF0ZSl9ZnVuY3Rpb24gSmwodCl7S2MuanVsaWFuRGF0ZT10O2xldCBlPUd0LmxlYXBTZWNvbmRzLG49VnMoZSxLYyxMbSk7bjwwJiYobj1+biksbj49ZS5sZW5ndGgmJihuPWUubGVuZ3RoLTEpO2xldCBvPWVbbl0ub2Zmc2V0O24+MCYmR3Quc2Vjb25kc0RpZmZlcmVuY2UoZVtuXS5qdWxpYW5EYXRlLHQpPm8mJihuLS0sbz1lW25dLm9mZnNldCksR3QuYWRkU2Vjb25kcyh0LG8sdCl9ZnVuY3Rpb24gTTEodCxlKXtLYy5qdWxpYW5EYXRlPXQ7bGV0IG49R3QubGVhcFNlY29uZHMsbz1WcyhuLEtjLExtKTtpZihvPDAmJihvPX5vKSxvPT09MClyZXR1cm4gR3QuYWRkU2Vjb25kcyh0LC1uWzBdLm9mZnNldCxlKTtpZihvPj1uLmxlbmd0aClyZXR1cm4gR3QuYWRkU2Vjb25kcyh0LC1uW28tMV0ub2Zmc2V0LGUpO2xldCByPUd0LnNlY29uZHNEaWZmZXJlbmNlKG5bb10uanVsaWFuRGF0ZSx0KTtpZihyPT09MClyZXR1cm4gR3QuYWRkU2Vjb25kcyh0LC1uW29dLm9mZnNldCxlKTtpZighKHI8PTEpKXJldHVybiBHdC5hZGRTZWNvbmRzKHQsLW5bLS1vXS5vZmZzZXQsZSl9ZnVuY3Rpb24gbnModCxlLG4pe2xldCBvPWUveW4uU0VDT05EU19QRVJfREFZfDA7cmV0dXJuIHQrPW8sZS09eW4uU0VDT05EU19QRVJfREFZKm8sZTwwJiYodC0tLGUrPXluLlNFQ09ORFNfUEVSX0RBWSksbi5kYXlOdW1iZXI9dCxuLnNlY29uZHNPZkRheT1lLG59ZnVuY3Rpb24gRG0odCxlLG4sbyxyLGkscyl7bGV0IGY9KGUtMTQpLzEyfDAsdT10KzQ4MDArZixjPSgxNDYxKnUvNHwwKSsoMzY3KihlLTItMTIqZikvMTJ8MCktKDMqKCh1KzEwMCkvMTAwfDApLzR8MCkrbi0zMjA3NTtvPW8tMTIsbzwwJiYobys9MjQpO2xldCBsPWkrKG8qeW4uU0VDT05EU19QRVJfSE9VUityKnluLlNFQ09ORFNfUEVSX01JTlVURStzKnluLlNFQ09ORFNfUEVSX01JTExJU0VDT05EKTtyZXR1cm4gbD49NDMyMDAmJihjLT0xKSxbYyxsXX1mdW5jdGlvbiBHdCh0LGUsbil7dGhpcy5kYXlOdW1iZXI9dm9pZCAwLHRoaXMuc2Vjb25kc09mRGF5PXZvaWQgMCx0PXQ/PzAsZT1lPz8wLG49bj8/T2UuVVRDO2xldCBvPXR8MDtlPWUrKHQtbykqeW4uU0VDT05EU19QRVJfREFZLG5zKG8sZSx0aGlzKSxuPT09T2UuVVRDJiZKbCh0aGlzKX12YXIgTjEsJGwsWmwsS2MsV0MsWEMsWUMsJEMsWkMsQm0sUUMsSkMsdHgsTHIsUWwsR24sdHA9JCgoKT0+e05tKCk7YXQoKTtqdCgpO1AxKCk7dm0oKTtGbSgpO1hsKCk7WWwoKTtOMT1uZXcgV2wsJGw9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxabD0yOTtLYz1uZXcgV2U7V0M9L14oXGR7NH0pJC8sWEM9L14oXGR7NH0pLShcZHsyfSkkLyxZQz0vXihcZHs0fSktPyhcZHszfSkkLywkQz0vXihcZHs0fSktP1coXGR7Mn0pLT8oXGR7MX0pPyQvLFpDPS9eKFxkezR9KS0/KFxkezJ9KS0/KFxkezJ9KSQvLEJtPS8oW1orXC1dKT8oXGR7Mn0pPzo/KFxkezJ9KT8kLyxRQz0vXihcZHsyfSkoXC5cZCspPy8uc291cmNlK0JtLnNvdXJjZSxKQz0vXihcZHsyfSk6PyhcZHsyfSkoXC5cZCspPy8uc291cmNlK0JtLnNvdXJjZSx0eD0vXihcZHsyfSk6PyhcZHsyfSk6PyhcZHsyfSkoXC5cZCspPy8uc291cmNlK0JtLnNvdXJjZSxMcj0iSW52YWxpZCBJU08gODYwMSBkYXRlLiI7R3QuZnJvbUdyZWdvcmlhbkRhdGU9ZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBXbCkpdGhyb3cgbmV3IEwoImRhdGUgbXVzdCBiZSBhIHZhbGlkIEdyZWdvcmlhbkRhdGUuIik7bGV0IG49RG0odC55ZWFyLHQubW9udGgsdC5kYXksdC5ob3VyLHQubWludXRlLHQuc2Vjb25kLHQubWlsbGlzZWNvbmQpO3JldHVybiBoKGUpPyhucyhuWzBdLG5bMV0sZSksSmwoZSksZSk6bmV3IEd0KG5bMF0sblsxXSxPZS5VVEMpfTtHdC5mcm9tRGF0ZT1mdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIERhdGUpfHxpc05hTih0LmdldFRpbWUoKSkpdGhyb3cgbmV3IEwoImRhdGUgbXVzdCBiZSBhIHZhbGlkIEphdmFTY3JpcHQgRGF0ZS4iKTtsZXQgbj1EbSh0LmdldFVUQ0Z1bGxZZWFyKCksdC5nZXRVVENNb250aCgpKzEsdC5nZXRVVENEYXRlKCksdC5nZXRVVENIb3VycygpLHQuZ2V0VVRDTWludXRlcygpLHQuZ2V0VVRDU2Vjb25kcygpLHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO3JldHVybiBoKGUpPyhucyhuWzBdLG5bMV0sZSksSmwoZSksZSk6bmV3IEd0KG5bMF0sblsxXSxPZS5VVEMpfTtHdC5mcm9tSXNvODYwMT1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgTChMcik7dD10LnJlcGxhY2UoIiwiLCIuIik7bGV0IG49dC5zcGxpdCgiVCIpLG8scj0xLGk9MSxzPTAsZj0wLHU9MCxjPTAsbD1uWzBdLHA9blsxXSxkLG07aWYoIWgobCkpdGhyb3cgbmV3IEwoTHIpO2xldCBfO2lmKG49bC5tYXRjaChaQyksbiE9PW51bGwpe2lmKF89bC5zcGxpdCgiLSIpLmxlbmd0aC0xLF8+MCYmXyE9PTIpdGhyb3cgbmV3IEwoTHIpO289K25bMV0scj0rblsyXSxpPStuWzNdfWVsc2UgaWYobj1sLm1hdGNoKFhDKSxuIT09bnVsbClvPStuWzFdLHI9K25bMl07ZWxzZSBpZihuPWwubWF0Y2goV0MpLG4hPT1udWxsKW89K25bMV07ZWxzZXtsZXQgTztpZihuPWwubWF0Y2goWUMpLG4hPT1udWxsKXtpZihvPStuWzFdLE89K25bMl0sbT1hZihvKSxPPDF8fG0mJk8+MzY2fHwhbSYmTz4zNjUpdGhyb3cgbmV3IEwoTHIpfWVsc2UgaWYobj1sLm1hdGNoKCRDKSxuIT09bnVsbCl7bz0rblsxXTtsZXQgRT0rblsyXSx3PStuWzNdfHwwO2lmKF89bC5zcGxpdCgiLSIpLmxlbmd0aC0xLF8+MCYmKCFoKG5bM10pJiZfIT09MXx8aChuWzNdKSYmXyE9PTIpKXRocm93IG5ldyBMKExyKTtsZXQgQz1uZXcgRGF0ZShEYXRlLlVUQyhvLDAsNCkpO089RSo3K3ctQy5nZXRVVENEYXkoKS0zfWVsc2UgdGhyb3cgbmV3IEwoTHIpO2Q9bmV3IERhdGUoRGF0ZS5VVEMobywwLDEpKSxkLnNldFVUQ0RhdGUoTykscj1kLmdldFVUQ01vbnRoKCkrMSxpPWQuZ2V0VVRDRGF0ZSgpfWlmKG09YWYobykscjwxfHxyPjEyfHxpPDF8fChyIT09Mnx8IW0pJiZpPiRsW3ItMV18fG0mJnI9PT0yJiZpPlpsKXRocm93IG5ldyBMKExyKTtsZXQgZztpZihoKHApKXtpZihuPXAubWF0Y2godHgpLG4hPT1udWxsKXtpZihfPXAuc3BsaXQoIjoiKS5sZW5ndGgtMSxfPjAmJl8hPT0yJiZfIT09Myl0aHJvdyBuZXcgTChMcik7cz0rblsxXSxmPStuWzJdLHU9K25bM10sYz0rKG5bNF18fDApKjFlMyxnPTV9ZWxzZSBpZihuPXAubWF0Y2goSkMpLG4hPT1udWxsKXtpZihfPXAuc3BsaXQoIjoiKS5sZW5ndGgtMSxfPjIpdGhyb3cgbmV3IEwoTHIpO3M9K25bMV0sZj0rblsyXSx1PSsoblszXXx8MCkqNjAsZz00fWVsc2UgaWYobj1wLm1hdGNoKFFDKSxuIT09bnVsbClzPStuWzFdLGY9KyhuWzJdfHwwKSo2MCxnPTM7ZWxzZSB0aHJvdyBuZXcgTChMcik7aWYoZj49NjB8fHU+PTYxfHxzPjI0fHxzPT09MjQmJihmPjB8fHU+MHx8Yz4wKSl0aHJvdyBuZXcgTChMcik7bGV0IE89bltnXSxFPStuW2crMV0sdz0rKG5bZysyXXx8MCk7c3dpdGNoKE8pe2Nhc2UiKyI6cz1zLUUsZj1mLXc7YnJlYWs7Y2FzZSItIjpzPXMrRSxmPWYrdzticmVhaztjYXNlIloiOmJyZWFrO2RlZmF1bHQ6Zj1mK25ldyBEYXRlKERhdGUuVVRDKG8sci0xLGkscyxmKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTticmVha319bGV0IGI9dT09PTYwO2ZvcihiJiZ1LS07Zj49NjA7KWYtPTYwLHMrKztmb3IoO3M+PTI0OylzLT0yNCxpKys7Zm9yKGQ9bSYmcj09PTI/Wmw6JGxbci0xXTtpPmQ7KWktPWQscisrLHI+MTImJihyLT0xMixvKyspLGQ9bSYmcj09PTI/Wmw6JGxbci0xXTtmb3IoO2Y8MDspZis9NjAscy0tO2Zvcig7czwwOylzKz0yNCxpLS07Zm9yKDtpPDE7KXItLSxyPDEmJihyKz0xMixvLS0pLGQ9bSYmcj09PTI/Wmw6JGxbci0xXSxpKz1kO2xldCBUPURtKG8scixpLHMsZix1LGMpO3JldHVybiBoKGUpPyhucyhUWzBdLFRbMV0sZSksSmwoZSkpOmU9bmV3IEd0KFRbMF0sVFsxXSxPZS5VVEMpLGImJkd0LmFkZFNlY29uZHMoZSwxLGUpLGV9O0d0Lm5vdz1mdW5jdGlvbih0KXtyZXR1cm4gR3QuZnJvbURhdGUobmV3IERhdGUsdCl9O1FsPW5ldyBHdCgwLDAsT2UuVEFJKTtHdC50b0dyZWdvcmlhbkRhdGU9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgTCgianVsaWFuRGF0ZSBpcyByZXF1aXJlZC4iKTtsZXQgbj0hMSxvPU0xKHQsUWwpO2gobyl8fChHdC5hZGRTZWNvbmRzKHQsLTEsUWwpLG89TTEoUWwsUWwpLG49ITApO2xldCByPW8uZGF5TnVtYmVyLGk9by5zZWNvbmRzT2ZEYXk7aT49NDMyMDAmJihyKz0xKTtsZXQgcz1yKzY4NTY5fDAsZj00KnMvMTQ2MDk3fDA7cz1zLSgoMTQ2MDk3KmYrMykvNHwwKXwwO2xldCB1PTRlMyoocysxKS8xNDYxMDAxfDA7cz1zLSgxNDYxKnUvNHwwKSszMXwwO2xldCBjPTgwKnMvMjQ0N3wwLGw9cy0oMjQ0NypjLzgwfDApfDA7cz1jLzExfDA7bGV0IHA9YysyLTEyKnN8MCxkPTEwMCooZi00OSkrdStzfDAsbT1pL3luLlNFQ09ORFNfUEVSX0hPVVJ8MCxfPWktbSp5bi5TRUNPTkRTX1BFUl9IT1VSLGc9Xy95bi5TRUNPTkRTX1BFUl9NSU5VVEV8MDtfPV8tZyp5bi5TRUNPTkRTX1BFUl9NSU5VVEU7bGV0IGI9X3wwLFQ9KF8tYikveW4uU0VDT05EU19QRVJfTUlMTElTRUNPTkQ7cmV0dXJuIG0rPTEyLG0+MjMmJihtLT0yNCksbiYmKGIrPTEpLGgoZSk/KGUueWVhcj1kLGUubW9udGg9cCxlLmRheT1sLGUuaG91cj1tLGUubWludXRlPWcsZS5zZWNvbmQ9YixlLm1pbGxpc2Vjb25kPVQsZS5pc0xlYXBTZWNvbmQ9bixlKTpuZXcgV2woZCxwLGwsbSxnLGIsVCxuKX07R3QudG9EYXRlPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJqdWxpYW5EYXRlIGlzIHJlcXVpcmVkLiIpO2xldCBlPUd0LnRvR3JlZ29yaWFuRGF0ZSh0LE4xKSxuPWUuc2Vjb25kO3JldHVybiBlLmlzTGVhcFNlY29uZCYmKG4tPTEpLG5ldyBEYXRlKERhdGUuVVRDKGUueWVhcixlLm1vbnRoLTEsZS5kYXksZS5ob3VyLGUubWludXRlLG4sZS5taWxsaXNlY29uZCkpfTtHdC50b0lzbzg2MDE9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgTCgianVsaWFuRGF0ZSBpcyByZXF1aXJlZC4iKTtsZXQgbj1HdC50b0dyZWdvcmlhbkRhdGUodCxOMSksbz1uLnllYXIscj1uLm1vbnRoLGk9bi5kYXkscz1uLmhvdXIsZj1uLm1pbnV0ZSx1PW4uc2Vjb25kLGM9bi5taWxsaXNlY29uZDtvPT09MWU0JiZyPT09MSYmaT09PTEmJnM9PT0wJiZmPT09MCYmdT09PTAmJmM9PT0wJiYobz05OTk5LHI9MTIsaT0zMSxzPTI0KTtsZXQgbDtpZighaChlKSYmYyE9PTApe2xldCBwPWMqLjAxO3JldHVybiBsPXA8MWUtNj9wLnRvRml4ZWQoMjApLnJlcGxhY2UoIi4iLCIiKS5yZXBsYWNlKC8wKyQvLCIiKTpwLnRvU3RyaW5nKCkucmVwbGFjZSgiLiIsIiIpLGAke28udG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIil9LSR7ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHtpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVQke3MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHt1LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS4ke2x9WmB9cmV0dXJuIWgoZSl8fGU9PT0wP2Ake28udG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIil9LSR7ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHtpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVQke3MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHt1LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVpgOihsPShjKi4wMSkudG9GaXhlZChlKS5yZXBsYWNlKCIuIiwiIikuc2xpY2UoMCxlKSxgJHtvLnRvU3RyaW5nKCkucGFkU3RhcnQoNCwiMCIpfS0ke3IudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LSR7aS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1UJHtzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke2YudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7dS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0uJHtsfVpgKX07R3QuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLmRheU51bWJlcj10LmRheU51bWJlcixlLnNlY29uZHNPZkRheT10LnNlY29uZHNPZkRheSxlKTpuZXcgR3QodC5kYXlOdW1iZXIsdC5zZWNvbmRzT2ZEYXksT2UuVEFJKX07R3QuY29tcGFyZT1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJsZWZ0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJyaWdodCBpcyByZXF1aXJlZC4iKTtsZXQgbj10LmRheU51bWJlci1lLmRheU51bWJlcjtyZXR1cm4gbiE9PTA/bjp0LnNlY29uZHNPZkRheS1lLnNlY29uZHNPZkRheX07R3QuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0LmRheU51bWJlcj09PWUuZGF5TnVtYmVyJiZ0LnNlY29uZHNPZkRheT09PWUuc2Vjb25kc09mRGF5fTtHdC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj1uPz8wLHQ9PT1lfHxoKHQpJiZoKGUpJiZNYXRoLmFicyhHdC5zZWNvbmRzRGlmZmVyZW5jZSh0LGUpKTw9bn07R3QudG90YWxEYXlzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJqdWxpYW5EYXRlIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0LmRheU51bWJlcit0LnNlY29uZHNPZkRheS95bi5TRUNPTkRTX1BFUl9EQVl9O0d0LnNlY29uZHNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImxlZnQgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoInJpZ2h0IGlzIHJlcXVpcmVkLiIpO3JldHVybih0LmRheU51bWJlci1lLmRheU51bWJlcikqeW4uU0VDT05EU19QRVJfREFZKyh0LnNlY29uZHNPZkRheS1lLnNlY29uZHNPZkRheSl9O0d0LmRheXNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImxlZnQgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoInJpZ2h0IGlzIHJlcXVpcmVkLiIpO2xldCBuPXQuZGF5TnVtYmVyLWUuZGF5TnVtYmVyLG89KHQuc2Vjb25kc09mRGF5LWUuc2Vjb25kc09mRGF5KS95bi5TRUNPTkRTX1BFUl9EQVk7cmV0dXJuIG4rb307R3QuY29tcHV0ZVRhaU1pbnVzVXRjPWZ1bmN0aW9uKHQpe0tjLmp1bGlhbkRhdGU9dDtsZXQgZT1HdC5sZWFwU2Vjb25kcyxuPVZzKGUsS2MsTG0pO3JldHVybiBuPDAmJihuPX5uLC0tbixuPDAmJihuPTApKSxlW25dLm9mZnNldH07R3QuYWRkU2Vjb25kcz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoInNlY29uZHMgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEwoInJlc3VsdCBpcyByZXF1aXJlZC4iKTtyZXR1cm4gbnModC5kYXlOdW1iZXIsdC5zZWNvbmRzT2ZEYXkrZSxuKX07R3QuYWRkTWludXRlcz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoIm1pbnV0ZXMgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEwoInJlc3VsdCBpcyByZXF1aXJlZC4iKTtsZXQgbz10LnNlY29uZHNPZkRheStlKnluLlNFQ09ORFNfUEVSX01JTlVURTtyZXR1cm4gbnModC5kYXlOdW1iZXIsbyxuKX07R3QuYWRkSG91cnM9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJqdWxpYW5EYXRlIGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJob3VycyBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgTCgicmVzdWx0IGlzIHJlcXVpcmVkLiIpO2xldCBvPXQuc2Vjb25kc09mRGF5K2UqeW4uU0VDT05EU19QRVJfSE9VUjtyZXR1cm4gbnModC5kYXlOdW1iZXIsbyxuKX07R3QuYWRkRGF5cz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoImRheXMgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEwoInJlc3VsdCBpcyByZXF1aXJlZC4iKTtsZXQgbz10LmRheU51bWJlcitlO3JldHVybiBucyhvLHQuc2Vjb25kc09mRGF5LG4pfTtHdC5sZXNzVGhhbj1mdW5jdGlvbih0LGUpe3JldHVybiBHdC5jb21wYXJlKHQsZSk8MH07R3QubGVzc1RoYW5PckVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiBHdC5jb21wYXJlKHQsZSk8PTB9O0d0LmdyZWF0ZXJUaGFuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0LmNvbXBhcmUodCxlKT4wfTtHdC5ncmVhdGVyVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEd0LmNvbXBhcmUodCxlKT49MH07R3QucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBHdC5jbG9uZSh0aGlzLHQpfTtHdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBHdC5lcXVhbHModGhpcyx0KX07R3QucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QuZXF1YWxzRXBzaWxvbih0aGlzLHQsZSl9O0d0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBHdC50b0lzbzg2MDEodGhpcyl9O0d0LmxlYXBTZWNvbmRzPVtuZXcgV2UobmV3IEd0KDI0NDEzMTcsNDMyMTAsT2UuVEFJKSwxMCksbmV3IFdlKG5ldyBHdCgyNDQxNDk5LDQzMjExLE9lLlRBSSksMTEpLG5ldyBXZShuZXcgR3QoMjQ0MTY4Myw0MzIxMixPZS5UQUkpLDEyKSxuZXcgV2UobmV3IEd0KDI0NDIwNDgsNDMyMTMsT2UuVEFJKSwxMyksbmV3IFdlKG5ldyBHdCgyNDQyNDEzLDQzMjE0LE9lLlRBSSksMTQpLG5ldyBXZShuZXcgR3QoMjQ0Mjc3OCw0MzIxNSxPZS5UQUkpLDE1KSxuZXcgV2UobmV3IEd0KDI0NDMxNDQsNDMyMTYsT2UuVEFJKSwxNiksbmV3IFdlKG5ldyBHdCgyNDQzNTA5LDQzMjE3LE9lLlRBSSksMTcpLG5ldyBXZShuZXcgR3QoMjQ0Mzg3NCw0MzIxOCxPZS5UQUkpLDE4KSxuZXcgV2UobmV3IEd0KDI0NDQyMzksNDMyMTksT2UuVEFJKSwxOSksbmV3IFdlKG5ldyBHdCgyNDQ0Nzg2LDQzMjIwLE9lLlRBSSksMjApLG5ldyBXZShuZXcgR3QoMjQ0NTE1MSw0MzIyMSxPZS5UQUkpLDIxKSxuZXcgV2UobmV3IEd0KDI0NDU1MTYsNDMyMjIsT2UuVEFJKSwyMiksbmV3IFdlKG5ldyBHdCgyNDQ2MjQ3LDQzMjIzLE9lLlRBSSksMjMpLG5ldyBXZShuZXcgR3QoMjQ0NzE2MSw0MzIyNCxPZS5UQUkpLDI0KSxuZXcgV2UobmV3IEd0KDI0NDc4OTIsNDMyMjUsT2UuVEFJKSwyNSksbmV3IFdlKG5ldyBHdCgyNDQ4MjU3LDQzMjI2LE9lLlRBSSksMjYpLG5ldyBXZShuZXcgR3QoMjQ0ODgwNCw0MzIyNyxPZS5UQUkpLDI3KSxuZXcgV2UobmV3IEd0KDI0NDkxNjksNDMyMjgsT2UuVEFJKSwyOCksbmV3IFdlKG5ldyBHdCgyNDQ5NTM0LDQzMjI5LE9lLlRBSSksMjkpLG5ldyBXZShuZXcgR3QoMjQ1MDA4Myw0MzIzMCxPZS5UQUkpLDMwKSxuZXcgV2UobmV3IEd0KDI0NTA2MzAsNDMyMzEsT2UuVEFJKSwzMSksbmV3IFdlKG5ldyBHdCgyNDUxMTc5LDQzMjMyLE9lLlRBSSksMzIpLG5ldyBXZShuZXcgR3QoMjQ1MzczNiw0MzIzMyxPZS5UQUkpLDMzKSxuZXcgV2UobmV3IEd0KDI0NTQ4MzIsNDMyMzQsT2UuVEFJKSwzNCksbmV3IFdlKG5ldyBHdCgyNDU2MTA5LDQzMjM1LE9lLlRBSSksMzUpLG5ldyBXZShuZXcgR3QoMjQ1NzIwNCw0MzIzNixPZS5UQUkpLDM2KSxuZXcgV2UobmV3IEd0KDI0NTc3NTQsNDMyMzcsT2UuVEFJKSwzNyldO0duPUd0fSk7dmFyIEkxPVhuKChXYyxYYyk9PnsvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqLyhmdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgV2M9PSJvYmplY3QiJiZXYyYmIVdjLm5vZGVUeXBlJiZXYyxuPXR5cGVvZiBYYz09Im9iamVjdCImJlhjJiYhWGMubm9kZVR5cGUmJlhjLG89dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbDsoby5nbG9iYWw9PT1vfHxvLndpbmRvdz09PW98fG8uc2VsZj09PW8pJiYodD1vKTt2YXIgcixpPTIxNDc0ODM2NDcscz0zNixmPTEsdT0yNixjPTM4LGw9NzAwLHA9NzIsZD0xMjgsbT0iLSIsXz0vXnhuLS0vLGc9L1teXHgyMC1ceDdFXS8sYj0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csVD17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sTz1zLWYsRT1NYXRoLmZsb29yLHc9U3RyaW5nLmZyb21DaGFyQ29kZSxDO2Z1bmN0aW9uIE0oayl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoVFtrXSl9ZnVuY3Rpb24gTihrLHEpe2Zvcih2YXIgVz1rLmxlbmd0aCxSPVtdO1ctLTspUltXXT1xKGtbV10pO3JldHVybiBSfWZ1bmN0aW9uIEYoayxxKXt2YXIgVz1rLnNwbGl0KCJAIiksUj0iIjtXLmxlbmd0aD4xJiYoUj1XWzBdKyJAIixrPVdbMV0pLGs9ay5yZXBsYWNlKGIsIi4iKTt2YXIgbnQ9ay5zcGxpdCgiLiIpLGN0PU4obnQscSkuam9pbigiLiIpO3JldHVybiBSK2N0fWZ1bmN0aW9uIEkoayl7Zm9yKHZhciBxPVtdLFc9MCxSPWsubGVuZ3RoLG50LGN0O1c8UjspbnQ9ay5jaGFyQ29kZUF0KFcrKyksbnQ+PTU1Mjk2JiZudDw9NTYzMTkmJlc8Uj8oY3Q9ay5jaGFyQ29kZUF0KFcrKyksKGN0JjY0NTEyKT09NTYzMjA/cS5wdXNoKCgobnQmMTAyMyk8PDEwKSsoY3QmMTAyMykrNjU1MzYpOihxLnB1c2gobnQpLFctLSkpOnEucHVzaChudCk7cmV0dXJuIHF9ZnVuY3Rpb24gdihrKXtyZXR1cm4gTihrLGZ1bmN0aW9uKHEpe3ZhciBXPSIiO3JldHVybiBxPjY1NTM1JiYocS09NjU1MzYsVys9dyhxPj4+MTAmMTAyM3w1NTI5NikscT01NjMyMHxxJjEwMjMpLFcrPXcocSksV30pLmpvaW4oIiIpfWZ1bmN0aW9uIEIoayl7cmV0dXJuIGstNDg8MTA/ay0yMjprLTY1PDI2P2stNjU6ay05NzwyNj9rLTk3OnN9ZnVuY3Rpb24gQShrLHEpe3JldHVybiBrKzIyKzc1KihrPDI2KS0oKHEhPTApPDw1KX1mdW5jdGlvbiBTKGsscSxXKXt2YXIgUj0wO2ZvcihrPVc/RShrL2wpOms+PjEsays9RShrL3EpO2s+Typ1Pj4xO1IrPXMpaz1FKGsvTyk7cmV0dXJuIEUoUisoTysxKSprLyhrK2MpKX1mdW5jdGlvbiB4KGspe3ZhciBxPVtdLFc9ay5sZW5ndGgsUixudD0wLGN0PWQsbHQ9cCxfdCxvdCx4dCx5dCxTdCxkdCxmdCxJdCxWdDtmb3IoX3Q9ay5sYXN0SW5kZXhPZihtKSxfdDwwJiYoX3Q9MCksb3Q9MDtvdDxfdDsrK290KWsuY2hhckNvZGVBdChvdCk+PTEyOCYmTSgibm90LWJhc2ljIikscS5wdXNoKGsuY2hhckNvZGVBdChvdCkpO2Zvcih4dD1fdD4wP190KzE6MDt4dDxXOyl7Zm9yKHl0PW50LFN0PTEsZHQ9czt4dD49VyYmTSgiaW52YWxpZC1pbnB1dCIpLGZ0PUIoay5jaGFyQ29kZUF0KHh0KyspKSwoZnQ+PXN8fGZ0PkUoKGktbnQpL1N0KSkmJk0oIm92ZXJmbG93IiksbnQrPWZ0KlN0LEl0PWR0PD1sdD9mOmR0Pj1sdCt1P3U6ZHQtbHQsIShmdDxJdCk7ZHQrPXMpVnQ9cy1JdCxTdD5FKGkvVnQpJiZNKCJvdmVyZmxvdyIpLFN0Kj1WdDtSPXEubGVuZ3RoKzEsbHQ9UyhudC15dCxSLHl0PT0wKSxFKG50L1IpPmktY3QmJk0oIm92ZXJmbG93IiksY3QrPUUobnQvUiksbnQlPVIscS5zcGxpY2UobnQrKywwLGN0KX1yZXR1cm4gdihxKX1mdW5jdGlvbiBEKGspe3ZhciBxLFcsUixudCxjdCxsdCxfdCxvdCx4dCx5dCxTdCxkdD1bXSxmdCxJdCxWdCxkZTtmb3Ioaz1JKGspLGZ0PWsubGVuZ3RoLHE9ZCxXPTAsY3Q9cCxsdD0wO2x0PGZ0OysrbHQpU3Q9a1tsdF0sU3Q8MTI4JiZkdC5wdXNoKHcoU3QpKTtmb3IoUj1udD1kdC5sZW5ndGgsbnQmJmR0LnB1c2gobSk7UjxmdDspe2ZvcihfdD1pLGx0PTA7bHQ8ZnQ7KytsdClTdD1rW2x0XSxTdD49cSYmU3Q8X3QmJihfdD1TdCk7Zm9yKEl0PVIrMSxfdC1xPkUoKGktVykvSXQpJiZNKCJvdmVyZmxvdyIpLFcrPShfdC1xKSpJdCxxPV90LGx0PTA7bHQ8ZnQ7KytsdClpZihTdD1rW2x0XSxTdDxxJiYrK1c+aSYmTSgib3ZlcmZsb3ciKSxTdD09cSl7Zm9yKG90PVcseHQ9czt5dD14dDw9Y3Q/Zjp4dD49Y3QrdT91Onh0LWN0LCEob3Q8eXQpO3h0Kz1zKWRlPW90LXl0LFZ0PXMteXQsZHQucHVzaCh3KEEoeXQrZGUlVnQsMCkpKSxvdD1FKGRlL1Z0KTtkdC5wdXNoKHcoQShvdCwwKSkpLGN0PVMoVyxJdCxSPT1udCksVz0wLCsrUn0rK1csKytxfXJldHVybiBkdC5qb2luKCIiKX1mdW5jdGlvbiB6KGspe3JldHVybiBGKGssZnVuY3Rpb24ocSl7cmV0dXJuIF8udGVzdChxKT94KHEuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6cX0pfWZ1bmN0aW9uIGooayl7cmV0dXJuIEYoayxmdW5jdGlvbihxKXtyZXR1cm4gZy50ZXN0KHEpPyJ4bi0tIitEKHEpOnF9KX1pZihyPXt2ZXJzaW9uOiIxLjMuMiIsdWNzMjp7ZGVjb2RlOkksZW5jb2RlOnZ9LGRlY29kZTp4LGVuY29kZTpELHRvQVNDSUk6aix0b1VuaWNvZGU6en0sdHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kKWRlZmluZSgicHVueWNvZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTtlbHNlIGlmKGUmJm4paWYoWGMuZXhwb3J0cz09ZSluLmV4cG9ydHM9cjtlbHNlIGZvcihDIGluIHIpci5oYXNPd25Qcm9wZXJ0eShDKSYmKGVbQ109cltDXSk7ZWxzZSB0LnB1bnljb2RlPXJ9KShXYyl9KTt2YXIgRjE9WG4oKHYxLGVwKT0+ey8qIQogKiBVUkkuanMgLSBNdXRhdGluZyBVUkxzCiAqIElQdjYgU3VwcG9ydAogKgogKiBWZXJzaW9uOiAxLjE5LjExCiAqCiAqIEF1dGhvcjogUm9kbmV5IFJlaG0KICogV2ViOiBodHRwOi8vbWVkaWFsaXplLmdpdGh1Yi5pby9VUkkuanMvCiAqCiAqIExpY2Vuc2VkIHVuZGVyCiAqICAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZQogKgogKi8oZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dHlwZW9mIGVwPT0ib2JqZWN0IiYmZXAuZXhwb3J0cz9lcC5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKTp0LklQdjY9ZSh0KX0pKHYxLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT10JiZ0LklQdjY7ZnVuY3Rpb24gbihyKXt2YXIgaT1yLnRvTG93ZXJDYXNlKCkscz1pLnNwbGl0KCI6IiksZj1zLmxlbmd0aCx1PTg7c1swXT09PSIiJiZzWzFdPT09IiImJnNbMl09PT0iIj8ocy5zaGlmdCgpLHMuc2hpZnQoKSk6c1swXT09PSIiJiZzWzFdPT09IiI/cy5zaGlmdCgpOnNbZi0xXT09PSIiJiZzW2YtMl09PT0iIiYmcy5wb3AoKSxmPXMubGVuZ3RoLHNbZi0xXS5pbmRleE9mKCIuIikhPT0tMSYmKHU9Nyk7dmFyIGM7Zm9yKGM9MDtjPGYmJnNbY10hPT0iIjtjKyspO2lmKGM8dSlmb3Iocy5zcGxpY2UoYywxLCIwMDAwIik7cy5sZW5ndGg8dTspcy5zcGxpY2UoYywwLCIwMDAwIik7Zm9yKHZhciBsLHA9MDtwPHU7cCsrKXtsPXNbcF0uc3BsaXQoIiIpO2Zvcih2YXIgZD0wO2Q8MyYmKGxbMF09PT0iMCImJmwubGVuZ3RoPjEpO2QrKylsLnNwbGljZSgwLDEpO3NbcF09bC5qb2luKCIiKX12YXIgbT0tMSxfPTAsZz0wLGI9LTEsVD0hMTtmb3IocD0wO3A8dTtwKyspVD9zW3BdPT09IjAiP2crPTE6KFQ9ITEsZz5fJiYobT1iLF89ZykpOnNbcF09PT0iMCImJihUPSEwLGI9cCxnPTEpO2c+XyYmKG09YixfPWcpLF8+MSYmcy5zcGxpY2UobSxfLCIiKSxmPXMubGVuZ3RoO3ZhciBPPSIiO2ZvcihzWzBdPT09IiImJihPPSI6IikscD0wO3A8ZiYmKE8rPXNbcF0scCE9PWYtMSk7cCsrKU8rPSI6IjtyZXR1cm4gc1tmLTFdPT09IiImJihPKz0iOiIpLE99ZnVuY3Rpb24gbygpe3JldHVybiB0LklQdjY9PT10aGlzJiYodC5JUHY2PWUpLHRoaXN9cmV0dXJue2Jlc3Q6bixub0NvbmZsaWN0Om99fSl9KTt2YXIgRDE9WG4oKEwxLG5wKT0+ey8qIQogKiBVUkkuanMgLSBNdXRhdGluZyBVUkxzCiAqIFNlY29uZCBMZXZlbCBEb21haW4gKFNMRCkgU3VwcG9ydAogKgogKiBWZXJzaW9uOiAxLjE5LjExCiAqCiAqIEF1dGhvcjogUm9kbmV5IFJlaG0KICogV2ViOiBodHRwOi8vbWVkaWFsaXplLmdpdGh1Yi5pby9VUkkuanMvCiAqCiAqIExpY2Vuc2VkIHVuZGVyCiAqICAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZQogKgogKi8oZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dHlwZW9mIG5wPT0ib2JqZWN0IiYmbnAuZXhwb3J0cz9ucC5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKTp0LlNlY29uZExldmVsRG9tYWlucz1lKHQpfSkoTDEsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPXQmJnQuU2Vjb25kTGV2ZWxEb21haW5zLG49e2xpc3Q6e2FjOiIgY29tIGdvdiBtaWwgbmV0IG9yZyAiLGFlOiIgYWMgY28gZ292IG1pbCBuYW1lIG5ldCBvcmcgcHJvIHNjaCAiLGFmOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGFsOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixhbzoiIGNvIGVkIGd2IGl0IG9nIHBiICIsYXI6IiBjb20gZWR1IGdvYiBnb3YgaW50IG1pbCBuZXQgb3JnIHR1ciAiLGF0OiIgYWMgY28gZ3Ygb3IgIixhdToiIGFzbiBjb20gY3Npcm8gZWR1IGdvdiBpZCBuZXQgb3JnICIsYmE6IiBjbyBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyBycyB1bmJpIHVubW8gdW5zYSB1bnR6IHVuemUgIixiYjoiIGJpeiBjbyBjb20gZWR1IGdvdiBpbmZvIG5ldCBvcmcgc3RvcmUgdHYgIixiaDoiIGJpeiBjYyBjb20gZWR1IGdvdiBpbmZvIG5ldCBvcmcgIixibjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixibzoiIGNvbSBlZHUgZ29iIGdvdiBpbnQgbWlsIG5ldCBvcmcgdHYgIixicjoiIGFkbSBhZHYgYWdyIGFtIGFycSBhcnQgYXRvIGIgYmlvIGJsb2cgYm1kIGNpbSBjbmcgY250IGNvbSBjb29wIGVjbiBlZHUgZW5nIGVzcCBldGMgZXRpIGZhciBmbG9nIGZtIGZuZCBmb3QgZnN0IGcxMiBnZ2YgZ292IGltYiBpbmQgaW5mIGpvciBqdXMgbGVsIG1hdCBtZWQgbWlsIG11cyBuZXQgbm9tIG5vdCBudHIgb2RvIG9yZyBwcGcgcHJvIHBzYyBwc2kgcXNsIHJlYyBzbGcgc3J2IHRtcCB0cmQgdHVyIHR2IHZldCB2bG9nIHdpa2kgemxnICIsYnM6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsYno6IiBkdSBldCBvbSBvdiByZyAiLGNhOiIgYWIgYmMgbWIgbmIgbmYgbmwgbnMgbnQgbnUgb24gcGUgcWMgc2sgeWsgIixjazoiIGJpeiBjbyBlZHUgZ2VuIGdvdiBpbmZvIG5ldCBvcmcgIixjbjoiIGFjIGFoIGJqIGNvbSBjcSBlZHUgZmogZ2QgZ292IGdzIGd4IGd6IGhhIGhiIGhlIGhpIGhsIGhuIGpsIGpzIGp4IGxuIG1pbCBuZXQgbm0gbnggb3JnIHFoIHNjIHNkIHNoIHNuIHN4IHRqIHR3IHhqIHh6IHluIHpqICIsY286IiBjb20gZWR1IGdvdiBtaWwgbmV0IG5vbSBvcmcgIixjcjoiIGFjIGMgY28gZWQgZmkgZ28gb3Igc2EgIixjeToiIGFjIGJpeiBjb20gZWtsb2dlcyBnb3YgbHRkIG5hbWUgbmV0IG9yZyBwYXJsaWFtZW50IHByZXNzIHBybyB0bSAiLGRvOiIgYXJ0IGNvbSBlZHUgZ29iIGdvdiBtaWwgbmV0IG9yZyBzbGQgd2ViICIsZHo6IiBhcnQgYXNzbyBjb20gZWR1IGdvdiBuZXQgb3JnIHBvbCAiLGVjOiIgY29tIGVkdSBmaW4gZ292IGluZm8gbWVkIG1pbCBuZXQgb3JnIHBybyAiLGVnOiIgY29tIGVkdSBldW4gZ292IG1pbCBuYW1lIG5ldCBvcmcgc2NpICIsZXI6IiBjb20gZWR1IGdvdiBpbmQgbWlsIG5ldCBvcmcgcm9jaGVzdCB3ICIsZXM6IiBjb20gZWR1IGdvYiBub20gb3JnICIsZXQ6IiBiaXogY29tIGVkdSBnb3YgaW5mbyBuYW1lIG5ldCBvcmcgIixmajoiIGFjIGJpeiBjb20gaW5mbyBtaWwgbmFtZSBuZXQgb3JnIHBybyAiLGZrOiIgYWMgY28gZ292IG5ldCBub20gb3JnICIsZnI6IiBhc3NvIGNvbSBmIGdvdXYgbm9tIHByZCBwcmVzc2UgdG0gIixnZzoiIGNvIG5ldCBvcmcgIixnaDoiIGNvbSBlZHUgZ292IG1pbCBvcmcgIixnbjoiIGFjIGNvbSBnb3YgbmV0IG9yZyAiLGdyOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixndDoiIGNvbSBlZHUgZ29iIGluZCBtaWwgbmV0IG9yZyAiLGd1OiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGhrOiIgY29tIGVkdSBnb3YgaWR2IG5ldCBvcmcgIixodToiIDIwMDAgYWdyYXIgYm9sdCBjYXNpbm8gY2l0eSBjbyBlcm90aWNhIGVyb3Rpa2EgZmlsbSBmb3J1bSBnYW1lcyBob3RlbCBpbmZvIGluZ2F0bGFuIGpvZ2FzeiBrb255dmVsbyBsYWthcyBtZWRpYSBuZXdzIG9yZyBwcml2IHJla2xhbSBzZXggc2hvcCBzcG9ydCBzdWxpIHN6ZXggdG0gdG96c2RlIHV0YXphcyB2aWRlbyAiLGlkOiIgYWMgY28gZ28gbWlsIG5ldCBvciBzY2ggd2ViICIsaWw6IiBhYyBjbyBnb3YgaWRmIGsxMiBtdW5pIG5ldCBvcmcgIixpbjoiIGFjIGNvIGVkdSBlcm5ldCBmaXJtIGdlbiBnb3YgaSBpbmQgbWlsIG5ldCBuaWMgb3JnIHJlcyAiLGlxOiIgY29tIGVkdSBnb3YgaSBtaWwgbmV0IG9yZyAiLGlyOiIgYWMgY28gZG5zc2VjIGdvdiBpIGlkIG5ldCBvcmcgc2NoICIsaXQ6IiBlZHUgZ292ICIsamU6IiBjbyBuZXQgb3JnICIsam86IiBjb20gZWR1IGdvdiBtaWwgbmFtZSBuZXQgb3JnIHNjaCAiLGpwOiIgYWMgYWQgY28gZWQgZ28gZ3IgbGcgbmUgb3IgIixrZToiIGFjIGNvIGdvIGluZm8gbWUgbW9iaSBuZSBvciBzYyAiLGtoOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgcGVyICIsa2k6IiBiaXogY29tIGRlIGVkdSBnb3YgaW5mbyBtb2IgbmV0IG9yZyB0ZWwgIixrbToiIGFzc28gY29tIGNvb3AgZWR1IGdvdXYgayBtZWRlY2luIG1pbCBub20gbm90YWlyZXMgcGhhcm1hY2llbnMgcHJlc3NlIHRtIHZldGVyaW5haXJlICIsa246IiBlZHUgZ292IG5ldCBvcmcgIixrcjoiIGFjIGJ1c2FuIGNodW5nYnVrIGNodW5nbmFtIGNvIGRhZWd1IGRhZWplb24gZXMgZ2FuZ3dvbiBnbyBnd2FuZ2p1IGd5ZW9uZ2J1ayBneWVvbmdnaSBneWVvbmduYW0gaHMgaW5jaGVvbiBqZWp1IGplb25idWsgamVvbm5hbSBrIGtnIG1pbCBtcyBuZSBvciBwZSByZSBzYyBzZW91bCB1bHNhbiAiLGt3OiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGt5OiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGt6OiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixsYjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixsazoiIGFzc24gY29tIGVkdSBnb3YgZ3JwIGhvdGVsIGludCBsdGQgbmV0IG5nbyBvcmcgc2NoIHNvYyB3ZWIgIixscjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixsdjoiIGFzbiBjb20gY29uZiBlZHUgZ292IGlkIG1pbCBuZXQgb3JnICIsbHk6IiBjb20gZWR1IGdvdiBpZCBtZWQgbmV0IG9yZyBwbGMgc2NoICIsbWE6IiBhYyBjbyBnb3YgbSBuZXQgb3JnIHByZXNzICIsbWM6IiBhc3NvIHRtICIsbWU6IiBhYyBjbyBlZHUgZ292IGl0cyBuZXQgb3JnIHByaXYgIixtZzoiIGNvbSBlZHUgZ292IG1pbCBub20gb3JnIHByZCB0bSAiLG1rOiIgY29tIGVkdSBnb3YgaW5mIG5hbWUgbmV0IG9yZyBwcm8gIixtbDoiIGNvbSBlZHUgZ292IG5ldCBvcmcgcHJlc3NlICIsbW46IiBlZHUgZ292IG9yZyAiLG1vOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLG10OiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLG12OiIgYWVybyBiaXogY29tIGNvb3AgZWR1IGdvdiBpbmZvIGludCBtaWwgbXVzZXVtIG5hbWUgbmV0IG9yZyBwcm8gIixtdzoiIGFjIGNvIGNvbSBjb29wIGVkdSBnb3YgaW50IG11c2V1bSBuZXQgb3JnICIsbXg6IiBjb20gZWR1IGdvYiBuZXQgb3JnICIsbXk6IiBjb20gZWR1IGdvdiBtaWwgbmFtZSBuZXQgb3JnIHNjaCAiLG5mOiIgYXJ0cyBjb20gZmlybSBpbmZvIG5ldCBvdGhlciBwZXIgcmVjIHN0b3JlIHdlYiAiLG5nOiIgYml6IGNvbSBlZHUgZ292IG1pbCBtb2JpIG5hbWUgbmV0IG9yZyBzY2ggIixuaToiIGFjIGNvIGNvbSBlZHUgZ29iIG1pbCBuZXQgbm9tIG9yZyAiLG5wOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixucjoiIGJpeiBjb20gZWR1IGdvdiBpbmZvIG5ldCBvcmcgIixvbToiIGFjIGJpeiBjbyBjb20gZWR1IGdvdiBtZWQgbWlsIG11c2V1bSBuZXQgb3JnIHBybyBzY2ggIixwZToiIGNvbSBlZHUgZ29iIG1pbCBuZXQgbm9tIG9yZyBzbGQgIixwaDoiIGNvbSBlZHUgZ292IGkgbWlsIG5ldCBuZ28gb3JnICIscGs6IiBiaXogY29tIGVkdSBmYW0gZ29iIGdvayBnb24gZ29wIGdvcyBnb3YgbmV0IG9yZyB3ZWIgIixwbDoiIGFydCBiaWFseXN0b2sgYml6IGNvbSBlZHUgZ2RhIGdkYW5zayBnb3J6b3cgZ292IGluZm8ga2F0b3dpY2Uga3Jha293IGxvZHogbHVibGluIG1pbCBuZXQgbmdvIG9sc3p0eW4gb3JnIHBvem5hbiBwd3IgcmFkb20gc2x1cHNrIHN6Y3plY2luIHRvcnVuIHdhcnN6YXdhIHdhdyB3cm9jIHdyb2NsYXcgemdvcmEgIixwcjoiIGFjIGJpeiBjb20gZWR1IGVzdCBnb3YgaW5mbyBpc2xhIG5hbWUgbmV0IG9yZyBwcm8gcHJvZiAiLHBzOiIgY29tIGVkdSBnb3YgbmV0IG9yZyBwbG8gc2VjICIscHc6IiBiZWxhdSBjbyBlZCBnbyBuZSBvciAiLHJvOiIgYXJ0cyBjb20gZmlybSBpbmZvIG5vbSBudCBvcmcgcmVjIHN0b3JlIHRtIHd3dyAiLHJzOiIgYWMgY28gZWR1IGdvdiBpbiBvcmcgIixzYjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixzYzoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixzaDoiIGNvIGNvbSBlZHUgZ292IG5ldCBub20gb3JnICIsc2w6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsc3Q6IiBjbyBjb20gY29uc3VsYWRvIGVkdSBlbWJhaXhhZGEgZ292IG1pbCBuZXQgb3JnIHByaW5jaXBlIHNhb3RvbWUgc3RvcmUgIixzdjoiIGNvbSBlZHUgZ29iIG9yZyByZWQgIixzejoiIGFjIGNvIG9yZyAiLHRyOiIgYXYgYmJzIGJlbCBiaXogY29tIGRyIGVkdSBnZW4gZ292IGluZm8gazEyIG5hbWUgbmV0IG9yZyBwb2wgdGVsIHRzayB0diB3ZWIgIix0dDoiIGFlcm8gYml6IGNhdCBjbyBjb20gY29vcCBlZHUgZ292IGluZm8gaW50IGpvYnMgbWlsIG1vYmkgbXVzZXVtIG5hbWUgbmV0IG9yZyBwcm8gdGVsIHRyYXZlbCAiLHR3OiIgY2x1YiBjb20gZWJpeiBlZHUgZ2FtZSBnb3YgaWR2IG1pbCBuZXQgb3JnICIsbXU6IiBhYyBjbyBjb20gZ292IG5ldCBvciBvcmcgIixtejoiIGFjIGNvIGVkdSBnb3Ygb3JnICIsbmE6IiBjbyBjb20gIixuejoiIGFjIGNvIGNyaSBnZWVrIGdlbiBnb3Z0IGhlYWx0aCBpd2kgbWFvcmkgbWlsIG5ldCBvcmcgcGFybGlhbWVudCBzY2hvb2wgIixwYToiIGFibyBhYyBjb20gZWR1IGdvYiBpbmcgbWVkIG5ldCBub20gb3JnIHNsZCAiLHB0OiIgY29tIGVkdSBnb3YgaW50IG5ldCBub21lIG9yZyBwdWJsICIscHk6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLHFhOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixyZToiIGFzc28gY29tIG5vbSAiLHJ1OiIgYWMgYWR5Z2V5YSBhbHRhaSBhbXVyIGFya2hhbmdlbHNrIGFzdHJha2hhbiBiYXNoa2lyaWEgYmVsZ29yb2QgYmlyIGJyeWFuc2sgYnVyeWF0aWEgY2JnIGNoZWwgY2hlbHlhYmluc2sgY2hpdGEgY2h1a290a2EgY2h1dmFzaGlhIGNvbSBkYWdlc3RhbiBlLWJ1cmcgZWR1IGdvdiBncm96bnkgaW50IGlya3V0c2sgaXZhbm92byBpemhldnNrIGphciBqb3Noa2FyLW9sYSBrYWxteWtpYSBrYWx1Z2Ega2FtY2hhdGthIGthcmVsaWEga2F6YW4ga2NociBrZW1lcm92byBraGFiYXJvdnNrIGtoYWthc3NpYSBraHYga2lyb3Yga29lbmlnIGtvbWkga29zdHJvbWEga3Jhbm95YXJzayBrdWJhbiBrdXJnYW4ga3Vyc2sgbGlwZXRzayBtYWdhZGFuIG1hcmkgbWFyaS1lbCBtYXJpbmUgbWlsIG1vcmRvdmlhIG1vc3JlZyBtc2sgbXVybWFuc2sgbmFsY2hpayBuZXQgbm5vdiBub3Ygbm92b3NpYmlyc2sgbnNrIG9tc2sgb3JlbmJ1cmcgb3JnIG9yeW9sIHBlbnphIHBlcm0gcHAgcHNrb3YgcHR6IHJuZCByeWF6YW4gc2FraGFsaW4gc2FtYXJhIHNhcmF0b3Ygc2ltYmlyc2sgc21vbGVuc2sgc3BiIHN0YXZyb3BvbCBzdHYgc3VyZ3V0IHRhbWJvdiB0YXRhcnN0YW4gdG9tIHRvbXNrIHRzYXJpdHN5biB0c2sgdHVsYSB0dXZhIHR2ZXIgdHl1bWVuIHVkbSB1ZG11cnRpYSB1bGFuLXVkZSB2bGFkaWthdmtheiB2bGFkaW1pciB2bGFkaXZvc3RvayB2b2xnb2dyYWQgdm9sb2dkYSB2b3JvbmV6aCB2cm4gdnlhdGthIHlha3V0aWEgeWFtYWwgeWVrYXRlcmluYnVyZyB5dXpobm8tc2FraGFsaW5zayAiLHJ3OiIgYWMgY28gY29tIGVkdSBnb3V2IGdvdiBpbnQgbWlsIG5ldCAiLHNhOiIgY29tIGVkdSBnb3YgbWVkIG5ldCBvcmcgcHViIHNjaCAiLHNkOiIgY29tIGVkdSBnb3YgaW5mbyBtZWQgbmV0IG9yZyB0diAiLHNlOiIgYSBhYyBiIGJkIGMgZCBlIGYgZyBoIGkgayBsIG0gbiBvIG9yZyBwIHBhcnRpIHBwIHByZXNzIHIgcyB0IHRtIHUgdyB4IHkgeiAiLHNnOiIgY29tIGVkdSBnb3YgaWRuIG5ldCBvcmcgcGVyICIsc246IiBhcnQgY29tIGVkdSBnb3V2IG9yZyBwZXJzbyB1bml2ICIsc3k6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG5ld3Mgb3JnICIsdGg6IiBhYyBjbyBnbyBpbiBtaSBuZXQgb3IgIix0ajoiIGFjIGJpeiBjbyBjb20gZWR1IGdvIGdvdiBpbmZvIGludCBtaWwgbmFtZSBuZXQgbmljIG9yZyB0ZXN0IHdlYiAiLHRuOiIgYWdyaW5ldCBjb20gZGVmZW5zZSBlZHVuZXQgZW5zIGZpbiBnb3YgaW5kIGluZm8gaW50bCBtaW5jb20gbmF0IG5ldCBvcmcgcGVyc28gcm5ydCBybnMgcm51IHRvdXJpc20gIix0ejoiIGFjIGNvIGdvIG5lIG9yICIsdWE6IiBiaXogY2hlcmthc3N5IGNoZXJuaWdvdiBjaGVybm92dHN5IGNrIGNuIGNvIGNvbSBjcmltZWEgY3YgZG4gZG5lcHJvcGV0cm92c2sgZG9uZXRzayBkcCBlZHUgZ292IGlmIGluIGl2YW5vLWZyYW5raXZzayBraCBraGFya292IGtoZXJzb24ga2htZWxuaXRza2l5IGtpZXYga2lyb3ZvZ3JhZCBrbSBrciBrcyBrdiBsZyBsdWdhbnNrIGx1dHNrIGx2aXYgbWUgbWsgbmV0IG5pa29sYWV2IG9kIG9kZXNzYSBvcmcgcGwgcG9sdGF2YSBwcCByb3ZubyBydiBzZWJhc3RvcG9sIHN1bXkgdGUgdGVybm9waWwgdXpoZ29yb2QgdmlubmljYSB2biB6YXBvcml6aHpoZSB6aGl0b21pciB6cCB6dCAiLHVnOiIgYWMgY28gZ28gbmUgb3Igb3JnIHNjICIsdWs6IiBhYyBibCBicml0aXNoLWxpYnJhcnkgY28gY3ltIGdvdiBnb3Z0IGljbmV0IGpldCBsZWEgbHRkIG1lIG1pbCBtb2QgbmF0aW9uYWwtbGlicmFyeS1zY290bGFuZCBuZWwgbmV0IG5ocyBuaWMgbmxzIG9yZyBvcmduIHBhcmxpYW1lbnQgcGxjIHBvbGljZSBzY2ggc2NvdCBzb2MgIix1czoiIGRuaSBmZWQgaXNhIGtpZHMgbnNuICIsdXk6IiBjb20gZWR1IGd1YiBtaWwgbmV0IG9yZyAiLHZlOiIgY28gY29tIGVkdSBnb2IgaW5mbyBtaWwgbmV0IG9yZyB3ZWIgIix2aToiIGNvIGNvbSBrMTIgbmV0IG9yZyAiLHZuOiIgYWMgYml6IGNvbSBlZHUgZ292IGhlYWx0aCBpbmZvIGludCBuYW1lIG5ldCBvcmcgcHJvICIseWU6IiBjbyBjb20gZ292IGx0ZCBtZSBuZXQgb3JnIHBsYyAiLHl1OiIgYWMgY28gZWR1IGdvdiBvcmcgIix6YToiIGFjIGFncmljIGFsdCBib3Vyc2UgY2l0eSBjbyBjeWJlcm5ldCBkYiBlZHUgZ292IGdyb25kYXIgaWFjY2VzcyBpbXQgaW5jYSBsYW5kZXNpZ24gbGF3IG1pbCBuZXQgbmdvIG5pcyBub20gb2xpdmV0dGkgb3JnIHBpeCBzY2hvb2wgdG0gd2ViICIsem06IiBhYyBjbyBjb20gZWR1IGdvdiBuZXQgb3JnIHNjaCAiLGNvbToiYXIgYnIgY24gZGUgZXUgZ2IgZ3IgaHUganBuIGtyIG5vIHFjIHJ1IHNhIHNlIHVrIHVzIHV5IHphICIsbmV0OiJnYiBqcCBzZSB1ayAiLG9yZzoiYWUiLGRlOiJjb20gIn0saGFzOmZ1bmN0aW9uKG8pe3ZhciByPW8ubGFzdEluZGV4T2YoIi4iKTtpZihyPD0wfHxyPj1vLmxlbmd0aC0xKXJldHVybiExO3ZhciBpPW8ubGFzdEluZGV4T2YoIi4iLHItMSk7aWYoaTw9MHx8aT49ci0xKXJldHVybiExO3ZhciBzPW4ubGlzdFtvLnNsaWNlKHIrMSldO3JldHVybiBzP3MuaW5kZXhPZigiICIrby5zbGljZShpKzEscikrIiAiKT49MDohMX0saXM6ZnVuY3Rpb24obyl7dmFyIHI9by5sYXN0SW5kZXhPZigiLiIpO2lmKHI8PTB8fHI+PW8ubGVuZ3RoLTEpcmV0dXJuITE7dmFyIGk9by5sYXN0SW5kZXhPZigiLiIsci0xKTtpZihpPj0wKXJldHVybiExO3ZhciBzPW4ubGlzdFtvLnNsaWNlKHIrMSldO3JldHVybiBzP3MuaW5kZXhPZigiICIrby5zbGljZSgwLHIpKyIgIik+PTA6ITF9LGdldDpmdW5jdGlvbihvKXt2YXIgcj1vLmxhc3RJbmRleE9mKCIuIik7aWYocjw9MHx8cj49by5sZW5ndGgtMSlyZXR1cm4gbnVsbDt2YXIgaT1vLmxhc3RJbmRleE9mKCIuIixyLTEpO2lmKGk8PTB8fGk+PXItMSlyZXR1cm4gbnVsbDt2YXIgcz1uLmxpc3Rbby5zbGljZShyKzEpXTtyZXR1cm4hc3x8cy5pbmRleE9mKCIgIitvLnNsaWNlKGkrMSxyKSsiICIpPDA/bnVsbDpvLnNsaWNlKGkrMSl9LG5vQ29uZmxpY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdC5TZWNvbmRMZXZlbERvbWFpbnM9PT10aGlzJiYodC5TZWNvbmRMZXZlbERvbWFpbnM9ZSksdGhpc319O3JldHVybiBufSl9KTt2YXIgenM9WG4oKEIxLG9wKT0+ey8qIQogKiBVUkkuanMgLSBNdXRhdGluZyBVUkxzCiAqCiAqIFZlcnNpb246IDEuMTkuMTEKICoKICogQXV0aG9yOiBSb2RuZXkgUmVobQogKiBXZWI6IGh0dHA6Ly9tZWRpYWxpemUuZ2l0aHViLmlvL1VSSS5qcy8KICoKICogTGljZW5zZWQgdW5kZXIKICogICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlCiAqCiAqLyhmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2Ygb3A9PSJvYmplY3QiJiZvcC5leHBvcnRzP29wLmV4cG9ydHM9ZShJMSgpLEYxKCksRDEoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyIuL3B1bnljb2RlIiwiLi9JUHY2IiwiLi9TZWNvbmRMZXZlbERvbWFpbnMiXSxlKTp0LlVSST1lKHQucHVueWNvZGUsdC5JUHY2LHQuU2Vjb25kTGV2ZWxEb21haW5zLHQpfSkoQjEsZnVuY3Rpb24odCxlLG4sbyl7InVzZSBzdHJpY3QiO3ZhciByPW8mJm8uVVJJO2Z1bmN0aW9uIGkoQSxTKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPj0xLEQ9YXJndW1lbnRzLmxlbmd0aD49MjtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4geD9EP25ldyBpKEEsUyk6bmV3IGkoQSk6bmV3IGk7aWYoQT09PXZvaWQgMCl7aWYoeCl0aHJvdyBuZXcgVHlwZUVycm9yKCJ1bmRlZmluZWQgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9yIFVSSSIpO3R5cGVvZiBsb2NhdGlvbjwidSI/QT1sb2NhdGlvbi5ocmVmKyIiOkE9IiJ9aWYoQT09PW51bGwmJngpdGhyb3cgbmV3IFR5cGVFcnJvcigibnVsbCBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCBmb3IgVVJJIik7cmV0dXJuIHRoaXMuaHJlZihBKSxTIT09dm9pZCAwP3RoaXMuYWJzb2x1dGVUbyhTKTp0aGlzfWZ1bmN0aW9uIHMoQSl7cmV0dXJuL15bMC05XSskLy50ZXN0KEEpfWkudmVyc2lvbj0iMS4xOS4xMSI7dmFyIGY9aS5wcm90b3R5cGUsdT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGMoQSl7cmV0dXJuIEEucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFtcXVwvXFxdKS9nLCJcXCQxIil9ZnVuY3Rpb24gbChBKXtyZXR1cm4gQT09PXZvaWQgMD8iVW5kZWZpbmVkIjpTdHJpbmcoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEEpKS5zbGljZSg4LC0xKX1mdW5jdGlvbiBwKEEpe3JldHVybiBsKEEpPT09IkFycmF5In1mdW5jdGlvbiBkKEEsUyl7dmFyIHg9e30sRCx6O2lmKGwoUyk9PT0iUmVnRXhwIil4PW51bGw7ZWxzZSBpZihwKFMpKWZvcihEPTAsej1TLmxlbmd0aDtEPHo7RCsrKXhbU1tEXV09ITA7ZWxzZSB4W1NdPSEwO2ZvcihEPTAsej1BLmxlbmd0aDtEPHo7RCsrKXt2YXIgaj14JiZ4W0FbRF1dIT09dm9pZCAwfHwheCYmUy50ZXN0KEFbRF0pO2omJihBLnNwbGljZShELDEpLHotLSxELS0pfXJldHVybiBBfWZ1bmN0aW9uIG0oQSxTKXt2YXIgeCxEO2lmKHAoUykpe2Zvcih4PTAsRD1TLmxlbmd0aDt4PEQ7eCsrKWlmKCFtKEEsU1t4XSkpcmV0dXJuITE7cmV0dXJuITB9dmFyIHo9bChTKTtmb3IoeD0wLEQ9QS5sZW5ndGg7eDxEO3grKylpZih6PT09IlJlZ0V4cCIpe2lmKHR5cGVvZiBBW3hdPT0ic3RyaW5nIiYmQVt4XS5tYXRjaChTKSlyZXR1cm4hMH1lbHNlIGlmKEFbeF09PT1TKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIF8oQSxTKXtpZighcChBKXx8IXAoUyl8fEEubGVuZ3RoIT09Uy5sZW5ndGgpcmV0dXJuITE7QS5zb3J0KCksUy5zb3J0KCk7Zm9yKHZhciB4PTAsRD1BLmxlbmd0aDt4PEQ7eCsrKWlmKEFbeF0hPT1TW3hdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGcoQSl7dmFyIFM9L15cLyt8XC8rJC9nO3JldHVybiBBLnJlcGxhY2UoUywiIil9aS5fcGFydHM9ZnVuY3Rpb24oKXtyZXR1cm57cHJvdG9jb2w6bnVsbCx1c2VybmFtZTpudWxsLHBhc3N3b3JkOm51bGwsaG9zdG5hbWU6bnVsbCx1cm46bnVsbCxwb3J0Om51bGwscGF0aDpudWxsLHF1ZXJ5Om51bGwsZnJhZ21lbnQ6bnVsbCxwcmV2ZW50SW52YWxpZEhvc3RuYW1lOmkucHJldmVudEludmFsaWRIb3N0bmFtZSxkdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnM6aS5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsZXNjYXBlUXVlcnlTcGFjZTppLmVzY2FwZVF1ZXJ5U3BhY2V9fSxpLnByZXZlbnRJbnZhbGlkSG9zdG5hbWU9ITEsaS5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnM9ITEsaS5lc2NhcGVRdWVyeVNwYWNlPSEwLGkucHJvdG9jb2xfZXhwcmVzc2lvbj0vXlthLXpdW2EtejAtOS4rLV0qJC9pLGkuaWRuX2V4cHJlc3Npb249L1teYS16MC05XC5fLV0vaSxpLnB1bnljb2RlX2V4cHJlc3Npb249Lyh4bi0tKS9pLGkuaXA0X2V4cHJlc3Npb249L15cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9JC8saS5pcDZfZXhwcmVzc2lvbj0vXlxzKigoKFswLTlBLUZhLWZdezEsNH06KXs3fShbMC05QS1GYS1mXXsxLDR9fDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs2fSg6WzAtOUEtRmEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezV9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezR9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsM30pfCgoOlswLTlBLUZhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXszfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezJ9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNX0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7MX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoOigoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpKSglLispP1xzKiQvLGkuZmluZF91cmlfZXhwcmVzc2lvbj0vXGIoKD86W2Etel1bXHctXSs6KD86XC97MSwzfXxbYS16MC05JV0pfHd3d1xkezAsM31bLl18W2EtejAtOS5cLV0rWy5dW2Etel17Miw0fVwvKSg/OlteXHMoKTw+XSt8XCgoW15ccygpPD5dK3woXChbXlxzKCk8Pl0rXCkpKSpcKSkrKD86XCgoW15ccygpPD5dK3woXChbXlxzKCk8Pl0rXCkpKSpcKXxbXlxzYCEoKVxbXF17fTs6JyIuLDw+P8KrwrvigJzigJ3igJjigJldKSkvaWcsaS5maW5kVXJpPXtzdGFydDovXGIoPzooW2Etel1bYS16MC05ListXSo6XC9cLyl8d3d3XC4pL2dpLGVuZDovW1xzXHJcbl18JC8sdHJpbTovW2AhKClcW1xde307OiciLiw8Pj/Cq8K74oCc4oCd4oCe4oCY4oCZXSskLyxwYXJlbnM6LyhcKFteXCldKlwpfFxbW15cXV0qXF18XHtbXn1dKlx9fDxbXj5dKj4pL2d9LGkubGVhZGluZ193aGl0ZXNwYWNlX2V4cHJlc3Npb249L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAwLVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZl0rLyxpLmFzY2lpX3RhYl93aGl0ZXNwYWNlPS9bXHUwMDA5XHUwMDBBXHUwMDBEXSsvZyxpLmRlZmF1bHRQb3J0cz17aHR0cDoiODAiLGh0dHBzOiI0NDMiLGZ0cDoiMjEiLGdvcGhlcjoiNzAiLHdzOiI4MCIsd3NzOiI0NDMifSxpLmhvc3RQcm90b2NvbHM9WyJodHRwIiwiaHR0cHMiXSxpLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycz0vW15hLXpBLVowLTlcLlwtOl9dLyxpLmRvbUF0dHJpYnV0ZXM9e2E6ImhyZWYiLGJsb2NrcXVvdGU6ImNpdGUiLGxpbms6ImhyZWYiLGJhc2U6ImhyZWYiLHNjcmlwdDoic3JjIixmb3JtOiJhY3Rpb24iLGltZzoic3JjIixhcmVhOiJocmVmIixpZnJhbWU6InNyYyIsZW1iZWQ6InNyYyIsc291cmNlOiJzcmMiLHRyYWNrOiJzcmMiLGlucHV0OiJzcmMiLGF1ZGlvOiJzcmMiLHZpZGVvOiJzcmMifSxpLmdldERvbUF0dHJpYnV0ZT1mdW5jdGlvbihBKXtpZighKCFBfHwhQS5ub2RlTmFtZSkpe3ZhciBTPUEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZighKFM9PT0iaW5wdXQiJiZBLnR5cGUhPT0iaW1hZ2UiKSlyZXR1cm4gaS5kb21BdHRyaWJ1dGVzW1NdfX07ZnVuY3Rpb24gYihBKXtyZXR1cm4gZXNjYXBlKEEpfWZ1bmN0aW9uIFQoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIScoKSpdL2csYikucmVwbGFjZSgvXCovZywiJTJBIil9aS5lbmNvZGU9VCxpLmRlY29kZT1kZWNvZGVVUklDb21wb25lbnQsaS5pc284ODU5PWZ1bmN0aW9uKCl7aS5lbmNvZGU9ZXNjYXBlLGkuZGVjb2RlPXVuZXNjYXBlfSxpLnVuaWNvZGU9ZnVuY3Rpb24oKXtpLmVuY29kZT1ULGkuZGVjb2RlPWRlY29kZVVSSUNvbXBvbmVudH0saS5jaGFyYWN0ZXJzPXtwYXRobmFtZTp7ZW5jb2RlOntleHByZXNzaW9uOi8lKDI0fDI2fDJCfDJDfDNCfDNEfDNBfDQwKS9pZyxtYXA6eyIlMjQiOiIkIiwiJTI2IjoiJiIsIiUyQiI6IisiLCIlMkMiOiIsIiwiJTNCIjoiOyIsIiUzRCI6Ij0iLCIlM0EiOiI6IiwiJTQwIjoiQCJ9fSxkZWNvZGU6e2V4cHJlc3Npb246L1tcL1w/I10vZyxtYXA6eyIvIjoiJTJGIiwiPyI6IiUzRiIsIiMiOiIlMjMifX19LHJlc2VydmVkOntlbmNvZGU6e2V4cHJlc3Npb246LyUoMjF8MjN8MjR8MjZ8Mjd8Mjh8Mjl8MkF8MkJ8MkN8MkZ8M0F8M0J8M0R8M0Z8NDB8NUJ8NUQpL2lnLG1hcDp7IiUzQSI6IjoiLCIlMkYiOiIvIiwiJTNGIjoiPyIsIiUyMyI6IiMiLCIlNUIiOiJbIiwiJTVEIjoiXSIsIiU0MCI6IkAiLCIlMjEiOiIhIiwiJTI0IjoiJCIsIiUyNiI6IiYiLCIlMjciOiInIiwiJTI4IjoiKCIsIiUyOSI6IikiLCIlMkEiOiIqIiwiJTJCIjoiKyIsIiUyQyI6IiwiLCIlM0IiOiI7IiwiJTNEIjoiPSJ9fX0sdXJucGF0aDp7ZW5jb2RlOntleHByZXNzaW9uOi8lKDIxfDI0fDI3fDI4fDI5fDJBfDJCfDJDfDNCfDNEfDQwKS9pZyxtYXA6eyIlMjEiOiIhIiwiJTI0IjoiJCIsIiUyNyI6IiciLCIlMjgiOiIoIiwiJTI5IjoiKSIsIiUyQSI6IioiLCIlMkIiOiIrIiwiJTJDIjoiLCIsIiUzQiI6IjsiLCIlM0QiOiI9IiwiJTQwIjoiQCJ9fSxkZWNvZGU6e2V4cHJlc3Npb246L1tcL1w/IzpdL2csbWFwOnsiLyI6IiUyRiIsIj8iOiIlM0YiLCIjIjoiJTIzIiwiOiI6IiUzQSJ9fX19LGkuZW5jb2RlUXVlcnk9ZnVuY3Rpb24oQSxTKXt2YXIgeD1pLmVuY29kZShBKyIiKTtyZXR1cm4gUz09PXZvaWQgMCYmKFM9aS5lc2NhcGVRdWVyeVNwYWNlKSxTP3gucmVwbGFjZSgvJTIwL2csIisiKTp4fSxpLmRlY29kZVF1ZXJ5PWZ1bmN0aW9uKEEsUyl7QSs9IiIsUz09PXZvaWQgMCYmKFM9aS5lc2NhcGVRdWVyeVNwYWNlKTt0cnl7cmV0dXJuIGkuZGVjb2RlKFM/QS5yZXBsYWNlKC9cKy9nLCIlMjAiKTpBKX1jYXRjaHtyZXR1cm4gQX19O3ZhciBPPXtlbmNvZGU6ImVuY29kZSIsZGVjb2RlOiJkZWNvZGUifSxFLHc9ZnVuY3Rpb24oQSxTKXtyZXR1cm4gZnVuY3Rpb24oeCl7dHJ5e3JldHVybiBpW1NdKHgrIiIpLnJlcGxhY2UoaS5jaGFyYWN0ZXJzW0FdW1NdLmV4cHJlc3Npb24sZnVuY3Rpb24oRCl7cmV0dXJuIGkuY2hhcmFjdGVyc1tBXVtTXS5tYXBbRF19KX1jYXRjaHtyZXR1cm4geH19fTtmb3IoRSBpbiBPKWlbRSsiUGF0aFNlZ21lbnQiXT13KCJwYXRobmFtZSIsT1tFXSksaVtFKyJVcm5QYXRoU2VnbWVudCJdPXcoInVybnBhdGgiLE9bRV0pO3ZhciBDPWZ1bmN0aW9uKEEsUyx4KXtyZXR1cm4gZnVuY3Rpb24oRCl7dmFyIHo7eD96PWZ1bmN0aW9uKFcpe3JldHVybiBpW1NdKGlbeF0oVykpfTp6PWlbU107Zm9yKHZhciBqPShEKyIiKS5zcGxpdChBKSxrPTAscT1qLmxlbmd0aDtrPHE7aysrKWpba109eihqW2tdKTtyZXR1cm4gai5qb2luKEEpfX07aS5kZWNvZGVQYXRoPUMoIi8iLCJkZWNvZGVQYXRoU2VnbWVudCIpLGkuZGVjb2RlVXJuUGF0aD1DKCI6IiwiZGVjb2RlVXJuUGF0aFNlZ21lbnQiKSxpLnJlY29kZVBhdGg9QygiLyIsImVuY29kZVBhdGhTZWdtZW50IiwiZGVjb2RlIiksaS5yZWNvZGVVcm5QYXRoPUMoIjoiLCJlbmNvZGVVcm5QYXRoU2VnbWVudCIsImRlY29kZSIpLGkuZW5jb2RlUmVzZXJ2ZWQ9dygicmVzZXJ2ZWQiLCJlbmNvZGUiKSxpLnBhcnNlPWZ1bmN0aW9uKEEsUyl7dmFyIHg7cmV0dXJuIFN8fChTPXtwcmV2ZW50SW52YWxpZEhvc3RuYW1lOmkucHJldmVudEludmFsaWRIb3N0bmFtZX0pLEE9QS5yZXBsYWNlKGkubGVhZGluZ193aGl0ZXNwYWNlX2V4cHJlc3Npb24sIiIpLEE9QS5yZXBsYWNlKGkuYXNjaWlfdGFiX3doaXRlc3BhY2UsIiIpLHg9QS5pbmRleE9mKCIjIikseD4tMSYmKFMuZnJhZ21lbnQ9QS5zdWJzdHJpbmcoeCsxKXx8bnVsbCxBPUEuc3Vic3RyaW5nKDAseCkpLHg9QS5pbmRleE9mKCI/IikseD4tMSYmKFMucXVlcnk9QS5zdWJzdHJpbmcoeCsxKXx8bnVsbCxBPUEuc3Vic3RyaW5nKDAseCkpLEE9QS5yZXBsYWNlKC9eKGh0dHBzP3xmdHB8d3NzPyk/OitbL1xcXSovaSwiJDE6Ly8iKSxBPUEucmVwbGFjZSgvXlsvXFxdezIsfS9pLCIvLyIpLEEuc3Vic3RyaW5nKDAsMik9PT0iLy8iPyhTLnByb3RvY29sPW51bGwsQT1BLnN1YnN0cmluZygyKSxBPWkucGFyc2VBdXRob3JpdHkoQSxTKSk6KHg9QS5pbmRleE9mKCI6IikseD4tMSYmKFMucHJvdG9jb2w9QS5zdWJzdHJpbmcoMCx4KXx8bnVsbCxTLnByb3RvY29sJiYhUy5wcm90b2NvbC5tYXRjaChpLnByb3RvY29sX2V4cHJlc3Npb24pP1MucHJvdG9jb2w9dm9pZCAwOkEuc3Vic3RyaW5nKHgrMSx4KzMpLnJlcGxhY2UoL1xcL2csIi8iKT09PSIvLyI/KEE9QS5zdWJzdHJpbmcoeCszKSxBPWkucGFyc2VBdXRob3JpdHkoQSxTKSk6KEE9QS5zdWJzdHJpbmcoeCsxKSxTLnVybj0hMCkpKSxTLnBhdGg9QSxTfSxpLnBhcnNlSG9zdD1mdW5jdGlvbihBLFMpe0F8fChBPSIiKSxBPUEucmVwbGFjZSgvXFwvZywiLyIpO3ZhciB4PUEuaW5kZXhPZigiLyIpLEQsejtpZih4PT09LTEmJih4PUEubGVuZ3RoKSxBLmNoYXJBdCgwKT09PSJbIilEPUEuaW5kZXhPZigiXSIpLFMuaG9zdG5hbWU9QS5zdWJzdHJpbmcoMSxEKXx8bnVsbCxTLnBvcnQ9QS5zdWJzdHJpbmcoRCsyLHgpfHxudWxsLFMucG9ydD09PSIvIiYmKFMucG9ydD1udWxsKTtlbHNle3ZhciBqPUEuaW5kZXhPZigiOiIpLGs9QS5pbmRleE9mKCIvIikscT1BLmluZGV4T2YoIjoiLGorMSk7cSE9PS0xJiYoaz09PS0xfHxxPGspPyhTLmhvc3RuYW1lPUEuc3Vic3RyaW5nKDAseCl8fG51bGwsUy5wb3J0PW51bGwpOih6PUEuc3Vic3RyaW5nKDAseCkuc3BsaXQoIjoiKSxTLmhvc3RuYW1lPXpbMF18fG51bGwsUy5wb3J0PXpbMV18fG51bGwpfXJldHVybiBTLmhvc3RuYW1lJiZBLnN1YnN0cmluZyh4KS5jaGFyQXQoMCkhPT0iLyImJih4KyssQT0iLyIrQSksUy5wcmV2ZW50SW52YWxpZEhvc3RuYW1lJiZpLmVuc3VyZVZhbGlkSG9zdG5hbWUoUy5ob3N0bmFtZSxTLnByb3RvY29sKSxTLnBvcnQmJmkuZW5zdXJlVmFsaWRQb3J0KFMucG9ydCksQS5zdWJzdHJpbmcoeCl8fCIvIn0saS5wYXJzZUF1dGhvcml0eT1mdW5jdGlvbihBLFMpe3JldHVybiBBPWkucGFyc2VVc2VyaW5mbyhBLFMpLGkucGFyc2VIb3N0KEEsUyl9LGkucGFyc2VVc2VyaW5mbz1mdW5jdGlvbihBLFMpe3ZhciB4PUEsRD1BLmluZGV4T2YoIlxcIik7RCE9PS0xJiYoQT1BLnJlcGxhY2UoL1xcL2csIi8iKSk7dmFyIHo9QS5pbmRleE9mKCIvIiksaj1BLmxhc3RJbmRleE9mKCJAIix6Pi0xP3o6QS5sZW5ndGgtMSksaztyZXR1cm4gaj4tMSYmKHo9PT0tMXx8ajx6KT8oaz1BLnN1YnN0cmluZygwLGopLnNwbGl0KCI6IiksUy51c2VybmFtZT1rWzBdP2kuZGVjb2RlKGtbMF0pOm51bGwsay5zaGlmdCgpLFMucGFzc3dvcmQ9a1swXT9pLmRlY29kZShrLmpvaW4oIjoiKSk6bnVsbCxBPXguc3Vic3RyaW5nKGorMSkpOihTLnVzZXJuYW1lPW51bGwsUy5wYXNzd29yZD1udWxsKSxBfSxpLnBhcnNlUXVlcnk9ZnVuY3Rpb24oQSxTKXtpZighQSlyZXR1cm57fTtpZihBPUEucmVwbGFjZSgvJisvZywiJiIpLnJlcGxhY2UoL15cPyomKnwmKyQvZywiIiksIUEpcmV0dXJue307Zm9yKHZhciB4PXt9LEQ9QS5zcGxpdCgiJiIpLHo9RC5sZW5ndGgsaixrLHEsVz0wO1c8ejtXKyspaj1EW1ddLnNwbGl0KCI9Iiksaz1pLmRlY29kZVF1ZXJ5KGouc2hpZnQoKSxTKSxxPWoubGVuZ3RoP2kuZGVjb2RlUXVlcnkoai5qb2luKCI9IiksUyk6bnVsbCxrIT09Il9fcHJvdG9fXyImJih1LmNhbGwoeCxrKT8oKHR5cGVvZiB4W2tdPT0ic3RyaW5nInx8eFtrXT09PW51bGwpJiYoeFtrXT1beFtrXV0pLHhba10ucHVzaChxKSk6eFtrXT1xKTtyZXR1cm4geH0saS5idWlsZD1mdW5jdGlvbihBKXt2YXIgUz0iIix4PSExO3JldHVybiBBLnByb3RvY29sJiYoUys9QS5wcm90b2NvbCsiOiIpLCFBLnVybiYmKFN8fEEuaG9zdG5hbWUpJiYoUys9Ii8vIix4PSEwKSxTKz1pLmJ1aWxkQXV0aG9yaXR5KEEpfHwiIix0eXBlb2YgQS5wYXRoPT0ic3RyaW5nIiYmKEEucGF0aC5jaGFyQXQoMCkhPT0iLyImJngmJihTKz0iLyIpLFMrPUEucGF0aCksdHlwZW9mIEEucXVlcnk9PSJzdHJpbmciJiZBLnF1ZXJ5JiYoUys9Ij8iK0EucXVlcnkpLHR5cGVvZiBBLmZyYWdtZW50PT0ic3RyaW5nIiYmQS5mcmFnbWVudCYmKFMrPSIjIitBLmZyYWdtZW50KSxTfSxpLmJ1aWxkSG9zdD1mdW5jdGlvbihBKXt2YXIgUz0iIjtpZihBLmhvc3RuYW1lKWkuaXA2X2V4cHJlc3Npb24udGVzdChBLmhvc3RuYW1lKT9TKz0iWyIrQS5ob3N0bmFtZSsiXSI6Uys9QS5ob3N0bmFtZTtlbHNlIHJldHVybiIiO3JldHVybiBBLnBvcnQmJihTKz0iOiIrQS5wb3J0KSxTfSxpLmJ1aWxkQXV0aG9yaXR5PWZ1bmN0aW9uKEEpe3JldHVybiBpLmJ1aWxkVXNlcmluZm8oQSkraS5idWlsZEhvc3QoQSl9LGkuYnVpbGRVc2VyaW5mbz1mdW5jdGlvbihBKXt2YXIgUz0iIjtyZXR1cm4gQS51c2VybmFtZSYmKFMrPWkuZW5jb2RlKEEudXNlcm5hbWUpKSxBLnBhc3N3b3JkJiYoUys9IjoiK2kuZW5jb2RlKEEucGFzc3dvcmQpKSxTJiYoUys9IkAiKSxTfSxpLmJ1aWxkUXVlcnk9ZnVuY3Rpb24oQSxTLHgpe3ZhciBEPSIiLHosaixrLHE7Zm9yKGogaW4gQSlpZihqIT09Il9fcHJvdG9fXyImJnUuY2FsbChBLGopKWlmKHAoQVtqXSkpZm9yKHo9e30saz0wLHE9QVtqXS5sZW5ndGg7azxxO2srKylBW2pdW2tdIT09dm9pZCAwJiZ6W0Fbal1ba10rIiJdPT09dm9pZCAwJiYoRCs9IiYiK2kuYnVpbGRRdWVyeVBhcmFtZXRlcihqLEFbal1ba10seCksUyE9PSEwJiYoeltBW2pdW2tdKyIiXT0hMCkpO2Vsc2UgQVtqXSE9PXZvaWQgMCYmKEQrPSImIitpLmJ1aWxkUXVlcnlQYXJhbWV0ZXIoaixBW2pdLHgpKTtyZXR1cm4gRC5zdWJzdHJpbmcoMSl9LGkuYnVpbGRRdWVyeVBhcmFtZXRlcj1mdW5jdGlvbihBLFMseCl7cmV0dXJuIGkuZW5jb2RlUXVlcnkoQSx4KSsoUyE9PW51bGw/Ij0iK2kuZW5jb2RlUXVlcnkoUyx4KToiIil9LGkuYWRkUXVlcnk9ZnVuY3Rpb24oQSxTLHgpe2lmKHR5cGVvZiBTPT0ib2JqZWN0Iilmb3IodmFyIEQgaW4gUyl1LmNhbGwoUyxEKSYmaS5hZGRRdWVyeShBLEQsU1tEXSk7ZWxzZSBpZih0eXBlb2YgUz09InN0cmluZyIpe2lmKEFbU109PT12b2lkIDApe0FbU109eDtyZXR1cm59ZWxzZSB0eXBlb2YgQVtTXT09InN0cmluZyImJihBW1NdPVtBW1NdXSk7cCh4KXx8KHg9W3hdKSxBW1NdPShBW1NdfHxbXSkuY29uY2F0KHgpfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLmFkZFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXIiKX0saS5zZXRRdWVyeT1mdW5jdGlvbihBLFMseCl7aWYodHlwZW9mIFM9PSJvYmplY3QiKWZvcih2YXIgRCBpbiBTKXUuY2FsbChTLEQpJiZpLnNldFF1ZXJ5KEEsRCxTW0RdKTtlbHNlIGlmKHR5cGVvZiBTPT0ic3RyaW5nIilBW1NdPXg9PT12b2lkIDA/bnVsbDp4O2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLnNldFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXIiKX0saS5yZW1vdmVRdWVyeT1mdW5jdGlvbihBLFMseCl7dmFyIEQseixqO2lmKHAoUykpZm9yKEQ9MCx6PVMubGVuZ3RoO0Q8ejtEKyspQVtTW0RdXT12b2lkIDA7ZWxzZSBpZihsKFMpPT09IlJlZ0V4cCIpZm9yKGogaW4gQSlTLnRlc3QoaikmJihBW2pdPXZvaWQgMCk7ZWxzZSBpZih0eXBlb2YgUz09Im9iamVjdCIpZm9yKGogaW4gUyl1LmNhbGwoUyxqKSYmaS5yZW1vdmVRdWVyeShBLGosU1tqXSk7ZWxzZSBpZih0eXBlb2YgUz09InN0cmluZyIpeCE9PXZvaWQgMD9sKHgpPT09IlJlZ0V4cCI/IXAoQVtTXSkmJngudGVzdChBW1NdKT9BW1NdPXZvaWQgMDpBW1NdPWQoQVtTXSx4KTpBW1NdPT09U3RyaW5nKHgpJiYoIXAoeCl8fHgubGVuZ3RoPT09MSk/QVtTXT12b2lkIDA6cChBW1NdKSYmKEFbU109ZChBW1NdLHgpKTpBW1NdPXZvaWQgMDtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIlVSSS5yZW1vdmVRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcsIFJlZ0V4cCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIil9LGkuaGFzUXVlcnk9ZnVuY3Rpb24oQSxTLHgsRCl7c3dpdGNoKGwoUykpe2Nhc2UiU3RyaW5nIjpicmVhaztjYXNlIlJlZ0V4cCI6Zm9yKHZhciB6IGluIEEpaWYodS5jYWxsKEEseikmJlMudGVzdCh6KSYmKHg9PT12b2lkIDB8fGkuaGFzUXVlcnkoQSx6LHgpKSlyZXR1cm4hMDtyZXR1cm4hMTtjYXNlIk9iamVjdCI6Zm9yKHZhciBqIGluIFMpaWYodS5jYWxsKFMsaikmJiFpLmhhc1F1ZXJ5KEEsaixTW2pdKSlyZXR1cm4hMTtyZXR1cm4hMDtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlVSSS5oYXNRdWVyeSgpIGFjY2VwdHMgYSBzdHJpbmcsIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBvYmplY3QgYXMgdGhlIG5hbWUgcGFyYW1ldGVyIil9c3dpdGNoKGwoeCkpe2Nhc2UiVW5kZWZpbmVkIjpyZXR1cm4gUyBpbiBBO2Nhc2UiQm9vbGVhbiI6dmFyIGs9ISEocChBW1NdKT9BW1NdLmxlbmd0aDpBW1NdKTtyZXR1cm4geD09PWs7Y2FzZSJGdW5jdGlvbiI6cmV0dXJuISF4KEFbU10sUyxBKTtjYXNlIkFycmF5IjppZighcChBW1NdKSlyZXR1cm4hMTt2YXIgcT1EP206XztyZXR1cm4gcShBW1NdLHgpO2Nhc2UiUmVnRXhwIjpyZXR1cm4gcChBW1NdKT9EP20oQVtTXSx4KTohMTohIShBW1NdJiZBW1NdLm1hdGNoKHgpKTtjYXNlIk51bWJlciI6eD1TdHJpbmcoeCk7Y2FzZSJTdHJpbmciOnJldHVybiBwKEFbU10pP0Q/bShBW1NdLHgpOiExOkFbU109PT14O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLmhhc1F1ZXJ5KCkgYWNjZXB0cyB1bmRlZmluZWQsIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyLCBSZWdFeHAsIEZ1bmN0aW9uIGFzIHRoZSB2YWx1ZSBwYXJhbWV0ZXIiKX19LGkuam9pblBhdGhzPWZ1bmN0aW9uKCl7Zm9yKHZhciBBPVtdLFM9W10seD0wLEQ9MDtEPGFyZ3VtZW50cy5sZW5ndGg7RCsrKXt2YXIgej1uZXcgaShhcmd1bWVudHNbRF0pO0EucHVzaCh6KTtmb3IodmFyIGo9ei5zZWdtZW50KCksaz0wO2s8ai5sZW5ndGg7aysrKXR5cGVvZiBqW2tdPT0ic3RyaW5nIiYmUy5wdXNoKGpba10pLGpba10mJngrK31pZighUy5sZW5ndGh8fCF4KXJldHVybiBuZXcgaSgiIik7dmFyIHE9bmV3IGkoIiIpLnNlZ21lbnQoUyk7cmV0dXJuKEFbMF0ucGF0aCgpPT09IiJ8fEFbMF0ucGF0aCgpLnNsaWNlKDAsMSk9PT0iLyIpJiZxLnBhdGgoIi8iK3EucGF0aCgpKSxxLm5vcm1hbGl6ZSgpfSxpLmNvbW1vblBhdGg9ZnVuY3Rpb24oQSxTKXt2YXIgeD1NYXRoLm1pbihBLmxlbmd0aCxTLmxlbmd0aCksRDtmb3IoRD0wO0Q8eDtEKyspaWYoQS5jaGFyQXQoRCkhPT1TLmNoYXJBdChEKSl7RC0tO2JyZWFrfXJldHVybiBEPDE/QS5jaGFyQXQoMCk9PT1TLmNoYXJBdCgwKSYmQS5jaGFyQXQoMCk9PT0iLyI/Ii8iOiIiOigoQS5jaGFyQXQoRCkhPT0iLyJ8fFMuY2hhckF0KEQpIT09Ii8iKSYmKEQ9QS5zdWJzdHJpbmcoMCxEKS5sYXN0SW5kZXhPZigiLyIpKSxBLnN1YnN0cmluZygwLEQrMSkpfSxpLndpdGhpblN0cmluZz1mdW5jdGlvbihBLFMseCl7eHx8KHg9e30pO3ZhciBEPXguc3RhcnR8fGkuZmluZFVyaS5zdGFydCx6PXguZW5kfHxpLmZpbmRVcmkuZW5kLGo9eC50cmltfHxpLmZpbmRVcmkudHJpbSxrPXgucGFyZW5zfHxpLmZpbmRVcmkucGFyZW5zLHE9L1thLXowLTktXT1bIiddPyQvaTtmb3IoRC5sYXN0SW5kZXg9MDs7KXt2YXIgVz1ELmV4ZWMoQSk7aWYoIVcpYnJlYWs7dmFyIFI9Vy5pbmRleDtpZih4Lmlnbm9yZUh0bWwpe3ZhciBudD1BLnNsaWNlKE1hdGgubWF4KFItMywwKSxSKTtpZihudCYmcS50ZXN0KG50KSljb250aW51ZX1mb3IodmFyIGN0PVIrQS5zbGljZShSKS5zZWFyY2goeiksbHQ9QS5zbGljZShSLGN0KSxfdD0tMTs7KXt2YXIgb3Q9ay5leGVjKGx0KTtpZighb3QpYnJlYWs7dmFyIHh0PW90LmluZGV4K290WzBdLmxlbmd0aDtfdD1NYXRoLm1heChfdCx4dCl9aWYoX3Q+LTE/bHQ9bHQuc2xpY2UoMCxfdCkrbHQuc2xpY2UoX3QpLnJlcGxhY2UoaiwiIik6bHQ9bHQucmVwbGFjZShqLCIiKSwhKGx0Lmxlbmd0aDw9V1swXS5sZW5ndGgpJiYhKHguaWdub3JlJiZ4Lmlnbm9yZS50ZXN0KGx0KSkpe2N0PVIrbHQubGVuZ3RoO3ZhciB5dD1TKGx0LFIsY3QsQSk7aWYoeXQ9PT12b2lkIDApe0QubGFzdEluZGV4PWN0O2NvbnRpbnVlfXl0PVN0cmluZyh5dCksQT1BLnNsaWNlKDAsUikreXQrQS5zbGljZShjdCksRC5sYXN0SW5kZXg9Uit5dC5sZW5ndGh9fXJldHVybiBELmxhc3RJbmRleD0wLEF9LGkuZW5zdXJlVmFsaWRIb3N0bmFtZT1mdW5jdGlvbihBLFMpe3ZhciB4PSEhQSxEPSEhUyx6PSExO2lmKEQmJih6PW0oaS5ob3N0UHJvdG9jb2xzLFMpKSx6JiYheCl0aHJvdyBuZXcgVHlwZUVycm9yKCJIb3N0bmFtZSBjYW5ub3QgYmUgZW1wdHksIGlmIHByb3RvY29sIGlzICIrUyk7aWYoQSYmQS5tYXRjaChpLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycykpe2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lICInK0ErJyIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLTpfXSBhbmQgUHVueWNvZGUuanMgaXMgbm90IGF2YWlsYWJsZScpO2lmKHQudG9BU0NJSShBKS5tYXRjaChpLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycykpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tOl9dJyl9fSxpLmVuc3VyZVZhbGlkUG9ydD1mdW5jdGlvbihBKXtpZihBKXt2YXIgUz1OdW1iZXIoQSk7aWYoIShzKFMpJiZTPjAmJlM8NjU1MzYpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1BvcnQgIicrQSsnIiBpcyBub3QgYSB2YWxpZCBwb3J0Jyl9fSxpLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oQSl7aWYoQSl7dmFyIFM9e1VSSTp0aGlzLm5vQ29uZmxpY3QoKX07cmV0dXJuIG8uVVJJVGVtcGxhdGUmJnR5cGVvZiBvLlVSSVRlbXBsYXRlLm5vQ29uZmxpY3Q9PSJmdW5jdGlvbiImJihTLlVSSVRlbXBsYXRlPW8uVVJJVGVtcGxhdGUubm9Db25mbGljdCgpKSxvLklQdjYmJnR5cGVvZiBvLklQdjYubm9Db25mbGljdD09ImZ1bmN0aW9uIiYmKFMuSVB2Nj1vLklQdjYubm9Db25mbGljdCgpKSxvLlNlY29uZExldmVsRG9tYWlucyYmdHlwZW9mIG8uU2Vjb25kTGV2ZWxEb21haW5zLm5vQ29uZmxpY3Q9PSJmdW5jdGlvbiImJihTLlNlY29uZExldmVsRG9tYWlucz1vLlNlY29uZExldmVsRG9tYWlucy5ub0NvbmZsaWN0KCkpLFN9ZWxzZSBvLlVSST09PXRoaXMmJihvLlVSST1yKTtyZXR1cm4gdGhpc30sZi5idWlsZD1mdW5jdGlvbihBKXtyZXR1cm4gQT09PSEwP3RoaXMuX2RlZmVycmVkX2J1aWxkPSEwOihBPT09dm9pZCAwfHx0aGlzLl9kZWZlcnJlZF9idWlsZCkmJih0aGlzLl9zdHJpbmc9aS5idWlsZCh0aGlzLl9wYXJ0cyksdGhpcy5fZGVmZXJyZWRfYnVpbGQ9ITEpLHRoaXN9LGYuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkodGhpcyl9LGYudmFsdWVPZj1mLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVpbGQoITEpLl9zdHJpbmd9O2Z1bmN0aW9uIE0oQSl7cmV0dXJuIGZ1bmN0aW9uKFMseCl7cmV0dXJuIFM9PT12b2lkIDA/dGhpcy5fcGFydHNbQV18fCIiOih0aGlzLl9wYXJ0c1tBXT1TfHxudWxsLHRoaXMuYnVpbGQoIXgpLHRoaXMpfX1mdW5jdGlvbiBOKEEsUyl7cmV0dXJuIGZ1bmN0aW9uKHgsRCl7cmV0dXJuIHg9PT12b2lkIDA/dGhpcy5fcGFydHNbQV18fCIiOih4IT09bnVsbCYmKHg9eCsiIix4LmNoYXJBdCgwKT09PVMmJih4PXguc3Vic3RyaW5nKDEpKSksdGhpcy5fcGFydHNbQV09eCx0aGlzLmJ1aWxkKCFEKSx0aGlzKX19Zi5wcm90b2NvbD1NKCJwcm90b2NvbCIpLGYudXNlcm5hbWU9TSgidXNlcm5hbWUiKSxmLnBhc3N3b3JkPU0oInBhc3N3b3JkIiksZi5ob3N0bmFtZT1NKCJob3N0bmFtZSIpLGYucG9ydD1NKCJwb3J0IiksZi5xdWVyeT1OKCJxdWVyeSIsIj8iKSxmLmZyYWdtZW50PU4oImZyYWdtZW50IiwiIyIpLGYuc2VhcmNoPWZ1bmN0aW9uKEEsUyl7dmFyIHg9dGhpcy5xdWVyeShBLFMpO3JldHVybiB0eXBlb2YgeD09InN0cmluZyImJngubGVuZ3RoPyI/Iit4Onh9LGYuaGFzaD1mdW5jdGlvbihBLFMpe3ZhciB4PXRoaXMuZnJhZ21lbnQoQSxTKTtyZXR1cm4gdHlwZW9mIHg9PSJzdHJpbmciJiZ4Lmxlbmd0aD8iIyIreDp4fSxmLnBhdGhuYW1lPWZ1bmN0aW9uKEEsUyl7aWYoQT09PXZvaWQgMHx8QT09PSEwKXt2YXIgeD10aGlzLl9wYXJ0cy5wYXRofHwodGhpcy5fcGFydHMuaG9zdG5hbWU/Ii8iOiIiKTtyZXR1cm4gQT8odGhpcy5fcGFydHMudXJuP2kuZGVjb2RlVXJuUGF0aDppLmRlY29kZVBhdGgpKHgpOnh9ZWxzZSByZXR1cm4gdGhpcy5fcGFydHMudXJuP3RoaXMuX3BhcnRzLnBhdGg9QT9pLnJlY29kZVVyblBhdGgoQSk6IiI6dGhpcy5fcGFydHMucGF0aD1BP2kucmVjb2RlUGF0aChBKToiLyIsdGhpcy5idWlsZCghUyksdGhpc30sZi5wYXRoPWYucGF0aG5hbWUsZi5ocmVmPWZ1bmN0aW9uKEEsUyl7dmFyIHg7aWYoQT09PXZvaWQgMClyZXR1cm4gdGhpcy50b1N0cmluZygpO3RoaXMuX3N0cmluZz0iIix0aGlzLl9wYXJ0cz1pLl9wYXJ0cygpO3ZhciBEPUEgaW5zdGFuY2VvZiBpLHo9dHlwZW9mIEE9PSJvYmplY3QiJiYoQS5ob3N0bmFtZXx8QS5wYXRofHxBLnBhdGhuYW1lKTtpZihBLm5vZGVOYW1lKXt2YXIgaj1pLmdldERvbUF0dHJpYnV0ZShBKTtBPUFbal18fCIiLHo9ITF9aWYoIUQmJnomJkEucGF0aG5hbWUhPT12b2lkIDAmJihBPUEudG9TdHJpbmcoKSksdHlwZW9mIEE9PSJzdHJpbmcifHxBIGluc3RhbmNlb2YgU3RyaW5nKXRoaXMuX3BhcnRzPWkucGFyc2UoU3RyaW5nKEEpLHRoaXMuX3BhcnRzKTtlbHNlIGlmKER8fHope3ZhciBrPUQ/QS5fcGFydHM6QTtmb3IoeCBpbiBrKXghPT0icXVlcnkiJiZ1LmNhbGwodGhpcy5fcGFydHMseCkmJih0aGlzLl9wYXJ0c1t4XT1rW3hdKTtrLnF1ZXJ5JiZ0aGlzLnF1ZXJ5KGsucXVlcnksITEpfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpbnB1dCIpO3JldHVybiB0aGlzLmJ1aWxkKCFTKSx0aGlzfSxmLmlzPWZ1bmN0aW9uKEEpe3ZhciBTPSExLHg9ITEsRD0hMSx6PSExLGo9ITEsaz0hMSxxPSExLFc9IXRoaXMuX3BhcnRzLnVybjtzd2l0Y2godGhpcy5fcGFydHMuaG9zdG5hbWUmJihXPSExLHg9aS5pcDRfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSxEPWkuaXA2X2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSksUz14fHxELHo9IVMsaj16JiZuJiZuLmhhcyh0aGlzLl9wYXJ0cy5ob3N0bmFtZSksaz16JiZpLmlkbl9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpLHE9eiYmaS5wdW55Y29kZV9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpKSxBLnRvTG93ZXJDYXNlKCkpe2Nhc2UicmVsYXRpdmUiOnJldHVybiBXO2Nhc2UiYWJzb2x1dGUiOnJldHVybiFXO2Nhc2UiZG9tYWluIjpjYXNlIm5hbWUiOnJldHVybiB6O2Nhc2Uic2xkIjpyZXR1cm4gajtjYXNlImlwIjpyZXR1cm4gUztjYXNlImlwNCI6Y2FzZSJpcHY0IjpjYXNlImluZXQ0IjpyZXR1cm4geDtjYXNlImlwNiI6Y2FzZSJpcHY2IjpjYXNlImluZXQ2IjpyZXR1cm4gRDtjYXNlImlkbiI6cmV0dXJuIGs7Y2FzZSJ1cmwiOnJldHVybiF0aGlzLl9wYXJ0cy51cm47Y2FzZSJ1cm4iOnJldHVybiEhdGhpcy5fcGFydHMudXJuO2Nhc2UicHVueWNvZGUiOnJldHVybiBxfXJldHVybiBudWxsfTt2YXIgRj1mLnByb3RvY29sLEk9Zi5wb3J0LHY9Zi5ob3N0bmFtZTtmLnByb3RvY29sPWZ1bmN0aW9uKEEsUyl7aWYoQSYmKEE9QS5yZXBsYWNlKC86KFwvXC8pPyQvLCIiKSwhQS5tYXRjaChpLnByb3RvY29sX2V4cHJlc3Npb24pKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm90b2NvbCAiJytBK2AiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05ListXSBvciBkb2Vzbid0IHN0YXJ0IHdpdGggW0EtWl1gKTtyZXR1cm4gRi5jYWxsKHRoaXMsQSxTKX0sZi5zY2hlbWU9Zi5wcm90b2NvbCxmLnBvcnQ9ZnVuY3Rpb24oQSxTKXtyZXR1cm4gdGhpcy5fcGFydHMudXJuP0E9PT12b2lkIDA/IiI6dGhpczooQSE9PXZvaWQgMCYmKEE9PT0wJiYoQT1udWxsKSxBJiYoQSs9IiIsQS5jaGFyQXQoMCk9PT0iOiImJihBPUEuc3Vic3RyaW5nKDEpKSxpLmVuc3VyZVZhbGlkUG9ydChBKSkpLEkuY2FsbCh0aGlzLEEsUykpfSxmLmhvc3RuYW1lPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQSE9PXZvaWQgMCl7dmFyIHg9e3ByZXZlbnRJbnZhbGlkSG9zdG5hbWU6dGhpcy5fcGFydHMucHJldmVudEludmFsaWRIb3N0bmFtZX0sRD1pLnBhcnNlSG9zdChBLHgpO2lmKEQhPT0iLyIpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO0E9eC5ob3N0bmFtZSx0aGlzLl9wYXJ0cy5wcmV2ZW50SW52YWxpZEhvc3RuYW1lJiZpLmVuc3VyZVZhbGlkSG9zdG5hbWUoQSx0aGlzLl9wYXJ0cy5wcm90b2NvbCl9cmV0dXJuIHYuY2FsbCh0aGlzLEEsUyl9LGYub3JpZ2luPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMCl7dmFyIHg9dGhpcy5wcm90b2NvbCgpLEQ9dGhpcy5hdXRob3JpdHkoKTtyZXR1cm4gRD8oeD94KyI6Ly8iOiIiKSt0aGlzLmF1dGhvcml0eSgpOiIifWVsc2V7dmFyIHo9aShBKTtyZXR1cm4gdGhpcy5wcm90b2NvbCh6LnByb3RvY29sKCkpLmF1dGhvcml0eSh6LmF1dGhvcml0eSgpKS5idWlsZCghUyksdGhpc319LGYuaG9zdD1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDApcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lP2kuYnVpbGRIb3N0KHRoaXMuX3BhcnRzKToiIjt2YXIgeD1pLnBhcnNlSG9zdChBLHRoaXMuX3BhcnRzKTtpZih4IT09Ii8iKXRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lICInK0ErJyIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtyZXR1cm4gdGhpcy5idWlsZCghUyksdGhpc30sZi5hdXRob3JpdHk9ZnVuY3Rpb24oQSxTKXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZT9pLmJ1aWxkQXV0aG9yaXR5KHRoaXMuX3BhcnRzKToiIjt2YXIgeD1pLnBhcnNlQXV0aG9yaXR5KEEsdGhpcy5fcGFydHMpO2lmKHghPT0iLyIpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO3JldHVybiB0aGlzLmJ1aWxkKCFTKSx0aGlzfSxmLnVzZXJpbmZvPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMCl7dmFyIHg9aS5idWlsZFVzZXJpbmZvKHRoaXMuX3BhcnRzKTtyZXR1cm4geCYmeC5zdWJzdHJpbmcoMCx4Lmxlbmd0aC0xKX1lbHNlIHJldHVybiBBW0EubGVuZ3RoLTFdIT09IkAiJiYoQSs9IkAiKSxpLnBhcnNlVXNlcmluZm8oQSx0aGlzLl9wYXJ0cyksdGhpcy5idWlsZCghUyksdGhpc30sZi5yZXNvdXJjZT1mdW5jdGlvbihBLFMpe3ZhciB4O3JldHVybiBBPT09dm9pZCAwP3RoaXMucGF0aCgpK3RoaXMuc2VhcmNoKCkrdGhpcy5oYXNoKCk6KHg9aS5wYXJzZShBKSx0aGlzLl9wYXJ0cy5wYXRoPXgucGF0aCx0aGlzLl9wYXJ0cy5xdWVyeT14LnF1ZXJ5LHRoaXMuX3BhcnRzLmZyYWdtZW50PXguZnJhZ21lbnQsdGhpcy5idWlsZCghUyksdGhpcyl9LGYuc3ViZG9tYWluPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMCl7aWYoIXRoaXMuX3BhcnRzLmhvc3RuYW1lfHx0aGlzLmlzKCJJUCIpKXJldHVybiIiO3ZhciB4PXRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aC10aGlzLmRvbWFpbigpLmxlbmd0aC0xO3JldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoMCx4KXx8IiJ9ZWxzZXt2YXIgRD10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGgtdGhpcy5kb21haW4oKS5sZW5ndGgsej10aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoMCxEKSxqPW5ldyBSZWdFeHAoIl4iK2MoeikpO2lmKEEmJkEuY2hhckF0KEEubGVuZ3RoLTEpIT09Ii4iJiYoQSs9Ii4iKSxBLmluZGV4T2YoIjoiKSE9PS0xKXRocm93IG5ldyBUeXBlRXJyb3IoIkRvbWFpbnMgY2Fubm90IGNvbnRhaW4gY29sb25zIik7cmV0dXJuIEEmJmkuZW5zdXJlVmFsaWRIb3N0bmFtZShBLHRoaXMuX3BhcnRzLnByb3RvY29sKSx0aGlzLl9wYXJ0cy5ob3N0bmFtZT10aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKGosQSksdGhpcy5idWlsZCghUyksdGhpc319LGYuZG9tYWluPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYodHlwZW9mIEE9PSJib29sZWFuIiYmKFM9QSxBPXZvaWQgMCksQT09PXZvaWQgMCl7aWYoIXRoaXMuX3BhcnRzLmhvc3RuYW1lfHx0aGlzLmlzKCJJUCIpKXJldHVybiIiO3ZhciB4PXRoaXMuX3BhcnRzLmhvc3RuYW1lLm1hdGNoKC9cLi9nKTtpZih4JiZ4Lmxlbmd0aDwyKXJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZTt2YXIgRD10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGgtdGhpcy50bGQoUykubGVuZ3RoLTE7cmV0dXJuIEQ9dGhpcy5fcGFydHMuaG9zdG5hbWUubGFzdEluZGV4T2YoIi4iLEQtMSkrMSx0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoRCl8fCIifWVsc2V7aWYoIUEpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2Fubm90IHNldCBkb21haW4gZW1wdHkiKTtpZihBLmluZGV4T2YoIjoiKSE9PS0xKXRocm93IG5ldyBUeXBlRXJyb3IoIkRvbWFpbnMgY2Fubm90IGNvbnRhaW4gY29sb25zIik7aWYoaS5lbnN1cmVWYWxpZEhvc3RuYW1lKEEsdGhpcy5fcGFydHMucHJvdG9jb2wpLCF0aGlzLl9wYXJ0cy5ob3N0bmFtZXx8dGhpcy5pcygiSVAiKSl0aGlzLl9wYXJ0cy5ob3N0bmFtZT1BO2Vsc2V7dmFyIHo9bmV3IFJlZ0V4cChjKHRoaXMuZG9tYWluKCkpKyIkIik7dGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZSh6LEEpfXJldHVybiB0aGlzLmJ1aWxkKCFTKSx0aGlzfX0sZi50bGQ9ZnVuY3Rpb24oQSxTKXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZih0eXBlb2YgQT09ImJvb2xlYW4iJiYoUz1BLEE9dm9pZCAwKSxBPT09dm9pZCAwKXtpZighdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpcmV0dXJuIiI7dmFyIHg9dGhpcy5fcGFydHMuaG9zdG5hbWUubGFzdEluZGV4T2YoIi4iKSxEPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZyh4KzEpO3JldHVybiBTIT09ITAmJm4mJm4ubGlzdFtELnRvTG93ZXJDYXNlKCldJiZuLmdldCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSl8fER9ZWxzZXt2YXIgejtpZihBKWlmKEEubWF0Y2goL1teYS16QS1aMC05LV0vKSlpZihuJiZuLmlzKEEpKXo9bmV3IFJlZ0V4cChjKHRoaXMudGxkKCkpKyIkIiksdGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZSh6LEEpO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcignVExEICInK0ErJyIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTldJyk7ZWxzZXtpZighdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJjYW5ub3Qgc2V0IFRMRCBvbiBub24tZG9tYWluIGhvc3QiKTt6PW5ldyBSZWdFeHAoYyh0aGlzLnRsZCgpKSsiJCIpLHRoaXMuX3BhcnRzLmhvc3RuYW1lPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UoeixBKX1lbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbm5vdCBzZXQgVExEIGVtcHR5Iik7cmV0dXJuIHRoaXMuYnVpbGQoIVMpLHRoaXN9fSxmLmRpcmVjdG9yeT1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDB8fEE9PT0hMCl7aWYoIXRoaXMuX3BhcnRzLnBhdGgmJiF0aGlzLl9wYXJ0cy5ob3N0bmFtZSlyZXR1cm4iIjtpZih0aGlzLl9wYXJ0cy5wYXRoPT09Ii8iKXJldHVybiIvIjt2YXIgeD10aGlzLl9wYXJ0cy5wYXRoLmxlbmd0aC10aGlzLmZpbGVuYW1lKCkubGVuZ3RoLTEsRD10aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygwLHgpfHwodGhpcy5fcGFydHMuaG9zdG5hbWU/Ii8iOiIiKTtyZXR1cm4gQT9pLmRlY29kZVBhdGgoRCk6RH1lbHNle3ZhciB6PXRoaXMuX3BhcnRzLnBhdGgubGVuZ3RoLXRoaXMuZmlsZW5hbWUoKS5sZW5ndGgsaj10aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygwLHopLGs9bmV3IFJlZ0V4cCgiXiIrYyhqKSk7cmV0dXJuIHRoaXMuaXMoInJlbGF0aXZlIil8fChBfHwoQT0iLyIpLEEuY2hhckF0KDApIT09Ii8iJiYoQT0iLyIrQSkpLEEmJkEuY2hhckF0KEEubGVuZ3RoLTEpIT09Ii8iJiYoQSs9Ii8iKSxBPWkucmVjb2RlUGF0aChBKSx0aGlzLl9wYXJ0cy5wYXRoPXRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShrLEEpLHRoaXMuYnVpbGQoIVMpLHRoaXN9fSxmLmZpbGVuYW1lPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYodHlwZW9mIEEhPSJzdHJpbmciKXtpZighdGhpcy5fcGFydHMucGF0aHx8dGhpcy5fcGFydHMucGF0aD09PSIvIilyZXR1cm4iIjt2YXIgeD10aGlzLl9wYXJ0cy5wYXRoLmxhc3RJbmRleE9mKCIvIiksRD10aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZyh4KzEpO3JldHVybiBBP2kuZGVjb2RlUGF0aFNlZ21lbnQoRCk6RH1lbHNle3ZhciB6PSExO0EuY2hhckF0KDApPT09Ii8iJiYoQT1BLnN1YnN0cmluZygxKSksQS5tYXRjaCgvXC4/XC8vKSYmKHo9ITApO3ZhciBqPW5ldyBSZWdFeHAoYyh0aGlzLmZpbGVuYW1lKCkpKyIkIik7cmV0dXJuIEE9aS5yZWNvZGVQYXRoKEEpLHRoaXMuX3BhcnRzLnBhdGg9dGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKGosQSksej90aGlzLm5vcm1hbGl6ZVBhdGgoUyk6dGhpcy5idWlsZCghUyksdGhpc319LGYuc3VmZml4PWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMHx8QT09PSEwKXtpZighdGhpcy5fcGFydHMucGF0aHx8dGhpcy5fcGFydHMucGF0aD09PSIvIilyZXR1cm4iIjt2YXIgeD10aGlzLmZpbGVuYW1lKCksRD14Lmxhc3RJbmRleE9mKCIuIikseixqO3JldHVybiBEPT09LTE/IiI6KHo9eC5zdWJzdHJpbmcoRCsxKSxqPS9eW2EtejAtOSVdKyQvaS50ZXN0KHopP3o6IiIsQT9pLmRlY29kZVBhdGhTZWdtZW50KGopOmopfWVsc2V7QS5jaGFyQXQoMCk9PT0iLiImJihBPUEuc3Vic3RyaW5nKDEpKTt2YXIgaz10aGlzLnN1ZmZpeCgpLHE7aWYoaylBP3E9bmV3IFJlZ0V4cChjKGspKyIkIik6cT1uZXcgUmVnRXhwKGMoIi4iK2spKyIkIik7ZWxzZXtpZighQSlyZXR1cm4gdGhpczt0aGlzLl9wYXJ0cy5wYXRoKz0iLiIraS5yZWNvZGVQYXRoKEEpfXJldHVybiBxJiYoQT1pLnJlY29kZVBhdGgoQSksdGhpcy5fcGFydHMucGF0aD10aGlzLl9wYXJ0cy5wYXRoLnJlcGxhY2UocSxBKSksdGhpcy5idWlsZCghUyksdGhpc319LGYuc2VnbWVudD1mdW5jdGlvbihBLFMseCl7dmFyIEQ9dGhpcy5fcGFydHMudXJuPyI6IjoiLyIsej10aGlzLnBhdGgoKSxqPXouc3Vic3RyaW5nKDAsMSk9PT0iLyIsaz16LnNwbGl0KEQpO2lmKEEhPT12b2lkIDAmJnR5cGVvZiBBIT0ibnVtYmVyIiYmKHg9UyxTPUEsQT12b2lkIDApLEEhPT12b2lkIDAmJnR5cGVvZiBBIT0ibnVtYmVyIil0aHJvdyBuZXcgRXJyb3IoJ0JhZCBzZWdtZW50ICInK0ErJyIsIG11c3QgYmUgMC1iYXNlZCBpbnRlZ2VyJyk7aWYoaiYmay5zaGlmdCgpLEE8MCYmKEE9TWF0aC5tYXgoay5sZW5ndGgrQSwwKSksUz09PXZvaWQgMClyZXR1cm4gQT09PXZvaWQgMD9rOmtbQV07aWYoQT09PW51bGx8fGtbQV09PT12b2lkIDApaWYocChTKSl7az1bXTtmb3IodmFyIHE9MCxXPVMubGVuZ3RoO3E8VztxKyspIVNbcV0ubGVuZ3RoJiYoIWsubGVuZ3RofHwha1trLmxlbmd0aC0xXS5sZW5ndGgpfHwoay5sZW5ndGgmJiFrW2subGVuZ3RoLTFdLmxlbmd0aCYmay5wb3AoKSxrLnB1c2goZyhTW3FdKSkpfWVsc2UoU3x8dHlwZW9mIFM9PSJzdHJpbmciKSYmKFM9ZyhTKSxrW2subGVuZ3RoLTFdPT09IiI/a1trLmxlbmd0aC0xXT1TOmsucHVzaChTKSk7ZWxzZSBTP2tbQV09ZyhTKTprLnNwbGljZShBLDEpO3JldHVybiBqJiZrLnVuc2hpZnQoIiIpLHRoaXMucGF0aChrLmpvaW4oRCkseCl9LGYuc2VnbWVudENvZGVkPWZ1bmN0aW9uKEEsUyx4KXt2YXIgRCx6LGo7aWYodHlwZW9mIEEhPSJudW1iZXIiJiYoeD1TLFM9QSxBPXZvaWQgMCksUz09PXZvaWQgMCl7aWYoRD10aGlzLnNlZ21lbnQoQSxTLHgpLCFwKEQpKUQ9RCE9PXZvaWQgMD9pLmRlY29kZShEKTp2b2lkIDA7ZWxzZSBmb3Ioej0wLGo9RC5sZW5ndGg7ejxqO3orKylEW3pdPWkuZGVjb2RlKERbel0pO3JldHVybiBEfWlmKCFwKFMpKVM9dHlwZW9mIFM9PSJzdHJpbmcifHxTIGluc3RhbmNlb2YgU3RyaW5nP2kuZW5jb2RlKFMpOlM7ZWxzZSBmb3Ioej0wLGo9Uy5sZW5ndGg7ejxqO3orKylTW3pdPWkuZW5jb2RlKFNbel0pO3JldHVybiB0aGlzLnNlZ21lbnQoQSxTLHgpfTt2YXIgQj1mLnF1ZXJ5O3JldHVybiBmLnF1ZXJ5PWZ1bmN0aW9uKEEsUyl7aWYoQT09PSEwKXJldHVybiBpLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7aWYodHlwZW9mIEE9PSJmdW5jdGlvbiIpe3ZhciB4PWkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSxEPUEuY2FsbCh0aGlzLHgpO3JldHVybiB0aGlzLl9wYXJ0cy5xdWVyeT1pLmJ1aWxkUXVlcnkoRHx8eCx0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdGhpcy5idWlsZCghUyksdGhpc31lbHNlIHJldHVybiBBIT09dm9pZCAwJiZ0eXBlb2YgQSE9InN0cmluZyI/KHRoaXMuX3BhcnRzLnF1ZXJ5PWkuYnVpbGRRdWVyeShBLHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSx0aGlzLmJ1aWxkKCFTKSx0aGlzKTpCLmNhbGwodGhpcyxBLFMpfSxmLnNldFF1ZXJ5PWZ1bmN0aW9uKEEsUyx4KXt2YXIgRD1pLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7aWYodHlwZW9mIEE9PSJzdHJpbmcifHxBIGluc3RhbmNlb2YgU3RyaW5nKURbQV09UyE9PXZvaWQgMD9TOm51bGw7ZWxzZSBpZih0eXBlb2YgQT09Im9iamVjdCIpZm9yKHZhciB6IGluIEEpdS5jYWxsKEEseikmJihEW3pdPUFbel0pO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLmFkZFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXIiKTtyZXR1cm4gdGhpcy5fcGFydHMucXVlcnk9aS5idWlsZFF1ZXJ5KEQsdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHR5cGVvZiBBIT0ic3RyaW5nIiYmKHg9UyksdGhpcy5idWlsZCgheCksdGhpc30sZi5hZGRRdWVyeT1mdW5jdGlvbihBLFMseCl7dmFyIEQ9aS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO3JldHVybiBpLmFkZFF1ZXJ5KEQsQSxTPT09dm9pZCAwP251bGw6UyksdGhpcy5fcGFydHMucXVlcnk9aS5idWlsZFF1ZXJ5KEQsdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHR5cGVvZiBBIT0ic3RyaW5nIiYmKHg9UyksdGhpcy5idWlsZCgheCksdGhpc30sZi5yZW1vdmVRdWVyeT1mdW5jdGlvbihBLFMseCl7dmFyIEQ9aS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO3JldHVybiBpLnJlbW92ZVF1ZXJ5KEQsQSxTKSx0aGlzLl9wYXJ0cy5xdWVyeT1pLmJ1aWxkUXVlcnkoRCx0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdHlwZW9mIEEhPSJzdHJpbmciJiYoeD1TKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfSxmLmhhc1F1ZXJ5PWZ1bmN0aW9uKEEsUyx4KXt2YXIgRD1pLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7cmV0dXJuIGkuaGFzUXVlcnkoRCxBLFMseCl9LGYuc2V0U2VhcmNoPWYuc2V0UXVlcnksZi5hZGRTZWFyY2g9Zi5hZGRRdWVyeSxmLnJlbW92ZVNlYXJjaD1mLnJlbW92ZVF1ZXJ5LGYuaGFzU2VhcmNoPWYuaGFzUXVlcnksZi5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFydHMudXJuP3RoaXMubm9ybWFsaXplUHJvdG9jb2woITEpLm5vcm1hbGl6ZVBhdGgoITEpLm5vcm1hbGl6ZVF1ZXJ5KCExKS5ub3JtYWxpemVGcmFnbWVudCghMSkuYnVpbGQoKTp0aGlzLm5vcm1hbGl6ZVByb3RvY29sKCExKS5ub3JtYWxpemVIb3N0bmFtZSghMSkubm9ybWFsaXplUG9ydCghMSkubm9ybWFsaXplUGF0aCghMSkubm9ybWFsaXplUXVlcnkoITEpLm5vcm1hbGl6ZUZyYWdtZW50KCExKS5idWlsZCgpfSxmLm5vcm1hbGl6ZVByb3RvY29sPWZ1bmN0aW9uKEEpe3JldHVybiB0eXBlb2YgdGhpcy5fcGFydHMucHJvdG9jb2w9PSJzdHJpbmciJiYodGhpcy5fcGFydHMucHJvdG9jb2w9dGhpcy5fcGFydHMucHJvdG9jb2wudG9Mb3dlckNhc2UoKSx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVIb3N0bmFtZT1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWUmJih0aGlzLmlzKCJJRE4iKSYmdD90aGlzLl9wYXJ0cy5ob3N0bmFtZT10LnRvQVNDSUkodGhpcy5fcGFydHMuaG9zdG5hbWUpOnRoaXMuaXMoIklQdjYiKSYmZSYmKHRoaXMuX3BhcnRzLmhvc3RuYW1lPWUuYmVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkpLHRoaXMuX3BhcnRzLmhvc3RuYW1lPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCksdGhpcy5idWlsZCghQSkpLHRoaXN9LGYubm9ybWFsaXplUG9ydD1mdW5jdGlvbihBKXtyZXR1cm4gdHlwZW9mIHRoaXMuX3BhcnRzLnByb3RvY29sPT0ic3RyaW5nIiYmdGhpcy5fcGFydHMucG9ydD09PWkuZGVmYXVsdFBvcnRzW3RoaXMuX3BhcnRzLnByb3RvY29sXSYmKHRoaXMuX3BhcnRzLnBvcnQ9bnVsbCx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVQYXRoPWZ1bmN0aW9uKEEpe3ZhciBTPXRoaXMuX3BhcnRzLnBhdGg7aWYoIVMpcmV0dXJuIHRoaXM7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiB0aGlzLl9wYXJ0cy5wYXRoPWkucmVjb2RlVXJuUGF0aCh0aGlzLl9wYXJ0cy5wYXRoKSx0aGlzLmJ1aWxkKCFBKSx0aGlzO2lmKHRoaXMuX3BhcnRzLnBhdGg9PT0iLyIpcmV0dXJuIHRoaXM7Uz1pLnJlY29kZVBhdGgoUyk7dmFyIHgsRD0iIix6LGo7Zm9yKFMuY2hhckF0KDApIT09Ii8iJiYoeD0hMCxTPSIvIitTKSwoUy5zbGljZSgtMyk9PT0iLy4uInx8Uy5zbGljZSgtMik9PT0iLy4iKSYmKFMrPSIvIiksUz1TLnJlcGxhY2UoLyhcLyhcLlwvKSspfChcL1wuJCkvZywiLyIpLnJlcGxhY2UoL1wvezIsfS9nLCIvIikseCYmKEQ9Uy5zdWJzdHJpbmcoMSkubWF0Y2goL14oXC5cLlwvKSsvKXx8IiIsRCYmKEQ9RFswXSkpO3o9Uy5zZWFyY2goL1wvXC5cLihcL3wkKS8pLHohPT0tMTspe2lmKHo9PT0wKXtTPVMuc3Vic3RyaW5nKDMpO2NvbnRpbnVlfWo9Uy5zdWJzdHJpbmcoMCx6KS5sYXN0SW5kZXhPZigiLyIpLGo9PT0tMSYmKGo9eiksUz1TLnN1YnN0cmluZygwLGopK1Muc3Vic3RyaW5nKHorMyl9cmV0dXJuIHgmJnRoaXMuaXMoInJlbGF0aXZlIikmJihTPUQrUy5zdWJzdHJpbmcoMSkpLHRoaXMuX3BhcnRzLnBhdGg9Uyx0aGlzLmJ1aWxkKCFBKSx0aGlzfSxmLm5vcm1hbGl6ZVBhdGhuYW1lPWYubm9ybWFsaXplUGF0aCxmLm5vcm1hbGl6ZVF1ZXJ5PWZ1bmN0aW9uKEEpe3JldHVybiB0eXBlb2YgdGhpcy5fcGFydHMucXVlcnk9PSJzdHJpbmciJiYodGhpcy5fcGFydHMucXVlcnkubGVuZ3RoP3RoaXMucXVlcnkoaS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpKTp0aGlzLl9wYXJ0cy5xdWVyeT1udWxsLHRoaXMuYnVpbGQoIUEpKSx0aGlzfSxmLm5vcm1hbGl6ZUZyYWdtZW50PWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5mcmFnbWVudHx8KHRoaXMuX3BhcnRzLmZyYWdtZW50PW51bGwsdGhpcy5idWlsZCghQSkpLHRoaXN9LGYubm9ybWFsaXplU2VhcmNoPWYubm9ybWFsaXplUXVlcnksZi5ub3JtYWxpemVIYXNoPWYubm9ybWFsaXplRnJhZ21lbnQsZi5pc284ODU5PWZ1bmN0aW9uKCl7dmFyIEE9aS5lbmNvZGUsUz1pLmRlY29kZTtpLmVuY29kZT1lc2NhcGUsaS5kZWNvZGU9ZGVjb2RlVVJJQ29tcG9uZW50O3RyeXt0aGlzLm5vcm1hbGl6ZSgpfWZpbmFsbHl7aS5lbmNvZGU9QSxpLmRlY29kZT1TfXJldHVybiB0aGlzfSxmLnVuaWNvZGU9ZnVuY3Rpb24oKXt2YXIgQT1pLmVuY29kZSxTPWkuZGVjb2RlO2kuZW5jb2RlPVQsaS5kZWNvZGU9dW5lc2NhcGU7dHJ5e3RoaXMubm9ybWFsaXplKCl9ZmluYWxseXtpLmVuY29kZT1BLGkuZGVjb2RlPVN9cmV0dXJuIHRoaXN9LGYucmVhZGFibGU9ZnVuY3Rpb24oKXt2YXIgQT10aGlzLmNsb25lKCk7QS51c2VybmFtZSgiIikucGFzc3dvcmQoIiIpLm5vcm1hbGl6ZSgpO3ZhciBTPSIiO2lmKEEuX3BhcnRzLnByb3RvY29sJiYoUys9QS5fcGFydHMucHJvdG9jb2wrIjovLyIpLEEuX3BhcnRzLmhvc3RuYW1lJiYoQS5pcygicHVueWNvZGUiKSYmdD8oUys9dC50b1VuaWNvZGUoQS5fcGFydHMuaG9zdG5hbWUpLEEuX3BhcnRzLnBvcnQmJihTKz0iOiIrQS5fcGFydHMucG9ydCkpOlMrPUEuaG9zdCgpKSxBLl9wYXJ0cy5ob3N0bmFtZSYmQS5fcGFydHMucGF0aCYmQS5fcGFydHMucGF0aC5jaGFyQXQoMCkhPT0iLyImJihTKz0iLyIpLFMrPUEucGF0aCghMCksQS5fcGFydHMucXVlcnkpe2Zvcih2YXIgeD0iIixEPTAsej1BLl9wYXJ0cy5xdWVyeS5zcGxpdCgiJiIpLGo9ei5sZW5ndGg7RDxqO0QrKyl7dmFyIGs9KHpbRF18fCIiKS5zcGxpdCgiPSIpO3grPSImIitpLmRlY29kZVF1ZXJ5KGtbMF0sdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSkucmVwbGFjZSgvJi9nLCIlMjYiKSxrWzFdIT09dm9pZCAwJiYoeCs9Ij0iK2kuZGVjb2RlUXVlcnkoa1sxXSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKS5yZXBsYWNlKC8mL2csIiUyNiIpKX1TKz0iPyIreC5zdWJzdHJpbmcoMSl9cmV0dXJuIFMrPWkuZGVjb2RlUXVlcnkoQS5oYXNoKCksITApLFN9LGYuYWJzb2x1dGVUbz1mdW5jdGlvbihBKXt2YXIgUz10aGlzLmNsb25lKCkseD1bInByb3RvY29sIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImhvc3RuYW1lIiwicG9ydCJdLEQseixqO2lmKHRoaXMuX3BhcnRzLnVybil0aHJvdyBuZXcgRXJyb3IoIlVSTnMgZG8gbm90IGhhdmUgYW55IGdlbmVyYWxseSBkZWZpbmVkIGhpZXJhcmNoaWNhbCBjb21wb25lbnRzIik7aWYoQSBpbnN0YW5jZW9mIGl8fChBPW5ldyBpKEEpKSxTLl9wYXJ0cy5wcm90b2NvbHx8KFMuX3BhcnRzLnByb3RvY29sPUEuX3BhcnRzLnByb3RvY29sLHRoaXMuX3BhcnRzLmhvc3RuYW1lKSlyZXR1cm4gUztmb3Ioej0wO2o9eFt6XTt6KyspUy5fcGFydHNbal09QS5fcGFydHNbal07cmV0dXJuIFMuX3BhcnRzLnBhdGg/KFMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKC0yKT09PSIuLiImJihTLl9wYXJ0cy5wYXRoKz0iLyIpLFMucGF0aCgpLmNoYXJBdCgwKSE9PSIvIiYmKEQ9QS5kaXJlY3RvcnkoKSxEPUR8fChBLnBhdGgoKS5pbmRleE9mKCIvIik9PT0wPyIvIjoiIiksUy5fcGFydHMucGF0aD0oRD9EKyIvIjoiIikrUy5fcGFydHMucGF0aCxTLm5vcm1hbGl6ZVBhdGgoKSkpOihTLl9wYXJ0cy5wYXRoPUEuX3BhcnRzLnBhdGgsUy5fcGFydHMucXVlcnl8fChTLl9wYXJ0cy5xdWVyeT1BLl9wYXJ0cy5xdWVyeSkpLFMuYnVpbGQoKSxTfSxmLnJlbGF0aXZlVG89ZnVuY3Rpb24oQSl7dmFyIFM9dGhpcy5jbG9uZSgpLm5vcm1hbGl6ZSgpLHgsRCx6LGosaztpZihTLl9wYXJ0cy51cm4pdGhyb3cgbmV3IEVycm9yKCJVUk5zIGRvIG5vdCBoYXZlIGFueSBnZW5lcmFsbHkgZGVmaW5lZCBoaWVyYXJjaGljYWwgY29tcG9uZW50cyIpO2lmKEE9bmV3IGkoQSkubm9ybWFsaXplKCkseD1TLl9wYXJ0cyxEPUEuX3BhcnRzLGo9Uy5wYXRoKCksaz1BLnBhdGgoKSxqLmNoYXJBdCgwKSE9PSIvIil0aHJvdyBuZXcgRXJyb3IoIlVSSSBpcyBhbHJlYWR5IHJlbGF0aXZlIik7aWYoay5jaGFyQXQoMCkhPT0iLyIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIGEgVVJJIHJlbGF0aXZlIHRvIGFub3RoZXIgcmVsYXRpdmUgVVJJIik7aWYoeC5wcm90b2NvbD09PUQucHJvdG9jb2wmJih4LnByb3RvY29sPW51bGwpLHgudXNlcm5hbWUhPT1ELnVzZXJuYW1lfHx4LnBhc3N3b3JkIT09RC5wYXNzd29yZHx8eC5wcm90b2NvbCE9PW51bGx8fHgudXNlcm5hbWUhPT1udWxsfHx4LnBhc3N3b3JkIT09bnVsbClyZXR1cm4gUy5idWlsZCgpO2lmKHguaG9zdG5hbWU9PT1ELmhvc3RuYW1lJiZ4LnBvcnQ9PT1ELnBvcnQpeC5ob3N0bmFtZT1udWxsLHgucG9ydD1udWxsO2Vsc2UgcmV0dXJuIFMuYnVpbGQoKTtpZihqPT09aylyZXR1cm4geC5wYXRoPSIiLFMuYnVpbGQoKTtpZih6PWkuY29tbW9uUGF0aChqLGspLCF6KXJldHVybiBTLmJ1aWxkKCk7dmFyIHE9RC5wYXRoLnN1YnN0cmluZyh6Lmxlbmd0aCkucmVwbGFjZSgvW15cL10qJC8sIiIpLnJlcGxhY2UoLy4qP1wvL2csIi4uLyIpO3JldHVybiB4LnBhdGg9cSt4LnBhdGguc3Vic3RyaW5nKHoubGVuZ3RoKXx8Ii4vIixTLmJ1aWxkKCl9LGYuZXF1YWxzPWZ1bmN0aW9uKEEpe3ZhciBTPXRoaXMuY2xvbmUoKSx4PW5ldyBpKEEpLEQ9e30sej17fSxqPXt9LGsscSxXO2lmKFMubm9ybWFsaXplKCkseC5ub3JtYWxpemUoKSxTLnRvU3RyaW5nKCk9PT14LnRvU3RyaW5nKCkpcmV0dXJuITA7aWYoaz1TLnF1ZXJ5KCkscT14LnF1ZXJ5KCksUy5xdWVyeSgiIikseC5xdWVyeSgiIiksUy50b1N0cmluZygpIT09eC50b1N0cmluZygpfHxrLmxlbmd0aCE9PXEubGVuZ3RoKXJldHVybiExO0Q9aS5wYXJzZVF1ZXJ5KGssdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksej1pLnBhcnNlUXVlcnkocSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtmb3IoVyBpbiBEKWlmKHUuY2FsbChELFcpKXtpZihwKERbV10pKXtpZighXyhEW1ddLHpbV10pKXJldHVybiExfWVsc2UgaWYoRFtXXSE9PXpbV10pcmV0dXJuITE7altXXT0hMH1mb3IoVyBpbiB6KWlmKHUuY2FsbCh6LFcpJiYhaltXXSlyZXR1cm4hMTtyZXR1cm4hMH0sZi5wcmV2ZW50SW52YWxpZEhvc3RuYW1lPWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5wcmV2ZW50SW52YWxpZEhvc3RuYW1lPSEhQSx0aGlzfSxmLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycz1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzPSEhQSx0aGlzfSxmLmVzY2FwZVF1ZXJ5U3BhY2U9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2U9ISFBLHRoaXN9LGl9KX0pO2Z1bmN0aW9uIGV4KHQpe3JldHVybih0Lmxlbmd0aD09PTB8fHRbdC5sZW5ndGgtMV0hPT0iLyIpJiYodD1gJHt0fS9gKSx0fXZhciBVMSxrMT0kKCgpPT57VTE9ZXh9KTtmdW5jdGlvbiBHMSh0LGUpe2lmKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpcmV0dXJuIHQ7ZT1lPz8hMTtsZXQgbj1uZXcgdC5jb25zdHJ1Y3Rvcjtmb3IobGV0IG8gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG8pKXtsZXQgcj10W29dO2UmJihyPUcxKHIsZSkpLG5bb109cn1yZXR1cm4gbn12YXIgWWMsVjE9JCgoKT0+e1ljPUcxfSk7ZnVuY3Rpb24gejEodCxlLG4pe249bj8/ITE7bGV0IG89e30scj1oKHQpLGk9aChlKSxzLGYsdTtpZihyKWZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmKGY9dFtzXSxpJiZuJiZ0eXBlb2YgZj09Im9iamVjdCImJmUuaGFzT3duUHJvcGVydHkocyk/KHU9ZVtzXSx0eXBlb2YgdT09Im9iamVjdCI/b1tzXT16MShmLHUsbik6b1tzXT1mKTpvW3NdPWYpO2lmKGkpZm9yKHMgaW4gZSllLmhhc093blByb3BlcnR5KHMpJiYhby5oYXNPd25Qcm9wZXJ0eShzKSYmKHU9ZVtzXSxvW3NdPXUpO3JldHVybiBvfXZhciBfcixycD0kKCgpPT57YXQoKTtfcj16MX0pO2Z1bmN0aW9uIG54KCl7bGV0IHQsZSxuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG8scil7dD1vLGU9cn0pO3JldHVybntyZXNvbHZlOnQscmVqZWN0OmUscHJvbWlzZTpufX12YXIganMsVW09JCgoKT0+e2pzPW54fSk7ZnVuY3Rpb24ga20odCxlKXtsZXQgbjtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PCJ1IiYmKG49ZG9jdW1lbnQpLGttLl9pbXBsZW1lbnRhdGlvbih0LGUsbil9dmFyIGoxLGZmLEdtPSQoKCk9PntqMT1kcih6cygpLDEpO2F0KCk7anQoKTtrbS5faW1wbGVtZW50YXRpb249ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJyZWxhdGl2ZSB1cmkgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpe2lmKHR5cGVvZiBuPiJ1IilyZXR1cm4gdDtlPW4uYmFzZVVSST8/bi5sb2NhdGlvbi5ocmVmfWxldCBvPW5ldyBqMS5kZWZhdWx0KHQpO3JldHVybiBvLnNjaGVtZSgpIT09IiI/by50b1N0cmluZygpOm8uYWJzb2x1dGVUbyhlKS50b1N0cmluZygpfTtmZj1rbX0pO2Z1bmN0aW9uIG94KHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEwoInVyaSBpcyByZXF1aXJlZC4iKTtsZXQgbj0iIixvPXQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gbyE9PS0xJiYobj10LnN1YnN0cmluZygwLG8rMSkpLGUmJih0PW5ldyBIMS5kZWZhdWx0KHQpLHQucXVlcnkoKS5sZW5ndGghPT0wJiYobis9YD8ke3QucXVlcnkoKX1gKSx0LmZyYWdtZW50KCkubGVuZ3RoIT09MCYmKG4rPWAjJHt0LmZyYWdtZW50KCl9YCkpLG59dmFyIEgxLHExLEsxPSQoKCk9PntIMT1kcih6cygpLDEpO2F0KCk7anQoKTtxMT1veH0pO2Z1bmN0aW9uIHJ4KHQpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJ1cmkgaXMgcmVxdWlyZWQuIik7bGV0IGU9bmV3IFcxLmRlZmF1bHQodCk7ZS5ub3JtYWxpemUoKTtsZXQgbj1lLnBhdGgoKSxvPW4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gbyE9PS0xJiYobj1uLnN1YnN0cihvKzEpKSxvPW4ubGFzdEluZGV4T2YoIi4iKSxvPT09LTE/bj0iIjpuPW4uc3Vic3RyKG8rMSksbn12YXIgVzEsWDEsWTE9JCgoKT0+e1cxPWRyKHpzKCksMSk7YXQoKTtqdCgpO1gxPXJ4fSk7ZnVuY3Rpb24gaXgodCxlLG4pe2goZSl8fChlPXQud2lkdGgpLGgobil8fChuPXQuaGVpZ2h0KTtsZXQgbz0kMVtlXTtoKG8pfHwobz17fSwkMVtlXT1vKTtsZXQgcj1vW25dO2lmKCFoKHIpKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtpLndpZHRoPWUsaS5oZWlnaHQ9bixyPWkuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSxyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iY29weSIsb1tuXT1yfXJldHVybiByLmRyYXdJbWFnZSh0LDAsMCxlLG4pLHIuZ2V0SW1hZ2VEYXRhKDAsMCxlLG4pLmRhdGF9dmFyICQxLFZtLFoxPSQoKCk9PnthdCgpOyQxPXt9O1ZtPWl4fSk7ZnVuY3Rpb24gY3godCl7cmV0dXJuIHkudHlwZU9mLnN0cmluZygidXJpIix0KSxzeC50ZXN0KHQpfXZhciBzeCxpcCx6bT0kKCgpPT57V3QoKTtzeD0vXmJsb2I6L2k7aXA9Y3h9KTtmdW5jdGlvbiBheCh0KXtoKHRpKXx8KHRpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSksdGkuaHJlZj13aW5kb3cubG9jYXRpb24uaHJlZjtsZXQgZT10aS5ob3N0LG49dGkucHJvdG9jb2w7cmV0dXJuIHRpLmhyZWY9dCx0aS5ocmVmPXRpLmhyZWYsbiE9PXRpLnByb3RvY29sfHxlIT09dGkuaG9zdH12YXIgdGksUTEsSjE9JCgoKT0+e2F0KCk7UTE9YXh9KTtmdW5jdGlvbiB1eCh0KXtyZXR1cm4geS50eXBlT2Yuc3RyaW5nKCJ1cmkiLHQpLGZ4LnRlc3QodCl9dmFyIGZ4LHNwLGptPSQoKCk9PntXdCgpO2Z4PS9eZGF0YTovaTtzcD11eH0pO2Z1bmN0aW9uIGx4KHQpe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3JldHVybiBlLmFzeW5jPSEwLGUuc3JjPXQsbmV3IFByb21pc2UoKG4sbyk9Pnt3aW5kb3cuY3Jvc3NPcmlnaW5Jc29sYXRlZCYmZS5zZXRBdHRyaWJ1dGUoImNyb3Nzb3JpZ2luIiwiYW5vbnltb3VzIik7bGV0IHI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTtlLm9ubG9hZD1mdW5jdGlvbigpe2Uub25sb2FkPXZvaWQgMCxyLnJlbW92ZUNoaWxkKGUpLG4oKX0sZS5vbmVycm9yPWZ1bmN0aW9uKGkpe28oaSl9LHIuYXBwZW5kQ2hpbGQoZSl9KX12YXIgdEEsZUE9JCgoKT0+e3RBPWx4fSk7ZnVuY3Rpb24gcHgodCl7aWYoIWgodCkpdGhyb3cgbmV3IEwoIm9iaiBpcyByZXF1aXJlZC4iKTtsZXQgZT0iIjtmb3IobGV0IG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pKXtsZXQgbz10W25dLHI9YCR7ZW5jb2RlVVJJQ29tcG9uZW50KG4pfT1gO2lmKEFycmF5LmlzQXJyYXkobykpZm9yKGxldCBpPTAscz1vLmxlbmd0aDtpPHM7KytpKWUrPWAke3IrZW5jb2RlVVJJQ29tcG9uZW50KG9baV0pfSZgO2Vsc2UgZSs9YCR7citlbmNvZGVVUklDb21wb25lbnQobyl9JmB9cmV0dXJuIGU9ZS5zbGljZSgwLC0xKSxlfXZhciBuQSxvQT0kKCgpPT57YXQoKTtqdCgpO25BPXB4fSk7ZnVuY3Rpb24gZHgodCl7aWYoIWgodCkpdGhyb3cgbmV3IEwoInF1ZXJ5U3RyaW5nIGlzIHJlcXVpcmVkLiIpO2xldCBlPXt9O2lmKHQ9PT0iIilyZXR1cm4gZTtsZXQgbj10LnJlcGxhY2UoL1wrL2csIiUyMCIpLnNwbGl0KC9bJjtdLyk7Zm9yKGxldCBvPTAscj1uLmxlbmd0aDtvPHI7KytvKXtsZXQgaT1uW29dLnNwbGl0KCI9Iikscz1kZWNvZGVVUklDb21wb25lbnQoaVswXSksZj1pWzFdO2goZik/Zj1kZWNvZGVVUklDb21wb25lbnQoZik6Zj0iIjtsZXQgdT1lW3NdO3R5cGVvZiB1PT0ic3RyaW5nIj9lW3NdPVt1LGZdOkFycmF5LmlzQXJyYXkodSk/dS5wdXNoKGYpOmVbc109Zn1yZXR1cm4gZX12YXIgckEsaUE9JCgoKT0+e2F0KCk7anQoKTtyQT1keH0pO3ZhciBteCxDbixjcD0kKCgpPT57bXg9e1VOSVNTVUVEOjAsSVNTVUVEOjEsQUNUSVZFOjIsUkVDRUlWRUQ6MyxDQU5DRUxMRUQ6NCxGQUlMRUQ6NX0sQ249T2JqZWN0LmZyZWV6ZShteCl9KTt2YXIgaHgsc0EsY0E9JCgoKT0+e2h4PXtURVJSQUlOOjAsSU1BR0VSWToxLFRJTEVTM0Q6MixPVEhFUjozfSxzQT1PYmplY3QuZnJlZXplKGh4KX0pO2Z1bmN0aW9uIGFwKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBlPXQudGhyb3R0bGVCeVNlcnZlcj8/ITEsbj10LnRocm90dGxlPz8hMTt0aGlzLnVybD10LnVybCx0aGlzLnJlcXVlc3RGdW5jdGlvbj10LnJlcXVlc3RGdW5jdGlvbix0aGlzLmNhbmNlbEZ1bmN0aW9uPXQuY2FuY2VsRnVuY3Rpb24sdGhpcy5wcmlvcml0eUZ1bmN0aW9uPXQucHJpb3JpdHlGdW5jdGlvbix0aGlzLnByaW9yaXR5PXQucHJpb3JpdHk/PzAsdGhpcy50aHJvdHRsZT1uLHRoaXMudGhyb3R0bGVCeVNlcnZlcj1lLHRoaXMudHlwZT10LnR5cGU/P3NBLk9USEVSLHRoaXMuc2VydmVyS2V5PXQuc2VydmVyS2V5LHRoaXMuc3RhdGU9Q24uVU5JU1NVRUQsdGhpcy5kZWZlcnJlZD12b2lkIDAsdGhpcy5jYW5jZWxsZWQ9ITF9dmFyIGFBLGZBPSQoKCk9Pnt5ZSgpO2F0KCk7Y3AoKTtjQSgpO2FwLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGxlZD0hMH07YXAucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPyh0LnVybD10aGlzLnVybCx0LnJlcXVlc3RGdW5jdGlvbj10aGlzLnJlcXVlc3RGdW5jdGlvbix0LmNhbmNlbEZ1bmN0aW9uPXRoaXMuY2FuY2VsRnVuY3Rpb24sdC5wcmlvcml0eUZ1bmN0aW9uPXRoaXMucHJpb3JpdHlGdW5jdGlvbix0LnByaW9yaXR5PXRoaXMucHJpb3JpdHksdC50aHJvdHRsZT10aGlzLnRocm90dGxlLHQudGhyb3R0bGVCeVNlcnZlcj10aGlzLnRocm90dGxlQnlTZXJ2ZXIsdC50eXBlPXRoaXMudHlwZSx0LnNlcnZlcktleT10aGlzLnNlcnZlcktleSx0LnN0YXRlPUNuLlVOSVNTVUVELHQuZGVmZXJyZWQ9dm9pZCAwLHQuY2FuY2VsbGVkPSExLHQpOm5ldyBhcCh0aGlzKX07YUE9YXB9KTtmdW5jdGlvbiBfeCh0KXtsZXQgZT17fTtpZighdClyZXR1cm4gZTtsZXQgbj10LnNwbGl0KGBccgpgKTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoOysrbyl7bGV0IHI9bltvXSxpPXIuaW5kZXhPZigiOiAiKTtpZihpPjApe2xldCBzPXIuc3Vic3RyaW5nKDAsaSksZj1yLnN1YnN0cmluZyhpKzIpO2Vbc109Zn19cmV0dXJuIGV9dmFyIHVBLGxBPSQoKCk9Pnt1QT1feH0pO2Z1bmN0aW9uIHBBKHQsZSxuKXt0aGlzLnN0YXR1c0NvZGU9dCx0aGlzLnJlc3BvbnNlPWUsdGhpcy5yZXNwb25zZUhlYWRlcnM9bix0eXBlb2YgdGhpcy5yZXNwb25zZUhlYWRlcnM9PSJzdHJpbmciJiYodGhpcy5yZXNwb25zZUhlYWRlcnM9dUEodGhpcy5yZXNwb25zZUhlYWRlcnMpKX12YXIgdWYsZEE9JCgoKT0+e2F0KCk7bEEoKTtwQS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtsZXQgdD0iUmVxdWVzdCBoYXMgZmFpbGVkLiI7cmV0dXJuIGgodGhpcy5zdGF0dXNDb2RlKSYmKHQrPWAgU3RhdHVzIENvZGU6ICR7dGhpcy5zdGF0dXNDb2RlfWApLHR9O3VmPXBBfSk7ZnVuY3Rpb24gbGYoKXt0aGlzLl9saXN0ZW5lcnM9W10sdGhpcy5fc2NvcGVzPVtdLHRoaXMuX3RvUmVtb3ZlPVtdLHRoaXMuX2luc2lkZVJhaXNlRXZlbnQ9ITF9ZnVuY3Rpb24geXgodCxlKXtyZXR1cm4gZS10fXZhciBtQSxoQT0kKCgpPT57V3QoKTthdCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxmLnByb3RvdHlwZSx7bnVtYmVyT2ZMaXN0ZW5lcnM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saXN0ZW5lcnMubGVuZ3RoLXRoaXMuX3RvUmVtb3ZlLmxlbmd0aH19fSk7bGYucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5mdW5jKCJsaXN0ZW5lciIsdCksdGhpcy5fbGlzdGVuZXJzLnB1c2godCksdGhpcy5fc2NvcGVzLnB1c2goZSk7bGV0IG49dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxlKX19O2xmLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YuZnVuYygibGlzdGVuZXIiLHQpO2xldCBuPXRoaXMuX2xpc3RlbmVycyxvPXRoaXMuX3Njb3BlcyxyPS0xO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKG5baV09PT10JiZvW2ldPT09ZSl7cj1pO2JyZWFrfXJldHVybiByIT09LTE/KHRoaXMuX2luc2lkZVJhaXNlRXZlbnQ/KHRoaXMuX3RvUmVtb3ZlLnB1c2gociksbltyXT12b2lkIDAsb1tyXT12b2lkIDApOihuLnNwbGljZShyLDEpLG8uc3BsaWNlKHIsMSkpLCEwKTohMX07bGYucHJvdG90eXBlLnJhaXNlRXZlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9pbnNpZGVSYWlzZUV2ZW50PSEwO2xldCB0LGU9dGhpcy5fbGlzdGVuZXJzLG49dGhpcy5fc2NvcGVzLG89ZS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKXtsZXQgaT1lW3RdO2goaSkmJmVbdF0uYXBwbHkoblt0XSxhcmd1bWVudHMpfWxldCByPXRoaXMuX3RvUmVtb3ZlO2lmKG89ci5sZW5ndGgsbz4wKXtmb3Ioci5zb3J0KHl4KSx0PTA7dDxvO3QrKyl7bGV0IGk9clt0XTtlLnNwbGljZShpLDEpLG4uc3BsaWNlKGksMSl9ci5sZW5ndGg9MH10aGlzLl9pbnNpZGVSYWlzZUV2ZW50PSExfTttQT1sZn0pO2Z1bmN0aW9uIEhzKHQpe3kudHlwZU9mLm9iamVjdCgib3B0aW9ucyIsdCkseS5kZWZpbmVkKCJvcHRpb25zLmNvbXBhcmF0b3IiLHQuY29tcGFyYXRvciksdGhpcy5fY29tcGFyYXRvcj10LmNvbXBhcmF0b3IsdGhpcy5fYXJyYXk9W10sdGhpcy5fbGVuZ3RoPTAsdGhpcy5fbWF4aW11bUxlbmd0aD12b2lkIDB9ZnVuY3Rpb24gSG0odCxlLG4pe2xldCBvPXRbZV07dFtlXT10W25dLHRbbl09b312YXIgX0EseUE9JCgoKT0+e1d0KCk7YXQoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhIcy5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xlbmd0aH19LGludGVybmFsQXJyYXk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheX19LG1heGltdW1MZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhpbXVtTGVuZ3RofSxzZXQ6ZnVuY3Rpb24odCl7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIm1heGltdW1MZW5ndGgiLHQsMCk7bGV0IGU9dGhpcy5fbGVuZ3RoO2lmKHQ8ZSl7bGV0IG49dGhpcy5fYXJyYXk7Zm9yKGxldCBvPXQ7bzxlOysrbyluW29dPXZvaWQgMDt0aGlzLl9sZW5ndGg9dCxuLmxlbmd0aD10fXRoaXMuX21heGltdW1MZW5ndGg9dH19LGNvbXBhcmF0b3I6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wYXJhdG9yfX19KTtIcy5wcm90b3R5cGUucmVzZXJ2ZT1mdW5jdGlvbih0KXt0PXQ/P3RoaXMuX2xlbmd0aCx0aGlzLl9hcnJheS5sZW5ndGg9dH07SHMucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24odCl7dD10Pz8wO2xldCBlPXRoaXMuX2xlbmd0aCxuPXRoaXMuX2NvbXBhcmF0b3Isbz10aGlzLl9hcnJheSxyPS0xLGk9ITA7Zm9yKDtpOyl7bGV0IHM9MioodCsxKSxmPXMtMTtmPGUmJm4ob1tmXSxvW3RdKTwwP3I9ZjpyPXQsczxlJiZuKG9bc10sb1tyXSk8MCYmKHI9cyksciE9PXQ/KEhtKG8scix0KSx0PXIpOmk9ITF9fTtIcy5wcm90b3R5cGUucmVzb3J0PWZ1bmN0aW9uKCl7bGV0IHQ9dGhpcy5fbGVuZ3RoO2ZvcihsZXQgZT1NYXRoLmNlaWwodC8yKTtlPj0wOy0tZSl0aGlzLmhlYXBpZnkoZSl9O0hzLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCl7eS5kZWZpbmVkKCJlbGVtZW50Iix0KTtsZXQgZT10aGlzLl9hcnJheSxuPXRoaXMuX2NvbXBhcmF0b3Isbz10aGlzLl9tYXhpbXVtTGVuZ3RoLHI9dGhpcy5fbGVuZ3RoKys7Zm9yKHI8ZS5sZW5ndGg/ZVtyXT10OmUucHVzaCh0KTtyIT09MDspe2xldCBzPU1hdGguZmxvb3IoKHItMSkvMik7aWYobihlW3JdLGVbc10pPDApSG0oZSxyLHMpLHI9cztlbHNlIGJyZWFrfWxldCBpO3JldHVybiBoKG8pJiZ0aGlzLl9sZW5ndGg+byYmKGk9ZVtvXSx0aGlzLl9sZW5ndGg9byksaX07SHMucHJvdG90eXBlLnBvcD1mdW5jdGlvbih0KXtpZih0PXQ/PzAsdGhpcy5fbGVuZ3RoPT09MClyZXR1cm47eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuKCJpbmRleCIsdCx0aGlzLl9sZW5ndGgpO2xldCBlPXRoaXMuX2FycmF5LG49ZVt0XTtyZXR1cm4gSG0oZSx0LC0tdGhpcy5fbGVuZ3RoKSx0aGlzLmhlYXBpZnkodCksZVt0aGlzLl9sZW5ndGhdPXZvaWQgMCxufTtfQT1Ic30pO2Z1bmN0aW9uIGd4KHQsZSl7cmV0dXJuIHQucHJpb3JpdHktZS5wcmlvcml0eX1mdW5jdGlvbiBUbigpe31mdW5jdGlvbiBnQSh0KXtoKHQucHJpb3JpdHlGdW5jdGlvbikmJih0LnByaW9yaXR5PXQucHJpb3JpdHlGdW5jdGlvbigpKX1mdW5jdGlvbiBBQSh0KXtyZXR1cm4gdC5zdGF0ZT09PUNuLlVOSVNTVUVEJiYodC5zdGF0ZT1Dbi5JU1NVRUQsdC5kZWZlcnJlZD1qcygpKSx0LmRlZmVycmVkLnByb21pc2V9ZnVuY3Rpb24gYngodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHQuc3RhdGU9PT1Dbi5DQU5DRUxMRUQpcmV0dXJuO2xldCBuPXQuZGVmZXJyZWQ7LS1qZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLC0tQ2lbdC5zZXJ2ZXJLZXldLHVwLnJhaXNlRXZlbnQoKSx0LnN0YXRlPUNuLlJFQ0VJVkVELHQuZGVmZXJyZWQ9dm9pZCAwLG4ucmVzb2x2ZShlKX19ZnVuY3Rpb24gVHgodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3Quc3RhdGUhPT1Dbi5DQU5DRUxMRUQmJigrK2plLm51bWJlck9mRmFpbGVkUmVxdWVzdHMsLS1qZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLC0tQ2lbdC5zZXJ2ZXJLZXldLHVwLnJhaXNlRXZlbnQoZSksdC5zdGF0ZT1Dbi5GQUlMRUQsdC5kZWZlcnJlZC5yZWplY3QoZSkpfX1mdW5jdGlvbiBiQSh0KXtsZXQgZT1BQSh0KTtyZXR1cm4gdC5zdGF0ZT1Dbi5BQ1RJVkUsZWkucHVzaCh0KSwrK2plLm51bWJlck9mQWN0aXZlUmVxdWVzdHMsKytqZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzRXZlciwrK0NpW3Quc2VydmVyS2V5XSx0LnJlcXVlc3RGdW5jdGlvbigpLnRoZW4oYngodCkpLmNhdGNoKFR4KHQpKSxlfWZ1bmN0aW9uIHFzKHQpe2xldCBlPXQuc3RhdGU9PT1Dbi5BQ1RJVkU7aWYodC5zdGF0ZT1Dbi5DQU5DRUxMRUQsKytqZS5udW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzLGgodC5kZWZlcnJlZCkpe2xldCBuPXQuZGVmZXJyZWQ7dC5kZWZlcnJlZD12b2lkIDAsbi5yZWplY3QoKX1lJiYoLS1qZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLC0tQ2lbdC5zZXJ2ZXJLZXldLCsramUubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0cyksaCh0LmNhbmNlbEZ1bmN0aW9uKSYmdC5jYW5jZWxGdW5jdGlvbigpfWZ1bmN0aW9uIHd4KCl7VG4uZGVidWdTaG93U3RhdGlzdGljcyYmKGplLm51bWJlck9mQWN0aXZlUmVxdWVzdHM9PT0wJiZqZS5sYXN0TnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cz4wJiYoamUubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0cz4wJiYoY29uc29sZS5sb2coYE51bWJlciBvZiBhdHRlbXB0ZWQgcmVxdWVzdHM6ICR7amUubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0c31gKSxqZS5udW1iZXJPZkF0dGVtcHRlZFJlcXVlc3RzPTApLGplLm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM+MCYmKGNvbnNvbGUubG9nKGBOdW1iZXIgb2YgY2FuY2VsbGVkIHJlcXVlc3RzOiAke2plLm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHN9YCksamUubnVtYmVyT2ZDYW5jZWxsZWRSZXF1ZXN0cz0wKSxqZS5udW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzPjAmJihjb25zb2xlLmxvZyhgTnVtYmVyIG9mIGNhbmNlbGxlZCBhY3RpdmUgcmVxdWVzdHM6ICR7amUubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0c31gKSxqZS5udW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzPTApLGplLm51bWJlck9mRmFpbGVkUmVxdWVzdHM+MCYmKGNvbnNvbGUubG9nKGBOdW1iZXIgb2YgZmFpbGVkIHJlcXVlc3RzOiAke2plLm51bWJlck9mRmFpbGVkUmVxdWVzdHN9YCksamUubnVtYmVyT2ZGYWlsZWRSZXF1ZXN0cz0wKSksamUubGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM9amUubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cyl9dmFyIGZwLGplLCRjLFRvLGVpLENpLEF4LHVwLGxwLFRBPSQoKCk9PntmcD1kcih6cygpLDEpO1d0KCk7VW0oKTthdCgpO2hBKCk7eUEoKTt6bSgpO2ptKCk7Y3AoKTtqZT17bnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0czowLG51bWJlck9mQWN0aXZlUmVxdWVzdHM6MCxudW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzOjAsbnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0czowLG51bWJlck9mRmFpbGVkUmVxdWVzdHM6MCxudW1iZXJPZkFjdGl2ZVJlcXVlc3RzRXZlcjowLGxhc3ROdW1iZXJPZkFjdGl2ZVJlcXVlc3RzOjB9LCRjPTIwLFRvPW5ldyBfQSh7Y29tcGFyYXRvcjpneH0pO1RvLm1heGltdW1MZW5ndGg9JGM7VG8ucmVzZXJ2ZSgkYyk7ZWk9W10sQ2k9e30sQXg9dHlwZW9mIGRvY3VtZW50PCJ1Ij9uZXcgZnAuZGVmYXVsdChkb2N1bWVudC5sb2NhdGlvbi5ocmVmKTpuZXcgZnAuZGVmYXVsdCx1cD1uZXcgbUE7VG4ubWF4aW11bVJlcXVlc3RzPTUwO1RuLm1heGltdW1SZXF1ZXN0c1BlclNlcnZlcj0xODtUbi5yZXF1ZXN0c0J5U2VydmVyPXt9O1RuLnRocm90dGxlUmVxdWVzdHM9ITA7VG4uZGVidWdTaG93U3RhdGlzdGljcz0hMTtUbi5yZXF1ZXN0Q29tcGxldGVkRXZlbnQ9dXA7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVG4se3N0YXRpc3RpY3M6e2dldDpmdW5jdGlvbigpe3JldHVybiBqZX19LHByaW9yaXR5SGVhcExlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuICRjfSxzZXQ6ZnVuY3Rpb24odCl7aWYodDwkYylmb3IoO1RvLmxlbmd0aD50Oyl7bGV0IGU9VG8ucG9wKCk7cXMoZSl9JGM9dCxUby5tYXhpbXVtTGVuZ3RoPXQsVG8ucmVzZXJ2ZSh0KX19fSk7VG4uc2VydmVySGFzT3BlblNsb3RzPWZ1bmN0aW9uKHQsZSl7ZT1lPz8xO2xldCBuPVRuLnJlcXVlc3RzQnlTZXJ2ZXJbdF0/P1RuLm1heGltdW1SZXF1ZXN0c1BlclNlcnZlcjtyZXR1cm4gQ2lbdF0rZTw9bn07VG4uaGVhcEhhc09wZW5TbG90cz1mdW5jdGlvbih0KXtyZXR1cm4gVG8ubGVuZ3RoK3Q8PSRjfTtUbi51cGRhdGU9ZnVuY3Rpb24oKXtsZXQgdCxlLG49MCxvPWVpLmxlbmd0aDtmb3IodD0wO3Q8bzsrK3Qpe2lmKGU9ZWlbdF0sZS5jYW5jZWxsZWQmJnFzKGUpLGUuc3RhdGUhPT1Dbi5BQ1RJVkUpeysrbjtjb250aW51ZX1uPjAmJihlaVt0LW5dPWUpfWVpLmxlbmd0aC09bjtsZXQgcj1Uby5pbnRlcm5hbEFycmF5LGk9VG8ubGVuZ3RoO2Zvcih0PTA7dDxpOysrdClnQShyW3RdKTtUby5yZXNvcnQoKTtsZXQgcz1NYXRoLm1heChUbi5tYXhpbXVtUmVxdWVzdHMtZWkubGVuZ3RoLDApLGY9MDtmb3IoO2Y8cyYmVG8ubGVuZ3RoPjA7KXtpZihlPVRvLnBvcCgpLGUuY2FuY2VsbGVkKXtxcyhlKTtjb250aW51ZX1pZihlLnRocm90dGxlQnlTZXJ2ZXImJiFUbi5zZXJ2ZXJIYXNPcGVuU2xvdHMoZS5zZXJ2ZXJLZXkpKXtxcyhlKTtjb250aW51ZX1iQShlKSwrK2Z9d3goKX07VG4uZ2V0U2VydmVyS2V5PWZ1bmN0aW9uKHQpe3kudHlwZU9mLnN0cmluZygidXJsIix0KTtsZXQgZT1uZXcgZnAuZGVmYXVsdCh0KTtlLnNjaGVtZSgpPT09IiImJihlPWUuYWJzb2x1dGVUbyhBeCksZS5ub3JtYWxpemUoKSk7bGV0IG49ZS5hdXRob3JpdHkoKTsvOi8udGVzdChuKXx8KG49YCR7bn06JHtlLnNjaGVtZSgpPT09Imh0dHBzIj8iNDQzIjoiODAifWApO2xldCBvPUNpW25dO3JldHVybiBoKG8pfHwoQ2lbbl09MCksbn07VG4ucmVxdWVzdD1mdW5jdGlvbih0KXtpZih5LnR5cGVPZi5vYmplY3QoInJlcXVlc3QiLHQpLHkudHlwZU9mLnN0cmluZygicmVxdWVzdC51cmwiLHQudXJsKSx5LnR5cGVPZi5mdW5jKCJyZXF1ZXN0LnJlcXVlc3RGdW5jdGlvbiIsdC5yZXF1ZXN0RnVuY3Rpb24pLHNwKHQudXJsKXx8aXAodC51cmwpKXJldHVybiB1cC5yYWlzZUV2ZW50KCksdC5zdGF0ZT1Dbi5SRUNFSVZFRCx0LnJlcXVlc3RGdW5jdGlvbigpO2lmKCsramUubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0cyxoKHQuc2VydmVyS2V5KXx8KHQuc2VydmVyS2V5PVRuLmdldFNlcnZlcktleSh0LnVybCkpLFRuLnRocm90dGxlUmVxdWVzdHMmJnQudGhyb3R0bGVCeVNlcnZlciYmIVRuLnNlcnZlckhhc09wZW5TbG90cyh0LnNlcnZlcktleSkpcmV0dXJuO2lmKCFUbi50aHJvdHRsZVJlcXVlc3RzfHwhdC50aHJvdHRsZSlyZXR1cm4gYkEodCk7aWYoZWkubGVuZ3RoPj1Ubi5tYXhpbXVtUmVxdWVzdHMpcmV0dXJuO2dBKHQpO2xldCBlPVRvLmluc2VydCh0KTtpZihoKGUpKXtpZihlPT09dClyZXR1cm47cXMoZSl9cmV0dXJuIEFBKHQpfTtUbi5jbGVhckZvclNwZWNzPWZ1bmN0aW9uKCl7Zm9yKDtUby5sZW5ndGg+MDspe2xldCBlPVRvLnBvcCgpO3FzKGUpfWxldCB0PWVpLmxlbmd0aDtmb3IobGV0IGU9MDtlPHQ7KytlKXFzKGVpW2VdKTtlaS5sZW5ndGg9MCxDaT17fSxqZS5udW1iZXJPZkF0dGVtcHRlZFJlcXVlc3RzPTAsamUubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cz0wLGplLm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM9MCxqZS5udW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzPTAsamUubnVtYmVyT2ZGYWlsZWRSZXF1ZXN0cz0wLGplLm51bWJlck9mQWN0aXZlUmVxdWVzdHNFdmVyPTAsamUubGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM9MH07VG4ubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0c0J5U2VydmVyPWZ1bmN0aW9uKHQpe3JldHVybiBDaVt0XX07VG4ucmVxdWVzdEhlYXA9VG87bHA9VG59KTtmdW5jdGlvbiBPeCh0KXtsZXQgZT1uZXcgd0EuZGVmYXVsdCh0KTtlLm5vcm1hbGl6ZSgpO2xldCBuPWUuYXV0aG9yaXR5KCk7aWYobi5sZW5ndGghPT0wKXtpZihlLmF1dGhvcml0eShuKSxuLmluZGV4T2YoIkAiKSE9PS0xJiYobj1uLnNwbGl0KCJAIilbMV0pLG4uaW5kZXhPZigiOiIpPT09LTEpe2xldCBvPWUuc2NoZW1lKCk7aWYoby5sZW5ndGg9PT0wJiYobz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wsbz1vLnN1YnN0cmluZygwLG8ubGVuZ3RoLTEpKSxvPT09Imh0dHAiKW4rPSI6ODAiO2Vsc2UgaWYobz09PSJodHRwcyIpbis9Ijo0NDMiO2Vsc2UgcmV0dXJufXJldHVybiBufX12YXIgd0EscGYsWmMscW0sT0E9JCgoKT0+e3dBPWRyKHpzKCksMSk7YXQoKTtqdCgpO3BmPXt9LFpjPXt9O3BmLmFkZD1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJob3N0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpfHxlPD0wKXRocm93IG5ldyBMKCJwb3J0IGlzIHJlcXVpcmVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIpO2xldCBuPWAke3QudG9Mb3dlckNhc2UoKX06JHtlfWA7aChaY1tuXSl8fChaY1tuXT0hMCl9O3BmLnJlbW92ZT1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJob3N0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpfHxlPD0wKXRocm93IG5ldyBMKCJwb3J0IGlzIHJlcXVpcmVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIpO2xldCBuPWAke3QudG9Mb3dlckNhc2UoKX06JHtlfWA7aChaY1tuXSkmJmRlbGV0ZSBaY1tuXX07cGYuY29udGFpbnM9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEwoInVybCBpcyByZXF1aXJlZC4iKTtsZXQgZT1PeCh0KTtyZXR1cm4hIShoKGUpJiZoKFpjW2VdKSl9O3BmLmNsZWFyPWZ1bmN0aW9uKCl7WmM9e319O3FtPXBmfSk7ZnVuY3Rpb24ga3QodCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1QsdHlwZW9mIHQ9PSJzdHJpbmciJiYodD17dXJsOnR9KSx5LnR5cGVPZi5zdHJpbmcoIm9wdGlvbnMudXJsIix0LnVybCksdGhpcy5fdXJsPXZvaWQgMCx0aGlzLl90ZW1wbGF0ZVZhbHVlcz1uaSh0LnRlbXBsYXRlVmFsdWVzLHt9KSx0aGlzLl9xdWVyeVBhcmFtZXRlcnM9bmkodC5xdWVyeVBhcmFtZXRlcnMse30pLHRoaXMuaGVhZGVycz1uaSh0LmhlYWRlcnMse30pLHRoaXMucmVxdWVzdD10LnJlcXVlc3Q/P25ldyBhQSx0aGlzLnByb3h5PXQucHJveHksdGhpcy5yZXRyeUNhbGxiYWNrPXQucmV0cnlDYWxsYmFjayx0aGlzLnJldHJ5QXR0ZW1wdHM9dC5yZXRyeUF0dGVtcHRzPz8wLHRoaXMuX3JldHJ5Q291bnQ9MCx0LnBhcnNlVXJsPz8hMD90aGlzLnBhcnNlVXJsKHQudXJsLCEwLCEwKTp0aGlzLl91cmw9dC51cmwsdGhpcy5fY3JlZGl0cz10LmNyZWRpdHN9ZnVuY3Rpb24gbmkodCxlKXtyZXR1cm4gaCh0KT9ZYyh0KTplfWZ1bmN0aW9uIEV4KHQpe3JldHVybiB0Lmxlbmd0aD09PTA/e306dC5pbmRleE9mKCI9Iik9PT0tMT97W3RdOnZvaWQgMH06ckEodCl9ZnVuY3Rpb24gZHAodCxlLG4pe2lmKCFuKXJldHVybiBfcih0LGUpO2xldCBvPVljKHQsITApO2ZvcihsZXQgciBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkocikpe2xldCBpPW9bcl0scz1lW3JdO2goaSk/KEFycmF5LmlzQXJyYXkoaSl8fChpPW9bcl09W2ldKSxvW3JdPWkuY29uY2F0KHMpKTpvW3JdPUFycmF5LmlzQXJyYXkocyk/cy5zbGljZSgpOnN9cmV0dXJuIG99ZnVuY3Rpb24gUngodCl7bGV0IGU9T2JqZWN0LmtleXModCk7cmV0dXJuIGUubGVuZ3RoPT09MD8iIjplLmxlbmd0aD09PTEmJiFoKHRbZVswXV0pP2A/JHtlWzBdfWA6YD8ke25BKHQpfWB9ZnVuY3Rpb24gS20odCl7bGV0IGU9dC5yZXNvdXJjZSxuPXQuZmxpcFksbz10LnNraXBDb2xvclNwYWNlQ29udmVyc2lvbixyPXQucHJlZmVySW1hZ2VCaXRtYXAsaT1lLnJlcXVlc3Q7aS51cmw9ZS51cmwsaS5yZXF1ZXN0RnVuY3Rpb249ZnVuY3Rpb24oKXtsZXQgZj0hMTshZS5pc0RhdGFVcmkmJiFlLmlzQmxvYlVyaSYmKGY9ZS5pc0Nyb3NzT3JpZ2luVXJsKTtsZXQgdT1qcygpO3JldHVybiBrdC5fSW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlKGksZix1LG4sbyxyKSx1LnByb21pc2V9O2xldCBzPWxwLnJlcXVlc3QoaSk7aWYoaChzKSlyZXR1cm4gcy5jYXRjaChmdW5jdGlvbihmKXtyZXR1cm4gaS5zdGF0ZSE9PUNuLkZBSUxFRD9Qcm9taXNlLnJlamVjdChmKTplLnJldHJ5T25FcnJvcihmKS50aGVuKGZ1bmN0aW9uKHUpe3JldHVybiB1PyhpLnN0YXRlPUNuLlVOSVNTVUVELGkuZGVmZXJyZWQ9dm9pZCAwLEttKHtyZXNvdXJjZTplLGZsaXBZOm4sc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOm8scHJlZmVySW1hZ2VCaXRtYXA6cn0pKTpQcm9taXNlLnJlamVjdChmKX0pfSl9ZnVuY3Rpb24gQ0EodCxlLG4pe2xldCBvPXt9O29bZV09bix0LnNldFF1ZXJ5UGFyYW1ldGVycyhvKTtsZXQgcj10LnJlcXVlc3QsaT10LnVybDtyLnVybD1pLHIucmVxdWVzdEZ1bmN0aW9uPWZ1bmN0aW9uKCl7bGV0IGY9anMoKTtyZXR1cm4gd2luZG93W25dPWZ1bmN0aW9uKHUpe2YucmVzb2x2ZSh1KTt0cnl7ZGVsZXRlIHdpbmRvd1tuXX1jYXRjaHt3aW5kb3dbbl09dm9pZCAwfX0sa3QuX0ltcGxlbWVudGF0aW9ucy5sb2FkQW5kRXhlY3V0ZVNjcmlwdChpLG4sZiksZi5wcm9taXNlfTtsZXQgcz1scC5yZXF1ZXN0KHIpO2lmKGgocykpcmV0dXJuIHMuY2F0Y2goZnVuY3Rpb24oZil7cmV0dXJuIHIuc3RhdGUhPT1Dbi5GQUlMRUQ/UHJvbWlzZS5yZWplY3QoZik6dC5yZXRyeU9uRXJyb3IoZikudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gdT8oci5zdGF0ZT1Dbi5VTklTU1VFRCxyLmRlZmVycmVkPXZvaWQgMCxDQSh0LGUsbikpOlByb21pc2UucmVqZWN0KGYpfSl9KX1mdW5jdGlvbiBXbSh0KXtpZih0LnN0YXRlPT09Q24uSVNTVUVEfHx0LnN0YXRlPT09Q24uQUNUSVZFKXRocm93IG5ldyBBZSgiVGhlIFJlc291cmNlIGlzIGFscmVhZHkgYmVpbmcgZmV0Y2hlZC4iKTt0LnN0YXRlPUNuLlVOSVNTVUVELHQuZGVmZXJyZWQ9dm9pZCAwfWZ1bmN0aW9uIHBwKHQsZSl7bGV0IG49ZGVjb2RlVVJJQ29tcG9uZW50KGUpO3JldHVybiB0P2F0b2Iobik6bn1mdW5jdGlvbiBFQSh0LGUpe2xldCBuPXBwKHQsZSksbz1uZXcgQXJyYXlCdWZmZXIobi5sZW5ndGgpLHI9bmV3IFVpbnQ4QXJyYXkobyk7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspcltpXT1uLmNoYXJDb2RlQXQoaSk7cmV0dXJuIG99ZnVuY3Rpb24gQ3godCxlKXtlPWU/PyIiO2xldCBuPXRbMV0sbz0hIXRbMl0scj10WzNdLGkscztzd2l0Y2goZSl7Y2FzZSIiOmNhc2UidGV4dCI6cmV0dXJuIHBwKG8scik7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIEVBKG8scik7Y2FzZSJibG9iIjpyZXR1cm4gaT1FQShvLHIpLG5ldyBCbG9iKFtpXSx7dHlwZTpufSk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIHM9bmV3IERPTVBhcnNlcixzLnBhcnNlRnJvbVN0cmluZyhwcChvLHIpLG4pO2Nhc2UianNvbiI6cmV0dXJuIEpTT04ucGFyc2UocHAobyxyKSk7ZGVmYXVsdDp0aHJvdyBuZXcgTChgVW5oYW5kbGVkIHJlc3BvbnNlVHlwZTogJHtlfWApfX1mdW5jdGlvbiB4eCh0LGUsbixvLHIsaSxzKXtmZXRjaCh0LHttZXRob2Q6bixoZWFkZXJzOnJ9KS50aGVuKGFzeW5jIGY9PntpZighZi5vayl7bGV0IHU9e307Zi5oZWFkZXJzLmZvckVhY2goKGMsbCk9Pnt1W2xdPWN9KSxpLnJlamVjdChuZXcgdWYoZi5zdGF0dXMsZix1KSk7cmV0dXJufXN3aXRjaChlKXtjYXNlInRleHQiOmkucmVzb2x2ZShmLnRleHQoKSk7YnJlYWs7Y2FzZSJqc29uIjppLnJlc29sdmUoZi5qc29uKCkpO2JyZWFrO2RlZmF1bHQ6aS5yZXNvbHZlKG5ldyBVaW50OEFycmF5KGF3YWl0IGYuYXJyYXlCdWZmZXIoKSkuYnVmZmVyKTticmVha319KS5jYXRjaCgoKT0+e2kucmVqZWN0KG5ldyB1Zil9KX12YXIgUkEsU0EsUWMsU3gsUHgsb2ksZGY9JCgoKT0+e1JBPWRyKHpzKCksMSk7azEoKTtXdCgpO1YxKCk7cnAoKTt5ZSgpO1VtKCk7YXQoKTtqdCgpO0dtKCk7SzEoKTtZMSgpO1oxKCk7em0oKTtKMSgpO2ptKCk7ZUEoKTtLdCgpO29BKCk7aUEoKTtmQSgpO2RBKCk7VEEoKTtjcCgpO0pyKCk7T0EoKTtTQT1mdW5jdGlvbigpe3RyeXtsZXQgdD1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIHQub3BlbigiR0VUIiwiIyIsITApLHQucmVzcG9uc2VUeXBlPSJibG9iIix0LnJlc3BvbnNlVHlwZT09PSJibG9iIn1jYXRjaHtyZXR1cm4hMX19KCk7a3QuY3JlYXRlSWZOZWVkZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBrdD90LmdldERlcml2ZWRSZXNvdXJjZSh7cmVxdWVzdDp0LnJlcXVlc3R9KTp0eXBlb2YgdCE9InN0cmluZyI/dDpuZXcga3Qoe3VybDp0fSl9O2t0LnN1cHBvcnRzSW1hZ2VCaXRtYXBPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGgoUWMpP1FjOnR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCE9ImZ1bmN0aW9uIj8oUWM9UHJvbWlzZS5yZXNvbHZlKCExKSxRYyk6KFFjPWt0LmZldGNoQmxvYih7dXJsOiJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQUlBQUFDUWQxUGVBQUFBQkdkQlRVRUFBRTRnM3JFaURnQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFERWxFUVZRSTEyTmc2R0FBQUFFVUFJbmdFM1ppQUFBQUFFbEZUa1N1UW1DQyJ9KS50aGVuKGZ1bmN0aW9uKGUpe2xldCBuPXtpbWFnZU9yaWVudGF0aW9uOiJmbGlwWSIscHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifTtyZXR1cm4gUHJvbWlzZS5hbGwoW2NyZWF0ZUltYWdlQml0bWFwKGUsbiksY3JlYXRlSW1hZ2VCaXRtYXAoZSldKX0pLnRoZW4oZnVuY3Rpb24oZSl7bGV0IG49Vm0oZVswXSksbz1WbShlWzFdKTtyZXR1cm4gblsxXSE9PW9bMV19KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSksUWMpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhrdCx7aXNCbG9iU3VwcG9ydGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gU0F9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGt0LnByb3RvdHlwZSx7cXVlcnlQYXJhbWV0ZXJzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbWV0ZXJzfX0sdGVtcGxhdGVWYWx1ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZW1wbGF0ZVZhbHVlc319LHVybDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VXJsQ29tcG9uZW50KCEwLCEwKX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMucGFyc2VVcmwodCwhMSwhMSl9fSxleHRlbnNpb246e2dldDpmdW5jdGlvbigpe3JldHVybiBYMSh0aGlzLl91cmwpfX0saXNEYXRhVXJpOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc3AodGhpcy5fdXJsKX19LGlzQmxvYlVyaTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGlwKHRoaXMuX3VybCl9fSxpc0Nyb3NzT3JpZ2luVXJsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUTEodGhpcy5fdXJsKX19LGhhc0hlYWRlcnM6e2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmhlYWRlcnMpLmxlbmd0aD4wfX0sY3JlZGl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWRpdHN9fX0pO2t0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFVybENvbXBvbmVudCghMCwhMCl9O2t0LnByb3RvdHlwZS5wYXJzZVVybD1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1uZXcgUkEuZGVmYXVsdCh0KSxpPUV4KHIucXVlcnkoKSk7dGhpcy5fcXVlcnlQYXJhbWV0ZXJzPWU/ZHAoaSx0aGlzLnF1ZXJ5UGFyYW1ldGVycyxuKTppLHIuc2VhcmNoKCIiKSxyLmZyYWdtZW50KCIiKSxoKG8pJiZyLnNjaGVtZSgpPT09IiImJihyPXIuYWJzb2x1dGVUbyhmZihvKSkpLHRoaXMuX3VybD1yLnRvU3RyaW5nKCl9O2t0LnByb3RvdHlwZS5nZXRVcmxDb21wb25lbnQ9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmlzRGF0YVVyaSlyZXR1cm4gdGhpcy5fdXJsO2xldCBuPXRoaXMuX3VybDt0JiYobj1gJHtufSR7UngodGhpcy5xdWVyeVBhcmFtZXRlcnMpfWApLG49bi5yZXBsYWNlKC8lN0IvZywieyIpLnJlcGxhY2UoLyU3RC9nLCJ9Iik7bGV0IG89dGhpcy5fdGVtcGxhdGVWYWx1ZXM7cmV0dXJuIE9iamVjdC5rZXlzKG8pLmxlbmd0aD4wJiYobj1uLnJlcGxhY2UoL3soLio/KX0vZyxmdW5jdGlvbihyLGkpe2xldCBzPW9baV07cmV0dXJuIGgocyk/ZW5jb2RlVVJJQ29tcG9uZW50KHMpOnJ9KSksZSYmaCh0aGlzLnByb3h5KSYmKG49dGhpcy5wcm94eS5nZXRVUkwobikpLG59O2t0LnByb3RvdHlwZS5zZXRRdWVyeVBhcmFtZXRlcnM9ZnVuY3Rpb24odCxlKXtlP3RoaXMuX3F1ZXJ5UGFyYW1ldGVycz1kcCh0aGlzLl9xdWVyeVBhcmFtZXRlcnMsdCwhMSk6dGhpcy5fcXVlcnlQYXJhbWV0ZXJzPWRwKHQsdGhpcy5fcXVlcnlQYXJhbWV0ZXJzLCExKX07a3QucHJvdG90eXBlLmFwcGVuZFF1ZXJ5UGFyYW1ldGVycz1mdW5jdGlvbih0KXt0aGlzLl9xdWVyeVBhcmFtZXRlcnM9ZHAodCx0aGlzLl9xdWVyeVBhcmFtZXRlcnMsITApfTtrdC5wcm90b3R5cGUuc2V0VGVtcGxhdGVWYWx1ZXM9ZnVuY3Rpb24odCxlKXtlP3RoaXMuX3RlbXBsYXRlVmFsdWVzPV9yKHRoaXMuX3RlbXBsYXRlVmFsdWVzLHQpOnRoaXMuX3RlbXBsYXRlVmFsdWVzPV9yKHQsdGhpcy5fdGVtcGxhdGVWYWx1ZXMpfTtrdC5wcm90b3R5cGUuZ2V0RGVyaXZlZFJlc291cmNlPWZ1bmN0aW9uKHQpe2xldCBlPXRoaXMuY2xvbmUoKTtpZihlLl9yZXRyeUNvdW50PTAsaCh0LnVybCkpe2xldCBuPXQucHJlc2VydmVRdWVyeVBhcmFtZXRlcnM/PyExO2UucGFyc2VVcmwodC51cmwsITAsbix0aGlzLl91cmwpfXJldHVybiBoKHQucXVlcnlQYXJhbWV0ZXJzKSYmKGUuX3F1ZXJ5UGFyYW1ldGVycz1fcih0LnF1ZXJ5UGFyYW1ldGVycyxlLnF1ZXJ5UGFyYW1ldGVycykpLGgodC50ZW1wbGF0ZVZhbHVlcykmJihlLl90ZW1wbGF0ZVZhbHVlcz1fcih0LnRlbXBsYXRlVmFsdWVzLGUudGVtcGxhdGVWYWx1ZXMpKSxoKHQuaGVhZGVycykmJihlLmhlYWRlcnM9X3IodC5oZWFkZXJzLGUuaGVhZGVycykpLGgodC5wcm94eSkmJihlLnByb3h5PXQucHJveHkpLGgodC5yZXF1ZXN0KSYmKGUucmVxdWVzdD10LnJlcXVlc3QpLGgodC5yZXRyeUNhbGxiYWNrKSYmKGUucmV0cnlDYWxsYmFjaz10LnJldHJ5Q2FsbGJhY2spLGgodC5yZXRyeUF0dGVtcHRzKSYmKGUucmV0cnlBdHRlbXB0cz10LnJldHJ5QXR0ZW1wdHMpLGV9O2t0LnByb3RvdHlwZS5yZXRyeU9uRXJyb3I9ZnVuY3Rpb24odCl7bGV0IGU9dGhpcy5yZXRyeUNhbGxiYWNrO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24ifHx0aGlzLl9yZXRyeUNvdW50Pj10aGlzLnJldHJ5QXR0ZW1wdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7bGV0IG49dGhpcztyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUodGhpcyx0KSkudGhlbihmdW5jdGlvbihvKXtyZXR1cm4rK24uX3JldHJ5Q291bnQsb30pfTtrdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGgodCk/KHQuX3VybD10aGlzLl91cmwsdC5fcXVlcnlQYXJhbWV0ZXJzPVljKHRoaXMuX3F1ZXJ5UGFyYW1ldGVycyksdC5fdGVtcGxhdGVWYWx1ZXM9WWModGhpcy5fdGVtcGxhdGVWYWx1ZXMpLHQuaGVhZGVycz1ZYyh0aGlzLmhlYWRlcnMpLHQucHJveHk9dGhpcy5wcm94eSx0LnJldHJ5Q2FsbGJhY2s9dGhpcy5yZXRyeUNhbGxiYWNrLHQucmV0cnlBdHRlbXB0cz10aGlzLnJldHJ5QXR0ZW1wdHMsdC5fcmV0cnlDb3VudD0wLHQucmVxdWVzdD10aGlzLnJlcXVlc3QuY2xvbmUoKSx0KTpuZXcga3Qoe3VybDp0aGlzLl91cmwscXVlcnlQYXJhbWV0ZXJzOnRoaXMucXVlcnlQYXJhbWV0ZXJzLHRlbXBsYXRlVmFsdWVzOnRoaXMudGVtcGxhdGVWYWx1ZXMsaGVhZGVyczp0aGlzLmhlYWRlcnMscHJveHk6dGhpcy5wcm94eSxyZXRyeUNhbGxiYWNrOnRoaXMucmV0cnlDYWxsYmFjayxyZXRyeUF0dGVtcHRzOnRoaXMucmV0cnlBdHRlbXB0cyxyZXF1ZXN0OnRoaXMucmVxdWVzdC5jbG9uZSgpLHBhcnNlVXJsOiExLGNyZWRpdHM6aCh0aGlzLmNyZWRpdHMpP3RoaXMuY3JlZGl0cy5zbGljZSgpOnZvaWQgMH0pfTtrdC5wcm90b3R5cGUuZ2V0QmFzZVVyaT1mdW5jdGlvbih0KXtyZXR1cm4gcTEodGhpcy5nZXRVcmxDb21wb25lbnQodCksdCl9O2t0LnByb3RvdHlwZS5hcHBlbmRGb3J3YXJkU2xhc2g9ZnVuY3Rpb24oKXt0aGlzLl91cmw9VTEodGhpcy5fdXJsKX07a3QucHJvdG90eXBlLmZldGNoQXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciJ9KX07a3QuZmV0Y2hBcnJheUJ1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGt0KHQpLmZldGNoQXJyYXlCdWZmZXIoKX07a3QucHJvdG90eXBlLmZldGNoQmxvYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoKHtyZXNwb25zZVR5cGU6ImJsb2IifSl9O2t0LmZldGNoQmxvYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGt0KHQpLmZldGNoQmxvYigpfTtrdC5wcm90b3R5cGUuZmV0Y2hJbWFnZT1mdW5jdGlvbih0KXt0PXQ/P050LkVNUFRZX09CSkVDVDtsZXQgZT10LnByZWZlckltYWdlQml0bWFwPz8hMSxuPXQucHJlZmVyQmxvYj8/ITEsbz10LmZsaXBZPz8hMSxyPXQuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uPz8hMTtpZihXbSh0aGlzLnJlcXVlc3QpLCFTQXx8dGhpcy5pc0RhdGFVcml8fHRoaXMuaXNCbG9iVXJpfHwhdGhpcy5oYXNIZWFkZXJzJiYhbilyZXR1cm4gS20oe3Jlc291cmNlOnRoaXMsZmxpcFk6byxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246cixwcmVmZXJJbWFnZUJpdG1hcDplfSk7bGV0IGk9dGhpcy5mZXRjaEJsb2IoKTtpZighaChpKSlyZXR1cm47bGV0IHMsZix1LGM7cmV0dXJuIGt0LnN1cHBvcnRzSW1hZ2VCaXRtYXBPcHRpb25zKCkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gcz1sLGY9cyYmZSxpfSkudGhlbihmdW5jdGlvbihsKXtpZighaChsKSlyZXR1cm47aWYoYz1sLGYpcmV0dXJuIGt0LmNyZWF0ZUltYWdlQml0bWFwRnJvbUJsb2IobCx7ZmxpcFk6byxwcmVtdWx0aXBseUFscGhhOiExLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjpyfSk7bGV0IHA9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobCk7cmV0dXJuIHU9bmV3IGt0KHt1cmw6cH0pLEttKHtyZXNvdXJjZTp1LGZsaXBZOm8sc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOnIscHJlZmVySW1hZ2VCaXRtYXA6ITF9KX0pLnRoZW4oZnVuY3Rpb24obCl7aWYoaChsKSlyZXR1cm4gbC5ibG9iPWMsZnx8d2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodS51cmwpLGx9KS5jYXRjaChmdW5jdGlvbihsKXtyZXR1cm4gaCh1KSYmd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodS51cmwpLGwuYmxvYj1jLFByb21pc2UucmVqZWN0KGwpfSl9O2t0LmZldGNoSW1hZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrdCh0KS5mZXRjaEltYWdlKHtmbGlwWTp0LmZsaXBZLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjp0LnNraXBDb2xvclNwYWNlQ29udmVyc2lvbixwcmVmZXJCbG9iOnQucHJlZmVyQmxvYixwcmVmZXJJbWFnZUJpdG1hcDp0LnByZWZlckltYWdlQml0bWFwfSl9O2t0LnByb3RvdHlwZS5mZXRjaFRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJ0ZXh0In0pfTtrdC5mZXRjaFRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrdCh0KS5mZXRjaFRleHQoKX07a3QucHJvdG90eXBlLmZldGNoSnNvbj1mdW5jdGlvbigpe2xldCB0PXRoaXMuZmV0Y2goe3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCovKjtxPTAuMDEifX0pO2lmKGgodCkpcmV0dXJuIHQudGhlbihmdW5jdGlvbihlKXtpZihoKGUpKXJldHVybiBKU09OLnBhcnNlKGUpfSl9O2t0LmZldGNoSnNvbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGt0KHQpLmZldGNoSnNvbigpfTtrdC5wcm90b3R5cGUuZmV0Y2hYTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJkb2N1bWVudCIsb3ZlcnJpZGVNaW1lVHlwZToidGV4dC94bWwifSl9O2t0LmZldGNoWE1MPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcga3QodCkuZmV0Y2hYTUwoKX07a3QucHJvdG90eXBlLmZldGNoSnNvbnA9ZnVuY3Rpb24odCl7dD10Pz8iY2FsbGJhY2siLFdtKHRoaXMucmVxdWVzdCk7bGV0IGU7ZG8gZT1gbG9hZEpzb25wJHtQLm5leHRSYW5kb21OdW1iZXIoKS50b1N0cmluZygpLnN1YnN0cmluZygyLDgpfWA7d2hpbGUoaCh3aW5kb3dbZV0pKTtyZXR1cm4gQ0EodGhpcyx0LGUpfTtrdC5mZXRjaEpzb25wPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcga3QodCkuZmV0Y2hKc29ucCh0LmNhbGxiYWNrUGFyYW1ldGVyTmFtZSl9O2t0LnByb3RvdHlwZS5fbWFrZVJlcXVlc3Q9ZnVuY3Rpb24odCl7bGV0IGU9dGhpcztXbShlLnJlcXVlc3QpO2xldCBuPWUucmVxdWVzdCxvPWUudXJsO24udXJsPW8sbi5yZXF1ZXN0RnVuY3Rpb249ZnVuY3Rpb24oKXtsZXQgaT10LnJlc3BvbnNlVHlwZSxzPV9yKHQuaGVhZGVycyxlLmhlYWRlcnMpLGY9dC5vdmVycmlkZU1pbWVUeXBlLHU9dC5tZXRob2QsYz10LmRhdGEsbD1qcygpLHA9a3QuX0ltcGxlbWVudGF0aW9ucy5sb2FkV2l0aFhocihvLGksdSxjLHMsbCxmKTtyZXR1cm4gaChwKSYmaChwLmFib3J0KSYmKG4uY2FuY2VsRnVuY3Rpb249ZnVuY3Rpb24oKXtwLmFib3J0KCl9KSxsLnByb21pc2V9O2xldCByPWxwLnJlcXVlc3Qobik7aWYoaChyKSlyZXR1cm4gci50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBuLmNhbmNlbEZ1bmN0aW9uPXZvaWQgMCxpfSkuY2F0Y2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uY2FuY2VsRnVuY3Rpb249dm9pZCAwLG4uc3RhdGUhPT1Dbi5GQUlMRUQ/UHJvbWlzZS5yZWplY3QoaSk6ZS5yZXRyeU9uRXJyb3IoaSkudGhlbihmdW5jdGlvbihzKXtyZXR1cm4gcz8obi5zdGF0ZT1Dbi5VTklTU1VFRCxuLmRlZmVycmVkPXZvaWQgMCxlLmZldGNoKHQpKTpQcm9taXNlLnJlamVjdChpKX0pfSl9O1N4PS9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvO2t0LnByb3RvdHlwZS5mZXRjaD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uaSh0LHt9KSx0Lm1ldGhvZD0iR0VUIix0aGlzLl9tYWtlUmVxdWVzdCh0KX07a3QuZmV0Y2g9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrdCh0KS5mZXRjaCh7cmVzcG9uc2VUeXBlOnQucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6dC5vdmVycmlkZU1pbWVUeXBlfSl9O2t0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bmkodCx7fSksdC5tZXRob2Q9IkRFTEVURSIsdGhpcy5fbWFrZVJlcXVlc3QodCl9O2t0LmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGt0KHQpLmRlbGV0ZSh7cmVzcG9uc2VUeXBlOnQucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6dC5vdmVycmlkZU1pbWVUeXBlLGRhdGE6dC5kYXRhfSl9O2t0LnByb3RvdHlwZS5oZWFkPWZ1bmN0aW9uKHQpe3JldHVybiB0PW5pKHQse30pLHQubWV0aG9kPSJIRUFEIix0aGlzLl9tYWtlUmVxdWVzdCh0KX07a3QuaGVhZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGt0KHQpLmhlYWQoe3Jlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSxvdmVycmlkZU1pbWVUeXBlOnQub3ZlcnJpZGVNaW1lVHlwZX0pfTtrdC5wcm90b3R5cGUub3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdD1uaSh0LHt9KSx0Lm1ldGhvZD0iT1BUSU9OUyIsdGhpcy5fbWFrZVJlcXVlc3QodCl9O2t0Lm9wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBrdCh0KS5vcHRpb25zKHtyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTp0Lm92ZXJyaWRlTWltZVR5cGV9KX07a3QucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJkYXRhIix0KSxlPW5pKGUse30pLGUubWV0aG9kPSJQT1NUIixlLmRhdGE9dCx0aGlzLl9tYWtlUmVxdWVzdChlKX07a3QucG9zdD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGt0KHQpLnBvc3QodC5kYXRhLHtyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTp0Lm92ZXJyaWRlTWltZVR5cGV9KX07a3QucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoImRhdGEiLHQpLGU9bmkoZSx7fSksZS5tZXRob2Q9IlBVVCIsZS5kYXRhPXQsdGhpcy5fbWFrZVJlcXVlc3QoZSl9O2t0LnB1dD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGt0KHQpLnB1dCh0LmRhdGEse3Jlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSxvdmVycmlkZU1pbWVUeXBlOnQub3ZlcnJpZGVNaW1lVHlwZX0pfTtrdC5wcm90b3R5cGUucGF0Y2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJkYXRhIix0KSxlPW5pKGUse30pLGUubWV0aG9kPSJQQVRDSCIsZS5kYXRhPXQsdGhpcy5fbWFrZVJlcXVlc3QoZSl9O2t0LnBhdGNoPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcga3QodCkucGF0Y2godC5kYXRhLHtyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTp0Lm92ZXJyaWRlTWltZVR5cGV9KX07a3QuX0ltcGxlbWVudGF0aW9ucz17fTtrdC5fSW1wbGVtZW50YXRpb25zLmxvYWRJbWFnZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe2xldCBvPW5ldyBJbWFnZTtvLm9ubG9hZD1mdW5jdGlvbigpe28ubmF0dXJhbFdpZHRoPT09MCYmby5uYXR1cmFsSGVpZ2h0PT09MCYmby53aWR0aD09PTAmJm8uaGVpZ2h0PT09MCYmKG8ud2lkdGg9MzAwLG8uaGVpZ2h0PTE1MCksbi5yZXNvbHZlKG8pfSxvLm9uZXJyb3I9ZnVuY3Rpb24ocil7bi5yZWplY3Qocil9LGUmJihxbS5jb250YWlucyh0KT9vLmNyb3NzT3JpZ2luPSJ1c2UtY3JlZGVudGlhbHMiOm8uY3Jvc3NPcmlnaW49IiIpLG8uc3JjPXR9O2t0Ll9JbXBsZW1lbnRhdGlvbnMuY3JlYXRlSW1hZ2U9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzPXQudXJsO2t0LnN1cHBvcnRzSW1hZ2VCaXRtYXBPcHRpb25zKCkudGhlbihmdW5jdGlvbihmKXtpZighKGYmJmkpKXtrdC5fSW1wbGVtZW50YXRpb25zLmxvYWRJbWFnZUVsZW1lbnQocyxlLG4pO3JldHVybn1sZXQgdT0iYmxvYiIsYz0iR0VUIixsPWpzKCkscD1rdC5fSW1wbGVtZW50YXRpb25zLmxvYWRXaXRoWGhyKHMsdSxjLHZvaWQgMCx2b2lkIDAsbCx2b2lkIDAsdm9pZCAwLHZvaWQgMCk7cmV0dXJuIGgocCkmJmgocC5hYm9ydCkmJih0LmNhbmNlbEZ1bmN0aW9uPWZ1bmN0aW9uKCl7cC5hYm9ydCgpfSksbC5wcm9taXNlLnRoZW4oZnVuY3Rpb24oZCl7aWYoIWgoZCkpe24ucmVqZWN0KG5ldyBBZShgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCAke3N9IGJ1dCBpdCBjb250YWluZWQgbm8gY29udGVudC5gKSk7cmV0dXJufXJldHVybiBrdC5jcmVhdGVJbWFnZUJpdG1hcEZyb21CbG9iKGQse2ZsaXBZOm8scHJlbXVsdGlwbHlBbHBoYTohMSxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246cn0pfSkudGhlbihmdW5jdGlvbihkKXtuLnJlc29sdmUoZCl9KX0pLmNhdGNoKGZ1bmN0aW9uKGYpe24ucmVqZWN0KGYpfSl9O2t0LmNyZWF0ZUltYWdlQml0bWFwRnJvbUJsb2I9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJvcHRpb25zIixlKSx5LnR5cGVPZi5ib29sKCJvcHRpb25zLmZsaXBZIixlLmZsaXBZKSx5LnR5cGVPZi5ib29sKCJvcHRpb25zLnByZW11bHRpcGx5QWxwaGEiLGUucHJlbXVsdGlwbHlBbHBoYSkseS50eXBlT2YuYm9vbCgib3B0aW9ucy5za2lwQ29sb3JTcGFjZUNvbnZlcnNpb24iLGUuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uKSxjcmVhdGVJbWFnZUJpdG1hcCh0LHtpbWFnZU9yaWVudGF0aW9uOmUuZmxpcFk/ImZsaXBZIjoibm9uZSIscHJlbXVsdGlwbHlBbHBoYTplLnByZW11bHRpcGx5QWxwaGE/InByZW11bHRpcGx5Ijoibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246ZS5za2lwQ29sb3JTcGFjZUNvbnZlcnNpb24/Im5vbmUiOiJkZWZhdWx0In0pfTtQeD10eXBlb2YgWE1MSHR0cFJlcXVlc3Q+InUiO2t0Ll9JbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHI9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7bGV0IGY9U3guZXhlYyh0KTtpZihmIT09bnVsbCl7aS5yZXNvbHZlKEN4KGYsZSkpO3JldHVybn1pZihQeCl7eHgodCxlLG4sbyxyLGkscyk7cmV0dXJufWxldCB1PW5ldyBYTUxIdHRwUmVxdWVzdDtpZihxbS5jb250YWlucyh0KSYmKHUud2l0aENyZWRlbnRpYWxzPSEwKSx1Lm9wZW4obix0LCEwKSxoKHMpJiZoKHUub3ZlcnJpZGVNaW1lVHlwZSkmJnUub3ZlcnJpZGVNaW1lVHlwZShzKSxoKHIpKWZvcihsZXQgbCBpbiByKXIuaGFzT3duUHJvcGVydHkobCkmJnUuc2V0UmVxdWVzdEhlYWRlcihsLHJbbF0pO2goZSkmJih1LnJlc3BvbnNlVHlwZT1lKTtsZXQgYz0hMTtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciJiYoYz10LmluZGV4T2YoImZpbGU6Ly8iKT09PTB8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubG9jYXRpb24ub3JpZ2luPT09ImZpbGU6Ly8iKSx1Lm9ubG9hZD1mdW5jdGlvbigpe2lmKCh1LnN0YXR1czwyMDB8fHUuc3RhdHVzPj0zMDApJiYhKGMmJnUuc3RhdHVzPT09MCkpe2kucmVqZWN0KG5ldyB1Zih1LnN0YXR1cyx1LnJlc3BvbnNlLHUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKTtyZXR1cm59bGV0IGw9dS5yZXNwb25zZSxwPXUucmVzcG9uc2VUeXBlO2lmKG49PT0iSEVBRCJ8fG49PT0iT1BUSU9OUyIpe2xldCBtPXUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkudHJpbSgpLnNwbGl0KC9bXHJcbl0rLyksXz17fTttLmZvckVhY2goZnVuY3Rpb24oZyl7bGV0IGI9Zy5zcGxpdCgiOiAiKSxUPWIuc2hpZnQoKTtfW1RdPWIuam9pbigiOiAiKX0pLGkucmVzb2x2ZShfKTtyZXR1cm59aWYodS5zdGF0dXM9PT0yMDQpaS5yZXNvbHZlKHZvaWQgMCk7ZWxzZSBpZihoKGwpJiYoIWgoZSl8fHA9PT1lKSlpLnJlc29sdmUobCk7ZWxzZSBpZihlPT09Impzb24iJiZ0eXBlb2YgbD09InN0cmluZyIpdHJ5e2kucmVzb2x2ZShKU09OLnBhcnNlKGwpKX1jYXRjaChkKXtpLnJlamVjdChkKX1lbHNlKHA9PT0iInx8cD09PSJkb2N1bWVudCIpJiZoKHUucmVzcG9uc2VYTUwpJiZ1LnJlc3BvbnNlWE1MLmhhc0NoaWxkTm9kZXMoKT9pLnJlc29sdmUodS5yZXNwb25zZVhNTCk6KHA9PT0iInx8cD09PSJ0ZXh0IikmJmgodS5yZXNwb25zZVRleHQpP2kucmVzb2x2ZSh1LnJlc3BvbnNlVGV4dCk6aS5yZWplY3QobmV3IEFlKCJJbnZhbGlkIFhNTEh0dHBSZXF1ZXN0IHJlc3BvbnNlIHR5cGUuIikpfSx1Lm9uZXJyb3I9ZnVuY3Rpb24obCl7aS5yZWplY3QobmV3IHVmKX0sdS5zZW5kKG8pLHV9O2t0Ll9JbXBsZW1lbnRhdGlvbnMubG9hZEFuZEV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0QSh0LGUpLmNhdGNoKGZ1bmN0aW9uKG8pe24ucmVqZWN0KG8pfSl9O2t0Ll9EZWZhdWx0SW1wbGVtZW50YXRpb25zPXt9O2t0Ll9EZWZhdWx0SW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlPWt0Ll9JbXBsZW1lbnRhdGlvbnMuY3JlYXRlSW1hZ2U7a3QuX0RlZmF1bHRJbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHI9a3QuX0ltcGxlbWVudGF0aW9ucy5sb2FkV2l0aFhocjtrdC5fRGVmYXVsdEltcGxlbWVudGF0aW9ucy5sb2FkQW5kRXhlY3V0ZVNjcmlwdD1rdC5fSW1wbGVtZW50YXRpb25zLmxvYWRBbmRFeGVjdXRlU2NyaXB0O2t0LkRFRkFVTFQ9T2JqZWN0LmZyZWV6ZShuZXcga3Qoe3VybDp0eXBlb2YgZG9jdW1lbnQ+InUiPyIiOmRvY3VtZW50LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXX0pKTtvaT1rdH0pO2Z1bmN0aW9uIGhmKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNULHRoaXMuX2RhdGVzPXZvaWQgMCx0aGlzLl9zYW1wbGVzPXZvaWQgMCx0aGlzLl9kYXRlQ29sdW1uPS0xLHRoaXMuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj0tMSx0aGlzLl95UG9sZVdhbmRlclJhZGlhbnNDb2x1bW49LTEsdGhpcy5fdXQxTWludXNVdGNTZWNvbmRzQ29sdW1uPS0xLHRoaXMuX3hDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj0tMSx0aGlzLl95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW49LTEsdGhpcy5fdGFpTWludXNVdGNTZWNvbmRzQ29sdW1uPS0xLHRoaXMuX2NvbHVtbkNvdW50PTAsdGhpcy5fbGFzdEluZGV4PS0xLHRoaXMuX2FkZE5ld0xlYXBTZWNvbmRzPXQuYWRkTmV3TGVhcFNlY29uZHM/PyEwLGgodC5kYXRhKT94QSh0aGlzLHQuZGF0YSk6eEEodGhpcyx7Y29sdW1uTmFtZXM6WyJkYXRlSXNvODYwMSIsIm1vZGlmaWVkSnVsaWFuRGF0ZVV0YyIsInhQb2xlV2FuZGVyUmFkaWFucyIsInlQb2xlV2FuZGVyUmFkaWFucyIsInV0MU1pbnVzVXRjU2Vjb25kcyIsImxlbmd0aE9mRGF5Q29ycmVjdGlvblNlY29uZHMiLCJ4Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiLCJ5Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiLCJ0YWlNaW51c1V0Y1NlY29uZHMiXSxzYW1wbGVzOltdfSl9ZnVuY3Rpb24gTXgodCxlKXtyZXR1cm4gR24uY29tcGFyZSh0Lmp1bGlhbkRhdGUsZSl9ZnVuY3Rpb24geEEodCxlKXtpZighaChlLmNvbHVtbk5hbWVzKSl0aHJvdyBuZXcgQWUoIkVycm9yIGluIGxvYWRlZCBFT1AgZGF0YTogVGhlIGNvbHVtbk5hbWVzIHByb3BlcnR5IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUuc2FtcGxlcykpdGhyb3cgbmV3IEFlKCJFcnJvciBpbiBsb2FkZWQgRU9QIGRhdGE6IFRoZSBzYW1wbGVzIHByb3BlcnR5IGlzIHJlcXVpcmVkLiIpO2xldCBuPWUuY29sdW1uTmFtZXMuaW5kZXhPZigibW9kaWZpZWRKdWxpYW5EYXRlVXRjIiksbz1lLmNvbHVtbk5hbWVzLmluZGV4T2YoInhQb2xlV2FuZGVyUmFkaWFucyIpLHI9ZS5jb2x1bW5OYW1lcy5pbmRleE9mKCJ5UG9sZVdhbmRlclJhZGlhbnMiKSxpPWUuY29sdW1uTmFtZXMuaW5kZXhPZigidXQxTWludXNVdGNTZWNvbmRzIikscz1lLmNvbHVtbk5hbWVzLmluZGV4T2YoInhDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFucyIpLGY9ZS5jb2x1bW5OYW1lcy5pbmRleE9mKCJ5Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiKSx1PWUuY29sdW1uTmFtZXMuaW5kZXhPZigidGFpTWludXNVdGNTZWNvbmRzIik7aWYobjwwfHxvPDB8fHI8MHx8aTwwfHxzPDB8fGY8MHx8dTwwKXRocm93IG5ldyBBZSgiRXJyb3IgaW4gbG9hZGVkIEVPUCBkYXRhOiBUaGUgY29sdW1uTmFtZXMgcHJvcGVydHkgbXVzdCBpbmNsdWRlIG1vZGlmaWVkSnVsaWFuRGF0ZVV0YywgeFBvbGVXYW5kZXJSYWRpYW5zLCB5UG9sZVdhbmRlclJhZGlhbnMsIHV0MU1pbnVzVXRjU2Vjb25kcywgeENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zLCB5Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMsIGFuZCB0YWlNaW51c1V0Y1NlY29uZHMgY29sdW1ucyIpO2xldCBjPXQuX3NhbXBsZXM9ZS5zYW1wbGVzLGw9dC5fZGF0ZXM9W107dC5fZGF0ZUNvbHVtbj1uLHQuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj1vLHQuX3lQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj1yLHQuX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbj1pLHQuX3hDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj1zLHQuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj1mLHQuX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbj11LHQuX2NvbHVtbkNvdW50PWUuY29sdW1uTmFtZXMubGVuZ3RoLHQuX2xhc3RJbmRleD12b2lkIDA7bGV0IHAsZD10Ll9hZGROZXdMZWFwU2Vjb25kcztmb3IobGV0IG09MCxfPWMubGVuZ3RoO208XzttKz10Ll9jb2x1bW5Db3VudCl7bGV0IGc9Y1ttK25dLGI9Y1ttK3VdLFQ9Zyt5bi5NT0RJRklFRF9KVUxJQU5fREFURV9ESUZGRVJFTkNFLE89bmV3IEduKFQsYixPZS5UQUkpO2lmKGwucHVzaChPKSxkKXtpZihiIT09cCYmaChwKSl7bGV0IEU9R24ubGVhcFNlY29uZHMsdz1WcyhFLE8sTXgpO2lmKHc8MCl7bGV0IEM9bmV3IFdlKE8sYik7RS5zcGxpY2UofncsMCxDKX19cD1ifX19ZnVuY3Rpb24gUEEodCxlLG4sbyxyKXtsZXQgaT1uKm87ci54UG9sZVdhbmRlcj1lW2krdC5feFBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSxyLnlQb2xlV2FuZGVyPWVbaSt0Ll95UG9sZVdhbmRlclJhZGlhbnNDb2x1bW5dLHIueFBvbGVPZmZzZXQ9ZVtpK3QuX3hDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0sci55UG9sZU9mZnNldD1lW2krdC5feUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uXSxyLnV0MU1pbnVzVXRjPWVbaSt0Ll91dDFNaW51c1V0Y1NlY29uZHNDb2x1bW5dfWZ1bmN0aW9uIG1mKHQsZSxuKXtyZXR1cm4gZSt0KihuLWUpfWZ1bmN0aW9uIE1BKHQsZSxuLG8scixpLHMpe2xldCBmPXQuX2NvbHVtbkNvdW50O2lmKGk+ZS5sZW5ndGgtMSlyZXR1cm4gcy54UG9sZVdhbmRlcj0wLHMueVBvbGVXYW5kZXI9MCxzLnhQb2xlT2Zmc2V0PTAscy55UG9sZU9mZnNldD0wLHMudXQxTWludXNVdGM9MCxzO2xldCB1PWVbcl0sYz1lW2ldO2lmKHUuZXF1YWxzKGMpfHxvLmVxdWFscyh1KSlyZXR1cm4gUEEodCxuLHIsZixzKSxzO2lmKG8uZXF1YWxzKGMpKXJldHVybiBQQSh0LG4saSxmLHMpLHM7bGV0IGw9R24uc2Vjb25kc0RpZmZlcmVuY2Uobyx1KS9Hbi5zZWNvbmRzRGlmZmVyZW5jZShjLHUpLHA9cipmLGQ9aSpmLG09bltwK3QuX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbl0sXz1uW2QrdC5fdXQxTWludXNVdGNTZWNvbmRzQ29sdW1uXSxnPV8tbTtpZihnPi41fHxnPC0uNSl7bGV0IGI9bltwK3QuX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbl0sVD1uW2QrdC5fdGFpTWludXNVdGNTZWNvbmRzQ29sdW1uXTtiIT09VCYmKGMuZXF1YWxzKG8pP209XzpfLT1ULWIpfXJldHVybiBzLnhQb2xlV2FuZGVyPW1mKGwsbltwK3QuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0sbltkK3QuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0pLHMueVBvbGVXYW5kZXI9bWYobCxuW3ArdC5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSxuW2QrdC5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSkscy54UG9sZU9mZnNldD1tZihsLG5bcCt0Ll94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dLG5bZCt0Ll94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dKSxzLnlQb2xlT2Zmc2V0PW1mKGwsbltwK3QuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0sbltkK3QuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0pLHMudXQxTWludXNVdGM9bWYobCxtLF8pLHN9dmFyIE5BLElBPSQoKCk9PntObSgpO1d0KCk7eWUoKTthdCgpO0ltKCk7dHAoKTtGbSgpO2RmKCk7SnIoKTtYbCgpO1lsKCk7aGYuZnJvbVVybD1hc3luYyBmdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgidXJsIix0KSxlPWU/P050LkVNUFRZX09CSkVDVDtsZXQgbj1vaS5jcmVhdGVJZk5lZWRlZCh0KSxvO3RyeXtvPWF3YWl0IG4uZmV0Y2hKc29uKCl9Y2F0Y2h7dGhyb3cgbmV3IEFlKGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXRyaWV2aW5nIHRoZSBFT1AgZGF0YSBmcm9tIHRoZSBVUkwgJHtuLnVybH0uYCl9cmV0dXJuIG5ldyBoZih7YWRkTmV3TGVhcFNlY29uZHM6ZS5hZGROZXdMZWFwU2Vjb25kcyxkYXRhOm99KX07aGYuTk9ORT1PYmplY3QuZnJlZXplKHtjb21wdXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgoZSk/KGUueFBvbGVXYW5kZXI9MCxlLnlQb2xlV2FuZGVyPTAsZS54UG9sZU9mZnNldD0wLGUueVBvbGVPZmZzZXQ9MCxlLnV0MU1pbnVzVXRjPTApOmU9bmV3IGNmKDAsMCwwLDAsMCksZX19KTtoZi5wcm90b3R5cGUuY29tcHV0ZT1mdW5jdGlvbih0LGUpe2lmKCFoKHRoaXMuX3NhbXBsZXMpKXJldHVybjtpZihoKGUpfHwoZT1uZXcgY2YoMCwwLDAsMCwwKSksdGhpcy5fc2FtcGxlcy5sZW5ndGg9PT0wKXJldHVybiBlLnhQb2xlV2FuZGVyPTAsZS55UG9sZVdhbmRlcj0wLGUueFBvbGVPZmZzZXQ9MCxlLnlQb2xlT2Zmc2V0PTAsZS51dDFNaW51c1V0Yz0wLGU7bGV0IG49dGhpcy5fZGF0ZXMsbz10aGlzLl9sYXN0SW5kZXgscj0wLGk9MDtpZihoKG8pKXtsZXQgZj1uW29dLHU9bltvKzFdLGM9R24ubGVzc1RoYW5PckVxdWFscyhmLHQpLGw9IWgodSkscD1sfHxHbi5ncmVhdGVyVGhhbk9yRXF1YWxzKHUsdCk7aWYoYyYmcClyZXR1cm4gcj1vLCFsJiZ1LmVxdWFscyh0KSYmKytyLGk9cisxLE1BKHRoaXMsbix0aGlzLl9zYW1wbGVzLHQscixpLGUpLGV9bGV0IHM9VnMobix0LEduLmNvbXBhcmUsdGhpcy5fZGF0ZUNvbHVtbik7cmV0dXJuIHM+PTA/KHM8bi5sZW5ndGgtMSYmbltzKzFdLmVxdWFscyh0KSYmKytzLHI9cyxpPXMpOihpPX5zLHI9aS0xLHI8MCYmKHI9MCkpLHRoaXMuX2xhc3RJbmRleD1yLE1BKHRoaXMsbix0aGlzLl9zYW1wbGVzLHQscixpLGUpLGV9O05BPWhmfSk7ZnVuY3Rpb24gd28odCxlLG4pe3RoaXMuaGVhZGluZz10Pz8wLHRoaXMucGl0Y2g9ZT8/MCx0aGlzLnJvbGw9bj8/MH12YXIgbXAsdkE9JCgoKT0+e2F0KCk7anQoKTtLdCgpO3dvLmZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEwoInF1YXRlcm5pb24gaXMgcmVxdWlyZWQiKTtoKGUpfHwoZT1uZXcgd28pO2xldCBuPTIqKHQudyp0LnktdC56KnQueCksbz0xLTIqKHQueCp0LngrdC55KnQueSkscj0yKih0LncqdC54K3QueSp0LnopLGk9MS0yKih0LnkqdC55K3Queip0LnopLHM9MioodC53KnQueit0LngqdC55KTtyZXR1cm4gZS5oZWFkaW5nPS1NYXRoLmF0YW4yKHMsaSksZS5yb2xsPU1hdGguYXRhbjIocixvKSxlLnBpdGNoPS1QLmFzaW5DbGFtcGVkKG4pLGV9O3dvLmZyb21EZWdyZWVzPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJoZWFkaW5nIGlzIHJlcXVpcmVkIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoInBpdGNoIGlzIHJlcXVpcmVkIik7aWYoIWgobikpdGhyb3cgbmV3IEwoInJvbGwgaXMgcmVxdWlyZWQiKTtyZXR1cm4gaChvKXx8KG89bmV3IHdvKSxvLmhlYWRpbmc9dCpQLlJBRElBTlNfUEVSX0RFR1JFRSxvLnBpdGNoPWUqUC5SQURJQU5TX1BFUl9ERUdSRUUsby5yb2xsPW4qUC5SQURJQU5TX1BFUl9ERUdSRUUsb307d28uY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLmhlYWRpbmc9dC5oZWFkaW5nLGUucGl0Y2g9dC5waXRjaCxlLnJvbGw9dC5yb2xsLGUpOm5ldyB3byh0LmhlYWRpbmcsdC5waXRjaCx0LnJvbGwpfTt3by5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJnQuaGVhZGluZz09PWUuaGVhZGluZyYmdC5waXRjaD09PWUucGl0Y2gmJnQucm9sbD09PWUucm9sbH07d28uZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJlAuZXF1YWxzRXBzaWxvbih0LmhlYWRpbmcsZS5oZWFkaW5nLG4sbykmJlAuZXF1YWxzRXBzaWxvbih0LnBpdGNoLGUucGl0Y2gsbixvKSYmUC5lcXVhbHNFcHNpbG9uKHQucm9sbCxlLnJvbGwsbixvKX07d28ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB3by5jbG9uZSh0aGlzLHQpfTt3by5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB3by5lcXVhbHModGhpcyx0KX07d28ucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB3by5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlLG4pfTt3by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy5oZWFkaW5nfSwgJHt0aGlzLnBpdGNofSwgJHt0aGlzLnJvbGx9KWB9O21wPXdvfSk7ZnVuY3Rpb24gTngoKXtsZXQgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXtsZXQgbz10W2VdLmdldEF0dHJpYnV0ZSgic3JjIikscj1MQS5leGVjKG8pO2lmKHIhPT1udWxsKXJldHVybiByWzFdfX1mdW5jdGlvbiBEQSh0KXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PiJ1Ij90OihoKGhwKXx8KGhwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSksaHAuaHJlZj10LGhwLmhyZWYpfWZ1bmN0aW9uIEJBKCl7aWYoaChLcykpcmV0dXJuIEtzO2xldCB0O2lmKHR5cGVvZiBDRVNJVU1fQkFTRV9VUkw8InUiP3Q9Q0VTSVVNX0JBU0VfVVJMOmgoRkE/LnVybCk/dD1mZigiLiIsRkEudXJsKTp0eXBlb2YgZGVmaW5lPT0ib2JqZWN0IiYmaChkZWZpbmUuYW1kKSYmIWRlZmluZS5hbWQudG9VcmxVbmRlZmluZWQmJmgocHIudG9VcmwpP3Q9ZmYoIi4uIixXcygiQ29yZS9idWlsZE1vZHVsZVVybC5qcyIpKTp0PU54KCksIWgodCkpdGhyb3cgbmV3IEwoIlVuYWJsZSB0byBkZXRlcm1pbmUgQ2VzaXVtIGJhc2UgVVJMIGF1dG9tYXRpY2FsbHksIHRyeSBkZWZpbmluZyBhIGdsb2JhbCB2YXJpYWJsZSBjYWxsZWQgQ0VTSVVNX0JBU0VfVVJMLiIpO3JldHVybiBLcz1uZXcgb2koe3VybDpEQSh0KX0pLEtzLmFwcGVuZEZvcndhcmRTbGFzaCgpLEtzfWZ1bmN0aW9uIEl4KHQpe3JldHVybiBEQShwci50b1VybChgLi4vJHt0fWApKX1mdW5jdGlvbiBVQSh0KXtyZXR1cm4gQkEoKS5nZXREZXJpdmVkUmVzb3VyY2Uoe3VybDp0fSkudXJsfWZ1bmN0aW9uIFdzKHQpe3JldHVybiBoKF9wKXx8KHR5cGVvZiBkZWZpbmU9PSJvYmplY3QiJiZoKGRlZmluZS5hbWQpJiYhZGVmaW5lLmFtZC50b1VybFVuZGVmaW5lZCYmaChwci50b1VybCk/X3A9SXg6X3A9VUEpLF9wKHQpfXZhciBGQSxMQSxocCxLcyxfcCx5cCxYbT0kKCgpPT57YXQoKTtqdCgpO0dtKCk7ZGYoKTtGQT17fSxMQT0vKCg/Oi4qXC8pfF4pQ2VzaXVtXC5qcyg/Olw/fFwjfCQpLztXcy5fY2VzaXVtU2NyaXB0UmVnZXg9TEE7V3MuX2J1aWxkTW9kdWxlVXJsRnJvbUJhc2VVcmw9VUE7V3MuX2NsZWFyQmFzZVJlc291cmNlPWZ1bmN0aW9uKCl7S3M9dm9pZCAwfTtXcy5zZXRCYXNlVXJsPWZ1bmN0aW9uKHQpe0tzPW9pLkRFRkFVTFQuZ2V0RGVyaXZlZFJlc291cmNlKHt1cmw6dH0pfTtXcy5nZXRDZXNpdW1CYXNlVXJsPUJBO3lwPVdzfSk7ZnVuY3Rpb24gdngodCxlLG4pe3RoaXMueD10LHRoaXMueT1lLHRoaXMucz1ufXZhciBncCxZbT0kKCgpPT57Z3A9dnh9KTtmdW5jdGlvbiBRbSh0KXt0PXQ/P050LkVNUFRZX09CSkVDVCx0aGlzLl94eXNGaWxlVXJsVGVtcGxhdGU9b2kuY3JlYXRlSWZOZWVkZWQodC54eXNGaWxlVXJsVGVtcGxhdGUpLHRoaXMuX2ludGVycG9sYXRpb25PcmRlcj10LmludGVycG9sYXRpb25PcmRlcj8/OSx0aGlzLl9zYW1wbGVaZXJvSnVsaWFuRXBoZW1lcmlzRGF0ZT10LnNhbXBsZVplcm9KdWxpYW5FcGhlbWVyaXNEYXRlPz8yNDQyMzk2NWUtMSx0aGlzLl9zYW1wbGVaZXJvRGF0ZVRUPW5ldyBHbih0aGlzLl9zYW1wbGVaZXJvSnVsaWFuRXBoZW1lcmlzRGF0ZSwwLE9lLlRBSSksdGhpcy5fc3RlcFNpemVEYXlzPXQuc3RlcFNpemVEYXlzPz8xLHRoaXMuX3NhbXBsZXNQZXJYeXNGaWxlPXQuc2FtcGxlc1Blclh5c0ZpbGU/PzFlMyx0aGlzLl90b3RhbFNhbXBsZXM9dC50b3RhbFNhbXBsZXM/PzI3NDI2LHRoaXMuX3NhbXBsZXM9bmV3IEFycmF5KHRoaXMuX3RvdGFsU2FtcGxlcyozKSx0aGlzLl9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3M9W107bGV0IGU9dGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLG49dGhpcy5fZGVub21pbmF0b3JzPW5ldyBBcnJheShlKzEpLG89dGhpcy5feFRhYmxlPW5ldyBBcnJheShlKzEpLHI9TWF0aC5wb3codGhpcy5fc3RlcFNpemVEYXlzLGUpO2ZvcihsZXQgaT0wO2k8PWU7KytpKXtuW2ldPXIsb1tpXT1pKnRoaXMuX3N0ZXBTaXplRGF5cztmb3IobGV0IHM9MDtzPD1lOysrcylzIT09aSYmKG5baV0qPWktcyk7bltpXT0xL25baV19dGhpcy5fd29yaz1uZXcgQXJyYXkoZSsxKSx0aGlzLl9jb2VmPW5ldyBBcnJheShlKzEpfWZ1bmN0aW9uICRtKHQsZSxuKXtsZXQgbz1GeDtyZXR1cm4gby5kYXlOdW1iZXI9ZSxvLnNlY29uZHNPZkRheT1uLEduLmRheXNEaWZmZXJlbmNlKG8sdC5fc2FtcGxlWmVyb0RhdGVUVCl9ZnVuY3Rpb24gWm0odCxlKXtpZih0Ll9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3NbZV0pcmV0dXJuIHQuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1tlXTtsZXQgbixvPXQuX3h5c0ZpbGVVcmxUZW1wbGF0ZTtoKG8pP249by5nZXREZXJpdmVkUmVzb3VyY2Uoe3RlbXBsYXRlVmFsdWVzOnswOmV9fSk6bj1uZXcgb2koe3VybDp5cChgQXNzZXRzL0lBVTIwMDZfWFlTL0lBVTIwMDZfWFlTXyR7ZX0uanNvbmApfSk7bGV0IHI9bi5mZXRjaEpzb24oKS50aGVuKGZ1bmN0aW9uKGkpe3QuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1tlXT0hMTtsZXQgcz10Ll9zYW1wbGVzLGY9aS5zYW1wbGVzLHU9ZSp0Ll9zYW1wbGVzUGVyWHlzRmlsZSozO2ZvcihsZXQgYz0wLGw9Zi5sZW5ndGg7YzxsOysrYylzW3UrY109ZltjXX0pO3JldHVybiB0Ll9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3NbZV09cixyfXZhciBGeCxrQSxHQT0kKCgpPT57WG0oKTt5ZSgpO2F0KCk7WW0oKTt0cCgpO2RmKCk7WWwoKTtGeD1uZXcgR24oMCwwLE9lLlRBSSk7UW0ucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9JG0odGhpcyx0LGUpLGk9JG0odGhpcyxuLG8pLHM9ci90aGlzLl9zdGVwU2l6ZURheXMtdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLzJ8MDtzPDAmJihzPTApO2xldCBmPWkvdGhpcy5fc3RlcFNpemVEYXlzLXRoaXMuX2ludGVycG9sYXRpb25PcmRlci8yfDArdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyO2Y+PXRoaXMuX3RvdGFsU2FtcGxlcyYmKGY9dGhpcy5fdG90YWxTYW1wbGVzLTEpO2xldCB1PXMvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCxjPWYvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCxsPVtdO2ZvcihsZXQgcD11O3A8PWM7KytwKWwucHVzaChabSh0aGlzLHApKTtyZXR1cm4gUHJvbWlzZS5hbGwobCl9O1FtLnByb3RvdHlwZS5jb21wdXRlWHlzUmFkaWFucz1mdW5jdGlvbih0LGUsbil7bGV0IG89JG0odGhpcyx0LGUpO2lmKG88MClyZXR1cm47bGV0IHI9by90aGlzLl9zdGVwU2l6ZURheXN8MDtpZihyPj10aGlzLl90b3RhbFNhbXBsZXMpcmV0dXJuO2xldCBpPXRoaXMuX2ludGVycG9sYXRpb25PcmRlcixzPXItKGkvMnwwKTtzPDAmJihzPTApO2xldCBmPXMraTtmPj10aGlzLl90b3RhbFNhbXBsZXMmJihmPXRoaXMuX3RvdGFsU2FtcGxlcy0xLHM9Zi1pLHM8MCYmKHM9MCkpO2xldCB1PSExLGM9dGhpcy5fc2FtcGxlcztpZihoKGNbcyozXSl8fChabSh0aGlzLHMvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCksdT0hMCksaChjW2YqM10pfHwoWm0odGhpcyxmL3RoaXMuX3NhbXBsZXNQZXJYeXNGaWxlfDApLHU9ITApLHUpcmV0dXJuO2gobik/KG4ueD0wLG4ueT0wLG4ucz0wKTpuPW5ldyBncCgwLDAsMCk7bGV0IGw9by1zKnRoaXMuX3N0ZXBTaXplRGF5cyxwPXRoaXMuX3dvcmssZD10aGlzLl9kZW5vbWluYXRvcnMsbT10aGlzLl9jb2VmLF89dGhpcy5feFRhYmxlLGcsYjtmb3IoZz0wO2c8PWk7KytnKXBbZ109bC1fW2ddO2ZvcihnPTA7Zzw9aTsrK2cpe2ZvcihtW2ddPTEsYj0wO2I8PWk7KytiKWIhPT1nJiYobVtnXSo9cFtiXSk7bVtnXSo9ZFtnXTtsZXQgVD0ocytnKSozO24ueCs9bVtnXSpjW1QrK10sbi55Kz1tW2ddKmNbVCsrXSxuLnMrPW1bZ10qY1tUXX1yZXR1cm4gbn07a0E9UW19KTt2YXIgb3MsTm4scW8sVkEsekE9JCgoKT0+e2F0KCk7Tm49e3JlcXVlc3RGdWxsc2NyZWVuOnZvaWQgMCxleGl0RnVsbHNjcmVlbjp2b2lkIDAsZnVsbHNjcmVlbkVuYWJsZWQ6dm9pZCAwLGZ1bGxzY3JlZW5FbGVtZW50OnZvaWQgMCxmdWxsc2NyZWVuY2hhbmdlOnZvaWQgMCxmdWxsc2NyZWVuZXJyb3I6dm9pZCAwfSxxbz17fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhxbyx7ZWxlbWVudDp7Z2V0OmZ1bmN0aW9uKCl7aWYocW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIGRvY3VtZW50W05uLmZ1bGxzY3JlZW5FbGVtZW50XX19LGNoYW5nZUV2ZW50TmFtZTp7Z2V0OmZ1bmN0aW9uKCl7aWYocW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIE5uLmZ1bGxzY3JlZW5jaGFuZ2V9fSxlcnJvckV2ZW50TmFtZTp7Z2V0OmZ1bmN0aW9uKCl7aWYocW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIE5uLmZ1bGxzY3JlZW5lcnJvcn19LGVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe2lmKHFvLnN1cHBvcnRzRnVsbHNjcmVlbigpKXJldHVybiBkb2N1bWVudFtObi5mdWxsc2NyZWVuRW5hYmxlZF19fSxmdWxsc2NyZWVuOntnZXQ6ZnVuY3Rpb24oKXtpZihxby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gcW8uZWxlbWVudCE9PW51bGx9fX0pO3FvLnN1cHBvcnRzRnVsbHNjcmVlbj1mdW5jdGlvbigpe2lmKGgob3MpKXJldHVybiBvcztvcz0hMTtsZXQgdD1kb2N1bWVudC5ib2R5O2lmKHR5cGVvZiB0LnJlcXVlc3RGdWxsc2NyZWVuPT0iZnVuY3Rpb24iKXJldHVybiBObi5yZXF1ZXN0RnVsbHNjcmVlbj0icmVxdWVzdEZ1bGxzY3JlZW4iLE5uLmV4aXRGdWxsc2NyZWVuPSJleGl0RnVsbHNjcmVlbiIsTm4uZnVsbHNjcmVlbkVuYWJsZWQ9ImZ1bGxzY3JlZW5FbmFibGVkIixObi5mdWxsc2NyZWVuRWxlbWVudD0iZnVsbHNjcmVlbkVsZW1lbnQiLE5uLmZ1bGxzY3JlZW5jaGFuZ2U9ImZ1bGxzY3JlZW5jaGFuZ2UiLE5uLmZ1bGxzY3JlZW5lcnJvcj0iZnVsbHNjcmVlbmVycm9yIixvcz0hMCxvcztsZXQgZT1bIndlYmtpdCIsIm1veiIsIm8iLCJtcyIsImtodG1sIl0sbjtmb3IobGV0IG89MCxyPWUubGVuZ3RoO288cjsrK28pe2xldCBpPWVbb107bj1gJHtpfVJlcXVlc3RGdWxsc2NyZWVuYCx0eXBlb2YgdFtuXT09ImZ1bmN0aW9uIj8oTm4ucmVxdWVzdEZ1bGxzY3JlZW49bixvcz0hMCk6KG49YCR7aX1SZXF1ZXN0RnVsbFNjcmVlbmAsdHlwZW9mIHRbbl09PSJmdW5jdGlvbiImJihObi5yZXF1ZXN0RnVsbHNjcmVlbj1uLG9zPSEwKSksbj1gJHtpfUV4aXRGdWxsc2NyZWVuYCx0eXBlb2YgZG9jdW1lbnRbbl09PSJmdW5jdGlvbiI/Tm4uZXhpdEZ1bGxzY3JlZW49bjoobj1gJHtpfUNhbmNlbEZ1bGxTY3JlZW5gLHR5cGVvZiBkb2N1bWVudFtuXT09ImZ1bmN0aW9uIiYmKE5uLmV4aXRGdWxsc2NyZWVuPW4pKSxuPWAke2l9RnVsbHNjcmVlbkVuYWJsZWRgLGRvY3VtZW50W25dIT09dm9pZCAwP05uLmZ1bGxzY3JlZW5FbmFibGVkPW46KG49YCR7aX1GdWxsU2NyZWVuRW5hYmxlZGAsZG9jdW1lbnRbbl0hPT12b2lkIDAmJihObi5mdWxsc2NyZWVuRW5hYmxlZD1uKSksbj1gJHtpfUZ1bGxzY3JlZW5FbGVtZW50YCxkb2N1bWVudFtuXSE9PXZvaWQgMD9Obi5mdWxsc2NyZWVuRWxlbWVudD1uOihuPWAke2l9RnVsbFNjcmVlbkVsZW1lbnRgLGRvY3VtZW50W25dIT09dm9pZCAwJiYoTm4uZnVsbHNjcmVlbkVsZW1lbnQ9bikpLG49YCR7aX1mdWxsc2NyZWVuY2hhbmdlYCxkb2N1bWVudFtgb24ke259YF0hPT12b2lkIDAmJihpPT09Im1zIiYmKG49Ik1TRnVsbHNjcmVlbkNoYW5nZSIpLE5uLmZ1bGxzY3JlZW5jaGFuZ2U9biksbj1gJHtpfWZ1bGxzY3JlZW5lcnJvcmAsZG9jdW1lbnRbYG9uJHtufWBdIT09dm9pZCAwJiYoaT09PSJtcyImJihuPSJNU0Z1bGxzY3JlZW5FcnJvciIpLE5uLmZ1bGxzY3JlZW5lcnJvcj1uKX1yZXR1cm4gb3N9O3FvLnJlcXVlc3RGdWxsc2NyZWVuPWZ1bmN0aW9uKHQsZSl7cW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkmJnRbTm4ucmVxdWVzdEZ1bGxzY3JlZW5dKHt2ckRpc3BsYXk6ZX0pfTtxby5leGl0RnVsbHNjcmVlbj1mdW5jdGlvbigpe3FvLnN1cHBvcnRzRnVsbHNjcmVlbigpJiZkb2N1bWVudFtObi5leGl0RnVsbHNjcmVlbl0oKX07cW8uX25hbWVzPU5uO1ZBPXFvfSk7ZnVuY3Rpb24gWHModCl7bGV0IGU9dC5zcGxpdCgiLiIpO2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7bjxvOysrbillW25dPXBhcnNlSW50KGVbbl0sMTApO3JldHVybiBlfWZ1bmN0aW9uIHJoKCl7aWYoIWgoQXApJiYoQXA9ITEsIVJwKCkpKXtsZXQgdD0vIENocm9tZVwvKFtcLjAtOV0rKS8uZXhlYyhFby51c2VyQWdlbnQpO3QhPT1udWxsJiYoQXA9ITAsakE9WHModFsxXSkpfXJldHVybiBBcH1mdW5jdGlvbiBMeCgpe3JldHVybiByaCgpJiZqQX1mdW5jdGlvbiBxQSgpe2lmKCFoKGJwKSYmKGJwPSExLCFyaCgpJiYhUnAoKSYmLyBTYWZhcmlcL1tcLjAtOV0rLy50ZXN0KEVvLnVzZXJBZ2VudCkpKXtsZXQgdD0vIFZlcnNpb25cLyhbXC4wLTldKykvLmV4ZWMoRW8udXNlckFnZW50KTt0IT09bnVsbCYmKGJwPSEwLEhBPVhzKHRbMV0pKX1yZXR1cm4gYnB9ZnVuY3Rpb24gRHgoKXtyZXR1cm4gcUEoKSYmSEF9ZnVuY3Rpb24gS0EoKXtpZighaChUcCkpe1RwPSExO2xldCB0PS8gQXBwbGVXZWJLaXRcLyhbXC4wLTldKykoXCs/KS8uZXhlYyhFby51c2VyQWdlbnQpO3QhPT1udWxsJiYoVHA9ITAsbmg9WHModFsxXSksbmguaXNOaWdodGx5PSEhdFsyXSl9cmV0dXJuIFRwfWZ1bmN0aW9uIEJ4KCl7cmV0dXJuIEtBKCkmJm5ofWZ1bmN0aW9uIFdBKCl7aWYoIWgoX2YpKXtfZj0hMTtsZXQgdDtFby5hcHBOYW1lPT09Ik1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciI/KHQ9L01TSUUgKFswLTldezEsfVtcLjAtOV17MCx9KS8uZXhlYyhFby51c2VyQWdlbnQpLHQhPT1udWxsJiYoX2Y9ITAsb2g9WHModFsxXSkpKTpFby5hcHBOYW1lPT09Ik5ldHNjYXBlIiYmKHQ9L1RyaWRlbnRcLy4qcnY6KFswLTldezEsfVtcLjAtOV17MCx9KS8uZXhlYyhFby51c2VyQWdlbnQpLHQhPT1udWxsJiYoX2Y9ITAsb2g9WHModFsxXSkpKX1yZXR1cm4gX2Z9ZnVuY3Rpb24gVXgoKXtyZXR1cm4gV0EoKSYmb2h9ZnVuY3Rpb24gUnAoKXtpZighaCh3cCkpe3dwPSExO2xldCB0PS8gRWRnXC8oW1wuMC05XSspLy5leGVjKEVvLnVzZXJBZ2VudCk7dCE9PW51bGwmJih3cD0hMCxYQT1Ycyh0WzFdKSl9cmV0dXJuIHdwfWZ1bmN0aW9uIGt4KCl7cmV0dXJuIFJwKCkmJlhBfWZ1bmN0aW9uIFNwKCl7aWYoIWgoT3ApKXtPcD0hMTtsZXQgdD0vRmlyZWZveFwvKFtcLjAtOV0rKS8uZXhlYyhFby51c2VyQWdlbnQpO3QhPT1udWxsJiYoT3A9ITAsaWg9WHModFsxXSkpfXJldHVybiBPcH1mdW5jdGlvbiBHeCgpe3JldHVybiBoKEptKXx8KEptPS9XaW5kb3dzL2kudGVzdChFby5hcHBWZXJzaW9uKSksSm19ZnVuY3Rpb24gVngoKXtyZXR1cm4gaCh0aCl8fCh0aD1uYXZpZ2F0b3IucGxhdGZvcm09PT0iaVBob25lInx8bmF2aWdhdG9yLnBsYXRmb3JtPT09ImlQb2QifHxuYXZpZ2F0b3IucGxhdGZvcm09PT0iaVBhZCIpLHRofWZ1bmN0aW9uIHp4KCl7cmV0dXJuIFNwKCkmJmlofWZ1bmN0aW9uIGp4KCl7cmV0dXJuIGgoZWgpfHwoZWg9IVNwKCkmJnR5cGVvZiBQb2ludGVyRXZlbnQ8InUiJiYoIWgoRW8ucG9pbnRlckVuYWJsZWQpfHxFby5wb2ludGVyRW5hYmxlZCkpLGVofWZ1bmN0aW9uICRBKCl7aWYoIWgoRXApKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTt0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7aW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7Iik7bGV0IGU9dC5zdHlsZS5pbWFnZVJlbmRlcmluZztFcD1oKGUpJiZlIT09IiIsRXAmJihZQT1lKX1yZXR1cm4gRXB9ZnVuY3Rpb24gSHgoKXtyZXR1cm4gJEEoKT9ZQTp2b2lkIDB9ZnVuY3Rpb24gT28oKXtpZighT28uaW5pdGlhbGl6ZWQpdGhyb3cgbmV3IEwoIllvdSBtdXN0IGNhbGwgRmVhdHVyZURldGVjdGlvbi5zdXBwb3J0c1dlYlAuaW5pdGlhbGl6ZSBhbmQgd2FpdCBmb3IgdGhlIHByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgY2FsbGluZyBGZWF0dXJlRGV0ZWN0aW9uLnN1cHBvcnRzV2ViUCIpO3JldHVybiBPby5fcmVzdWx0fXZhciBFbyxBcCxqQSxicCxIQSxUcCxuaCxfZixvaCx3cCxYQSxPcCxpaCxKbSx0aCxlaCxZQSxFcCxKYyx5cixZcyxzaD0kKCgpPT57V3QoKTthdCgpO2p0KCk7ekEoKTt0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9Fbz1uYXZpZ2F0b3I6RW89e307T28uX3Byb21pc2U9dm9pZCAwO09vLl9yZXN1bHQ9dm9pZCAwO09vLmluaXRpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gaChPby5fcHJvbWlzZSl8fChPby5fcHJvbWlzZT1uZXcgUHJvbWlzZSh0PT57bGV0IGU9bmV3IEltYWdlO2Uub25sb2FkPWZ1bmN0aW9uKCl7T28uX3Jlc3VsdD1lLndpZHRoPjAmJmUuaGVpZ2h0PjAsdChPby5fcmVzdWx0KX0sZS5vbmVycm9yPWZ1bmN0aW9uKCl7T28uX3Jlc3VsdD0hMSx0KE9vLl9yZXN1bHQpfSxlLnNyYz0iZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmlJQUFBQlhSVUpRVmxBNElCWUFBQUF3QVFDZEFTb0JBQUVBRHNEK0phUUFBM0FBQUFBQSJ9KSksT28uX3Byb21pc2V9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9vLHtpbml0aWFsaXplZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgoT28uX3Jlc3VsdCl9fX0pO0pjPVtdO3R5cGVvZiBBcnJheUJ1ZmZlcjwidSImJihKYy5wdXNoKEludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZKYy5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZKYy5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgQmlnSW50NjRBcnJheTwidSImJkpjLnB1c2goQmlnSW50NjRBcnJheSksdHlwZW9mIEJpZ1VpbnQ2NEFycmF5PCJ1IiYmSmMucHVzaChCaWdVaW50NjRBcnJheSkpO3lyPXtpc0Nocm9tZTpyaCxjaHJvbWVWZXJzaW9uOkx4LGlzU2FmYXJpOnFBLHNhZmFyaVZlcnNpb246RHgsaXNXZWJraXQ6S0Esd2Via2l0VmVyc2lvbjpCeCxpc0ludGVybmV0RXhwbG9yZXI6V0EsaW50ZXJuZXRFeHBsb3JlclZlcnNpb246VXgsaXNFZGdlOlJwLGVkZ2VWZXJzaW9uOmt4LGlzRmlyZWZveDpTcCxmaXJlZm94VmVyc2lvbjp6eCxpc1dpbmRvd3M6R3gsaXNJUGFkT3JJT1M6VngsaGFyZHdhcmVDb25jdXJyZW5jeTpFby5oYXJkd2FyZUNvbmN1cnJlbmN5Pz8zLHN1cHBvcnRzUG9pbnRlckV2ZW50czpqeCxzdXBwb3J0c0ltYWdlUmVuZGVyaW5nUGl4ZWxhdGVkOiRBLHN1cHBvcnRzV2ViUDpPbyxpbWFnZVJlbmRlcmluZ1ZhbHVlOkh4LHR5cGVkQXJyYXlUeXBlczpKY307eXIuc3VwcG9ydHNCYXNpcz1mdW5jdGlvbih0KXtyZXR1cm4geXIuc3VwcG9ydHNXZWJBc3NlbWJseSgpJiZ0LmNvbnRleHQuc3VwcG9ydHNCYXNpc307eXIuc3VwcG9ydHNGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIFZBLnN1cHBvcnRzRnVsbHNjcmVlbigpfTt5ci5zdXBwb3J0c1R5cGVkQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSJ9O3lyLnN1cHBvcnRzQmlnSW50NjRBcnJheT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgQmlnSW50NjRBcnJheTwidSJ9O3lyLnN1cHBvcnRzQmlnVWludDY0QXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEJpZ1VpbnQ2NEFycmF5PCJ1In07eXIuc3VwcG9ydHNCaWdJbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEJpZ0ludDwidSJ9O3lyLnN1cHBvcnRzV2ViV29ya2Vycz1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgV29ya2VyPCJ1In07eXIuc3VwcG9ydHNXZWJBc3NlbWJseT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgV2ViQXNzZW1ibHk8InUifTt5ci5zdXBwb3J0c1dlYmdsMj1mdW5jdGlvbih0KXtyZXR1cm4geS5kZWZpbmVkKCJzY2VuZSIsdCksdC5jb250ZXh0LndlYmdsMn07eXIuc3VwcG9ydHNFc21XZWJXb3JrZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIVNwKCl8fHBhcnNlSW50KGloKT49MTE0fTtZcz15cn0pO2Z1bmN0aW9uIE90KHQsZSxuLG8pe3RoaXMueD10Pz8wLHRoaXMueT1lPz8wLHRoaXMuej1uPz8wLHRoaXMudz1vPz8wfXZhciB5ZixxeCxLeCxaQSxRQSxjaCxKQSxDcCxhaCxEcix0Yix4cCxmaCxlYix1aCxsaCxXeCxYeCxnZix0YSxZeCxuYixQcCxNcCx4aSxQaSx0ZSxLbz0kKCgpPT57THQoKTtXdCgpO2F0KCk7c2goKTtLdCgpO0JuKCk7eWY9bmV3IGE7T3QuZnJvbUF4aXNBbmdsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJheGlzIix0KSx5LnR5cGVPZi5udW1iZXIoImFuZ2xlIixlKTtsZXQgbz1lLzIscj1NYXRoLnNpbihvKTt5Zj1hLm5vcm1hbGl6ZSh0LHlmKTtsZXQgaT15Zi54KnIscz15Zi55KnIsZj15Zi56KnIsdT1NYXRoLmNvcyhvKTtyZXR1cm4gaChuKT8obi54PWksbi55PXMsbi56PWYsbi53PXUsbik6bmV3IE90KGkscyxmLHUpfTtxeD1bMSwyLDBdLEt4PW5ldyBBcnJheSgzKTtPdC5mcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCk7bGV0IG4sbyxyLGkscyxmPXRbWi5DT0xVTU4wUk9XMF0sdT10W1ouQ09MVU1OMVJPVzFdLGM9dFtaLkNPTFVNTjJST1cyXSxsPWYrdStjO2lmKGw+MCluPU1hdGguc3FydChsKzEpLHM9LjUqbixuPS41L24sbz0odFtaLkNPTFVNTjFST1cyXS10W1ouQ09MVU1OMlJPVzFdKSpuLHI9KHRbWi5DT0xVTU4yUk9XMF0tdFtaLkNPTFVNTjBST1cyXSkqbixpPSh0W1ouQ09MVU1OMFJPVzFdLXRbWi5DT0xVTU4xUk9XMF0pKm47ZWxzZXtsZXQgcD1xeCxkPTA7dT5mJiYoZD0xKSxjPmYmJmM+dSYmKGQ9Mik7bGV0IG09cFtkXSxfPXBbbV07bj1NYXRoLnNxcnQodFtaLmdldEVsZW1lbnRJbmRleChkLGQpXS10W1ouZ2V0RWxlbWVudEluZGV4KG0sbSldLXRbWi5nZXRFbGVtZW50SW5kZXgoXyxfKV0rMSk7bGV0IGc9S3g7Z1tkXT0uNSpuLG49LjUvbixzPSh0W1ouZ2V0RWxlbWVudEluZGV4KF8sbSldLXRbWi5nZXRFbGVtZW50SW5kZXgobSxfKV0pKm4sZ1ttXT0odFtaLmdldEVsZW1lbnRJbmRleChtLGQpXSt0W1ouZ2V0RWxlbWVudEluZGV4KGQsbSldKSpuLGdbX109KHRbWi5nZXRFbGVtZW50SW5kZXgoXyxkKV0rdFtaLmdldEVsZW1lbnRJbmRleChkLF8pXSkqbixvPS1nWzBdLHI9LWdbMV0saT0tZ1syXX1yZXR1cm4gaChlKT8oZS54PW8sZS55PXIsZS56PWksZS53PXMsZSk6bmV3IE90KG8scixpLHMpfTtaQT1uZXcgT3QsUUE9bmV3IE90LGNoPW5ldyBPdCxKQT1uZXcgT3Q7T3QuZnJvbUhlYWRpbmdQaXRjaFJvbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJoZWFkaW5nUGl0Y2hSb2xsIix0KSxKQT1PdC5mcm9tQXhpc0FuZ2xlKGEuVU5JVF9YLHQucm9sbCxaQSksY2g9T3QuZnJvbUF4aXNBbmdsZShhLlVOSVRfWSwtdC5waXRjaCxlKSxlPU90Lm11bHRpcGx5KGNoLEpBLGNoKSxRQT1PdC5mcm9tQXhpc0FuZ2xlKGEuVU5JVF9aLC10LmhlYWRpbmcsWkEpLE90Lm11bHRpcGx5KFFBLGUsZSl9O0NwPW5ldyBhLGFoPW5ldyBhLERyPW5ldyBPdCx0Yj1uZXcgT3QseHA9bmV3IE90O090LnBhY2tlZExlbmd0aD00O090LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXQueCxlW24rK109dC55LGVbbisrXT10LnosZVtuXT10LncsZX07T3QudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLGgobil8fChuPW5ldyBPdCksbi54PXRbZV0sbi55PXRbZSsxXSxuLno9dFtlKzJdLG4udz10W2UrM10sbn07T3QucGFja2VkSW50ZXJwb2xhdGlvbkxlbmd0aD0zO090LmNvbnZlcnRQYWNrZWRBcnJheUZvckludGVycG9sYXRpb249ZnVuY3Rpb24odCxlLG4sbyl7T3QudW5wYWNrKHQsbio0LHhwKSxPdC5jb25qdWdhdGUoeHAseHApO2ZvcihsZXQgcj0wLGk9bi1lKzE7cjxpO3IrKyl7bGV0IHM9ciozO090LnVucGFjayh0LChlK3IpKjQsRHIpLE90Lm11bHRpcGx5KERyLHhwLERyKSxEci53PDAmJk90Lm5lZ2F0ZShEcixEciksT3QuY29tcHV0ZUF4aXMoRHIsQ3ApO2xldCBmPU90LmNvbXB1dGVBbmdsZShEcik7aChvKXx8KG89W10pLG9bc109Q3AueCpmLG9bcysxXT1DcC55KmYsb1tzKzJdPUNwLnoqZn19O090LnVucGFja0ludGVycG9sYXRpb25SZXN1bHQ9ZnVuY3Rpb24odCxlLG4sbyxyKXtoKHIpfHwocj1uZXcgT3QpLGEuZnJvbUFycmF5KHQsMCxhaCk7bGV0IGk9YS5tYWduaXR1ZGUoYWgpO3JldHVybiBPdC51bnBhY2soZSxvKjQsdGIpLGk9PT0wP090LmNsb25lKE90LklERU5USVRZLERyKTpPdC5mcm9tQXhpc0FuZ2xlKGFoLGksRHIpLE90Lm11bHRpcGx5KERyLHRiLHIpfTtPdC5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGUueD10LngsZS55PXQueSxlLno9dC56LGUudz10LncsZSk6bmV3IE90KHQueCx0LnksdC56LHQudyl9O090LmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9LXQueCxlLnk9LXQueSxlLno9LXQueixlLnc9dC53LGV9O090Lm1hZ25pdHVkZVNxdWFyZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicXVhdGVybmlvbiIsdCksdC54KnQueCt0LnkqdC55K3Queip0LnordC53KnQud307T3QubWFnbml0dWRlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoT3QubWFnbml0dWRlU3F1YXJlZCh0KSl9O090Lm5vcm1hbGl6ZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj0xL090Lm1hZ25pdHVkZSh0KSxvPXQueCpuLHI9dC55Km4saT10LnoqbixzPXQudypuO3JldHVybiBlLng9byxlLnk9cixlLno9aSxlLnc9cyxlfTtPdC5pbnZlcnNlPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPU90Lm1hZ25pdHVkZVNxdWFyZWQodCk7cmV0dXJuIGU9T3QuY29uanVnYXRlKHQsZSksT3QubXVsdGlwbHlCeVNjYWxhcihlLDEvbixlKX07T3QuYWRkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueCtlLngsbi55PXQueStlLnksbi56PXQueitlLnosbi53PXQudytlLncsbn07T3Quc3VidHJhY3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54LWUueCxuLnk9dC55LWUueSxuLno9dC56LWUueixuLnc9dC53LWUudyxufTtPdC5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PS10LngsZS55PS10LnksZS56PS10LnosZS53PS10LncsZX07T3QuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdC54KmUueCt0LnkqZS55K3QueiplLnordC53KmUud307T3QubXVsdGlwbHk9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXQueCxyPXQueSxpPXQueixzPXQudyxmPWUueCx1PWUueSxjPWUueixsPWUudyxwPXMqZitvKmwrcipjLWkqdSxkPXMqdS1vKmMrcipsK2kqZixtPXMqYytvKnUtcipmK2kqbCxfPXMqbC1vKmYtcip1LWkqYztyZXR1cm4gbi54PXAsbi55PWQsbi56PW0sbi53PV8sbn07T3QubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicXVhdGVybmlvbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUsbi55PXQueSplLG4uej10LnoqZSxuLnc9dC53KmUsbn07T3QuZGl2aWRlQnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueC9lLG4ueT10LnkvZSxuLno9dC56L2Usbi53PXQudy9lLG59O090LmNvbXB1dGVBeGlzPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49dC53O2lmKE1hdGguYWJzKG4tMSk8UC5FUFNJTE9ONnx8TWF0aC5hYnMobisxKTxQLkVQU0lMT042KXJldHVybiBlLng9MSxlLnk9ZS56PTAsZTtsZXQgbz0xL01hdGguc3FydCgxLW4qbik7cmV0dXJuIGUueD10LngqbyxlLnk9dC55Km8sZS56PXQueipvLGV9O090LmNvbXB1dGVBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KSxNYXRoLmFicyh0LnctMSk8UC5FUFNJTE9ONj8wOjIqTWF0aC5hY29zKHQudyl9O2ZoPW5ldyBPdDtPdC5sZXJwPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksZmg9T3QubXVsdGlwbHlCeVNjYWxhcihlLG4sZmgpLG89T3QubXVsdGlwbHlCeVNjYWxhcih0LDEtbixvKSxPdC5hZGQoZmgsbyxvKX07ZWI9bmV3IE90LHVoPW5ldyBPdCxsaD1uZXcgT3Q7T3Quc2xlcnA9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJzdGFydCIsdCkseS50eXBlT2Yub2JqZWN0KCJlbmQiLGUpLHkudHlwZU9mLm51bWJlcigidCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pO2xldCByPU90LmRvdCh0LGUpLGk9ZTtpZihyPDAmJihyPS1yLGk9ZWI9T3QubmVnYXRlKGUsZWIpKSwxLXI8UC5FUFNJTE9ONilyZXR1cm4gT3QubGVycCh0LGksbixvKTtsZXQgcz1NYXRoLmFjb3Mocik7cmV0dXJuIHVoPU90Lm11bHRpcGx5QnlTY2FsYXIodCxNYXRoLnNpbigoMS1uKSpzKSx1aCksbGg9T3QubXVsdGlwbHlCeVNjYWxhcihpLE1hdGguc2luKG4qcyksbGgpLG89T3QuYWRkKHVoLGxoLG8pLE90Lm11bHRpcGx5QnlTY2FsYXIobywxL01hdGguc2luKHMpLG8pfTtPdC5sb2c9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1QLmFjb3NDbGFtcGVkKHQudyksbz0wO3JldHVybiBuIT09MCYmKG89bi9NYXRoLnNpbihuKSksYS5tdWx0aXBseUJ5U2NhbGFyKHQsbyxlKX07T3QuZXhwPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1hLm1hZ25pdHVkZSh0KSxvPTA7cmV0dXJuIG4hPT0wJiYobz1NYXRoLnNpbihuKS9uKSxlLng9dC54Km8sZS55PXQueSpvLGUuej10LnoqbyxlLnc9TWF0aC5jb3MobiksZX07V3g9bmV3IGEsWHg9bmV3IGEsZ2Y9bmV3IE90LHRhPW5ldyBPdDtPdC5jb21wdXRlSW5uZXJRdWFkcmFuZ2xlPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgicTAiLHQpLHkudHlwZU9mLm9iamVjdCgicTEiLGUpLHkudHlwZU9mLm9iamVjdCgicTIiLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKTtsZXQgcj1PdC5jb25qdWdhdGUoZSxnZik7T3QubXVsdGlwbHkocixuLHRhKTtsZXQgaT1PdC5sb2codGEsV3gpO090Lm11bHRpcGx5KHIsdCx0YSk7bGV0IHM9T3QubG9nKHRhLFh4KTtyZXR1cm4gYS5hZGQoaSxzLGkpLGEubXVsdGlwbHlCeVNjYWxhcihpLC4yNSxpKSxhLm5lZ2F0ZShpLGkpLE90LmV4cChpLGdmKSxPdC5tdWx0aXBseShlLGdmLG8pfTtPdC5zcXVhZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7eS50eXBlT2Yub2JqZWN0KCJxMCIsdCkseS50eXBlT2Yub2JqZWN0KCJxMSIsZSkseS50eXBlT2Yub2JqZWN0KCJzMCIsbikseS50eXBlT2Yub2JqZWN0KCJzMSIsbykseS50eXBlT2YubnVtYmVyKCJ0IixyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsaSk7bGV0IHM9T3Quc2xlcnAodCxlLHIsZ2YpLGY9T3Quc2xlcnAobixvLHIsdGEpO3JldHVybiBPdC5zbGVycChzLGYsMipyKigxLXIpLGkpfTtZeD1uZXcgT3QsbmI9MS45MDExMDc0NTM1MTczMDAzLFBwPVlzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdLE1wPVlzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdLHhpPVlzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdLFBpPVlzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdO2ZvcihsZXQgdD0wO3Q8NzsrK3Qpe2xldCBlPXQrMSxuPTIqZSsxO1BwW3RdPTEvKGUqbiksTXBbdF09ZS9ufVBwWzddPW5iLyg4KjE3KTtNcFs3XT1uYio4LzE3O090LmZhc3RTbGVycD1mdW5jdGlvbih0LGUsbixvKXt5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyk7bGV0IHI9T3QuZG90KHQsZSksaTtyPj0wP2k9MTooaT0tMSxyPS1yKTtsZXQgcz1yLTEsZj0xLW4sdT1uKm4sYz1mKmY7Zm9yKGxldCBtPTc7bT49MDstLW0peGlbbV09KFBwW21dKnUtTXBbbV0pKnMsUGlbbV09KFBwW21dKmMtTXBbbV0pKnM7bGV0IGw9aSpuKigxK3hpWzBdKigxK3hpWzFdKigxK3hpWzJdKigxK3hpWzNdKigxK3hpWzRdKigxK3hpWzVdKigxK3hpWzZdKigxK3hpWzddKSkpKSkpKSkscD1mKigxK1BpWzBdKigxK1BpWzFdKigxK1BpWzJdKigxK1BpWzNdKigxK1BpWzRdKigxK1BpWzVdKigxK1BpWzZdKigxK1BpWzddKSkpKSkpKSksZD1PdC5tdWx0aXBseUJ5U2NhbGFyKHQscCxZeCk7cmV0dXJuIE90Lm11bHRpcGx5QnlTY2FsYXIoZSxsLG8pLE90LmFkZChkLG8sbyl9O090LmZhc3RTcXVhZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7eS50eXBlT2Yub2JqZWN0KCJxMCIsdCkseS50eXBlT2Yub2JqZWN0KCJxMSIsZSkseS50eXBlT2Yub2JqZWN0KCJzMCIsbikseS50eXBlT2Yub2JqZWN0KCJzMSIsbykseS50eXBlT2YubnVtYmVyKCJ0IixyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsaSk7bGV0IHM9T3QuZmFzdFNsZXJwKHQsZSxyLGdmKSxmPU90LmZhc3RTbGVycChuLG8scix0YSk7cmV0dXJuIE90LmZhc3RTbGVycChzLGYsMipyKigxLXIpLGkpfTtPdC5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJnQueD09PWUueCYmdC55PT09ZS55JiZ0Lno9PT1lLnomJnQudz09PWUud307T3QuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49bj8/MCx0PT09ZXx8aCh0KSYmaChlKSYmTWF0aC5hYnModC54LWUueCk8PW4mJk1hdGguYWJzKHQueS1lLnkpPD1uJiZNYXRoLmFicyh0LnotZS56KTw9biYmTWF0aC5hYnModC53LWUudyk8PW59O090LlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgT3QoMCwwLDAsMCkpO090LklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IE90KDAsMCwwLDEpKTtPdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIE90LmNsb25lKHRoaXMsdCl9O090LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIE90LmVxdWFscyh0aGlzLHQpfTtPdC5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUpe3JldHVybiBPdC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlKX07T3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMueH0sICR7dGhpcy55fSwgJHt0aGlzLnp9LCAke3RoaXMud30pYH07dGU9T3R9KTt2YXIgUmUscGgsZWEsZGgsV28scnMsaXMsc3MsJHgsWngsUXgsSngsdDMsZTMsbjMsb2IsbzMscjMsaTMsczMsYzMsYTMsZjMsdTMsbDMscDMsTnAsX2gsZDMsbTMsaDMsSXAsXzMseTMsZzMsQTMsbWgsaGgsYjMsVDMsdzMsTzMscmIsaWIseWgsRTMsUjMsZ2gsc2IsWG8sY3M9JCgoKT0+e1VlKCk7THQoKTtocigpO0llKCk7V3QoKTthdCgpO2p0KCk7SUEoKTtJbSgpOyR0KCk7dkEoKTtHQSgpO1ltKCk7dHAoKTtLdCgpO0JuKCk7VW4oKTtLbygpO1hsKCk7UmU9e30scGg9e3VwOntzb3V0aDoiZWFzdCIsbm9ydGg6Indlc3QiLHdlc3Q6InNvdXRoIixlYXN0OiJub3J0aCJ9LGRvd246e3NvdXRoOiJ3ZXN0Iixub3J0aDoiZWFzdCIsd2VzdDoibm9ydGgiLGVhc3Q6InNvdXRoIn0sc291dGg6e3VwOiJ3ZXN0Iixkb3duOiJlYXN0Iix3ZXN0OiJkb3duIixlYXN0OiJ1cCJ9LG5vcnRoOnt1cDoiZWFzdCIsZG93bjoid2VzdCIsd2VzdDoidXAiLGVhc3Q6ImRvd24ifSx3ZXN0Ont1cDoibm9ydGgiLGRvd246InNvdXRoIixub3J0aDoiZG93biIsc291dGg6InVwIn0sZWFzdDp7dXA6InNvdXRoIixkb3duOiJub3J0aCIsbm9ydGg6InVwIixzb3V0aDoiZG93biJ9fSxlYT17bm9ydGg6Wy0xLDAsMF0sZWFzdDpbMCwxLDBdLHVwOlswLDAsMV0sc291dGg6WzEsMCwwXSx3ZXN0OlswLC0xLDBdLGRvd246WzAsMCwtMV19LGRoPXt9LFdvPXtlYXN0Om5ldyBhLG5vcnRoOm5ldyBhLHVwOm5ldyBhLHdlc3Q6bmV3IGEsc291dGg6bmV3IGEsZG93bjpuZXcgYX0scnM9bmV3IGEsaXM9bmV3IGEsc3M9bmV3IGE7UmUubG9jYWxGcmFtZVRvRml4ZWRGcmFtZUdlbmVyYXRvcj1mdW5jdGlvbih0LGUpe2lmKCFwaC5oYXNPd25Qcm9wZXJ0eSh0KXx8IXBoW3RdLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBMKCJmaXJzdEF4aXMgYW5kIHNlY29uZEF4aXMgbXVzdCBiZSBlYXN0LCBub3J0aCwgdXAsIHdlc3QsIHNvdXRoIG9yIGRvd24uIik7bGV0IG49cGhbdF1bZV0sbyxyPXQrZTtyZXR1cm4gaChkaFtyXSk/bz1kaFtyXToobz1mdW5jdGlvbihpLHMsZil7aWYoIWgoaSkpdGhyb3cgbmV3IEwoIm9yaWdpbiBpcyByZXF1aXJlZC4iKTtpZihpc05hTihpLngpfHxpc05hTihpLnkpfHxpc05hTihpLnopKXRocm93IG5ldyBMKCJvcmlnaW4gaGFzIGEgTmFOIGNvbXBvbmVudCIpO2lmKGgoZil8fChmPW5ldyBpdCksYS5lcXVhbHNFcHNpbG9uKGksYS5aRVJPLFAuRVBTSUxPTjE0KSlhLnVucGFjayhlYVt0XSwwLHJzKSxhLnVucGFjayhlYVtlXSwwLGlzKSxhLnVucGFjayhlYVtuXSwwLHNzKTtlbHNlIGlmKFAuZXF1YWxzRXBzaWxvbihpLngsMCxQLkVQU0lMT04xNCkmJlAuZXF1YWxzRXBzaWxvbihpLnksMCxQLkVQU0lMT04xNCkpe2xldCB1PVAuc2lnbihpLnopO2EudW5wYWNrKGVhW3RdLDAscnMpLHQhPT0iZWFzdCImJnQhPT0id2VzdCImJmEubXVsdGlwbHlCeVNjYWxhcihycyx1LHJzKSxhLnVucGFjayhlYVtlXSwwLGlzKSxlIT09ImVhc3QiJiZlIT09Indlc3QiJiZhLm11bHRpcGx5QnlTY2FsYXIoaXMsdSxpcyksYS51bnBhY2soZWFbbl0sMCxzcyksbiE9PSJlYXN0IiYmbiE9PSJ3ZXN0IiYmYS5tdWx0aXBseUJ5U2NhbGFyKHNzLHUsc3MpfWVsc2V7cz1zPz9ZLmRlZmF1bHQscy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoaSxXby51cCk7bGV0IHU9V28udXAsYz1Xby5lYXN0O2MueD0taS55LGMueT1pLngsYy56PTAsYS5ub3JtYWxpemUoYyxXby5lYXN0KSxhLmNyb3NzKHUsYyxXby5ub3J0aCksYS5tdWx0aXBseUJ5U2NhbGFyKFdvLnVwLC0xLFdvLmRvd24pLGEubXVsdGlwbHlCeVNjYWxhcihXby5lYXN0LC0xLFdvLndlc3QpLGEubXVsdGlwbHlCeVNjYWxhcihXby5ub3J0aCwtMSxXby5zb3V0aCkscnM9V29bdF0saXM9V29bZV0sc3M9V29bbl19cmV0dXJuIGZbMF09cnMueCxmWzFdPXJzLnksZlsyXT1ycy56LGZbM109MCxmWzRdPWlzLngsZls1XT1pcy55LGZbNl09aXMueixmWzddPTAsZls4XT1zcy54LGZbOV09c3MueSxmWzEwXT1zcy56LGZbMTFdPTAsZlsxMl09aS54LGZbMTNdPWkueSxmWzE0XT1pLnosZlsxNV09MSxmfSxkaFtyXT1vKSxvfTtSZS5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZT1SZS5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJlYXN0Iiwibm9ydGgiKTtSZS5ub3J0aEVhc3REb3duVG9GaXhlZEZyYW1lPVJlLmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwiZWFzdCIpO1JlLm5vcnRoVXBFYXN0VG9GaXhlZEZyYW1lPVJlLmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwidXAiKTtSZS5ub3J0aFdlc3RVcFRvRml4ZWRGcmFtZT1SZS5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJub3J0aCIsIndlc3QiKTskeD1uZXcgdGUsWng9bmV3IGEoMSwxLDEpLFF4PW5ldyBpdDtSZS5oZWFkaW5nUGl0Y2hSb2xsVG9GaXhlZEZyYW1lPWZ1bmN0aW9uKHQsZSxuLG8scil7eS50eXBlT2Yub2JqZWN0KCJIZWFkaW5nUGl0Y2hSb2xsIixlKSxvPW8/P1JlLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lO2xldCBpPXRlLmZyb21IZWFkaW5nUGl0Y2hSb2xsKGUsJHgpLHM9aXQuZnJvbVRyYW5zbGF0aW9uUXVhdGVybmlvblJvdGF0aW9uU2NhbGUoYS5aRVJPLGksWngsUXgpO3JldHVybiByPW8odCxuLHIpLGl0Lm11bHRpcGx5KHIscyxyKX07Sng9bmV3IGl0LHQzPW5ldyBaO1JlLmhlYWRpbmdQaXRjaFJvbGxRdWF0ZXJuaW9uPWZ1bmN0aW9uKHQsZSxuLG8scil7eS50eXBlT2Yub2JqZWN0KCJIZWFkaW5nUGl0Y2hSb2xsIixlKTtsZXQgaT1SZS5oZWFkaW5nUGl0Y2hSb2xsVG9GaXhlZEZyYW1lKHQsZSxuLG8sSngpLHM9aXQuZ2V0TWF0cml4MyhpLHQzKTtyZXR1cm4gdGUuZnJvbVJvdGF0aW9uTWF0cml4KHMscil9O2UzPW5ldyBhKDEsMSwxKSxuMz1uZXcgYSxvYj1uZXcgaXQsbzM9bmV3IGl0LHIzPW5ldyBaLGkzPW5ldyB0ZTtSZS5maXhlZEZyYW1lVG9IZWFkaW5nUGl0Y2hSb2xsPWZ1bmN0aW9uKHQsZSxuLG8pe3kuZGVmaW5lZCgidHJhbnNmb3JtIix0KSxlPWU/P1kuZGVmYXVsdCxuPW4/P1JlLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lLGgobyl8fChvPW5ldyBtcCk7bGV0IHI9aXQuZ2V0VHJhbnNsYXRpb24odCxuMyk7aWYoYS5lcXVhbHMocixhLlpFUk8pKXJldHVybiBvLmhlYWRpbmc9MCxvLnBpdGNoPTAsby5yb2xsPTAsbztsZXQgaT1pdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24obihyLGUsb2IpLG9iKSxzPWl0LnNldFNjYWxlKHQsZTMsbzMpO3M9aXQuc2V0VHJhbnNsYXRpb24ocyxhLlpFUk8scyksaT1pdC5tdWx0aXBseShpLHMsaSk7bGV0IGY9dGUuZnJvbVJvdGF0aW9uTWF0cml4KGl0LmdldE1hdHJpeDMoaSxyMyksaTMpO3JldHVybiBmPXRlLm5vcm1hbGl6ZShmLGYpLG1wLmZyb21RdWF0ZXJuaW9uKGYsbyl9O3MzPTYqMzYwMCs0MSo2MCs1MC41NDg0MSxjMz04NjQwMTg0ODEyODY2ZS02LGEzPS4wOTMxMDQsZjM9LTYyZS03LHUzPTExNzcyNzU4Mzg0NjY4ZS0zMixsMz03MjkyMTE1ODU1M2UtMTUscDM9UC5UV09fUEkvODY0MDAsTnA9bmV3IEduO1JlLmNvbXB1dGVJY3JmVG9DZW50cmFsQm9keUZpeGVkTWF0cml4PWZ1bmN0aW9uKHQsZSl7bGV0IG49UmUuY29tcHV0ZUljcmZUb0ZpeGVkTWF0cml4KHQsZSk7cmV0dXJuIGgobil8fChuPVJlLmNvbXB1dGVUZW1lVG9Qc2V1ZG9GaXhlZE1hdHJpeCh0LGUpKSxufTtSZS5jb21wdXRlVGVtZVRvUHNldWRvRml4ZWRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiZGF0ZSBpcyByZXF1aXJlZC4iKTtOcD1Hbi5hZGRTZWNvbmRzKHQsLUduLmNvbXB1dGVUYWlNaW51c1V0Yyh0KSxOcCk7bGV0IG49TnAuZGF5TnVtYmVyLG89TnAuc2Vjb25kc09mRGF5LHIsaT1uLTI0NTE1NDU7bz49NDMyMDA/cj0oaSsuNSkveW4uREFZU19QRVJfSlVMSUFOX0NFTlRVUlk6cj0oaS0uNSkveW4uREFZU19QRVJfSlVMSUFOX0NFTlRVUlk7bGV0IGY9KHMzK3IqKGMzK3IqKGEzK3IqZjMpKSkqcDMlUC5UV09fUEksdT1sMyt1Myoobi0yNDUxNTQ1NWUtMSksYz0obyt5bi5TRUNPTkRTX1BFUl9EQVkqLjUpJXluLlNFQ09ORFNfUEVSX0RBWSxsPWYrdSpjLHA9TWF0aC5jb3MobCksZD1NYXRoLnNpbihsKTtyZXR1cm4gaChlKT8oZVswXT1wLGVbMV09LWQsZVsyXT0wLGVbM109ZCxlWzRdPXAsZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT0xLGUpOm5ldyBaKHAsZCwwLC1kLHAsMCwwLDAsMSl9O1JlLmlhdTIwMDZYeXNEYXRhPW5ldyBrQTtSZS5lYXJ0aE9yaWVudGF0aW9uUGFyYW1ldGVycz1OQS5OT05FO19oPTMyLjE4NCxkMz0yNDUxNTQ1O1JlLnByZWxvYWRJY3JmRml4ZWQ9ZnVuY3Rpb24odCl7bGV0IGU9dC5zdGFydC5kYXlOdW1iZXIsbj10LnN0YXJ0LnNlY29uZHNPZkRheStfaCxvPXQuc3RvcC5kYXlOdW1iZXIscj10LnN0b3Auc2Vjb25kc09mRGF5K19oO3JldHVybiBSZS5pYXUyMDA2WHlzRGF0YS5wcmVsb2FkKGUsbixvLHIpfTtSZS5jb21wdXRlSWNyZlRvRml4ZWRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiZGF0ZSBpcyByZXF1aXJlZC4iKTtoKGUpfHwoZT1uZXcgWik7bGV0IG49UmUuY29tcHV0ZUZpeGVkVG9JY3JmTWF0cml4KHQsZSk7aWYoaChuKSlyZXR1cm4gWi50cmFuc3Bvc2UobixlKX07bTM9MzIuMTg0LGgzPTI0NTE1NDUsSXA9bmV3IG1wLF8zPW5ldyBaLHkzPW5ldyBHbjtSZS5jb21wdXRlTW9vbkZpeGVkVG9JY3JmTWF0cml4PWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImRhdGUgaXMgcmVxdWlyZWQuIik7aChlKXx8KGU9bmV3IFopO2xldCBuPUduLmFkZFNlY29uZHModCxtMyx5Myksbz1Hbi50b3RhbERheXMobiktaDMscj1QLnRvUmFkaWFucygxMi4xMTIpLVAudG9SYWRpYW5zKC4wNTI5OTIpKm8saT1QLnRvUmFkaWFucygyNC4yMjQpLVAudG9SYWRpYW5zKC4xMDU5ODQpKm8scz1QLnRvUmFkaWFucygyMjcuNjQ1KStQLnRvUmFkaWFucygxMy4wMTIpKm8sZj1QLnRvUmFkaWFucygyNjEuMTA1KStQLnRvUmFkaWFucygxMy4zNDA3MTYpKm8sdT1QLnRvUmFkaWFucygzNTgpK1AudG9SYWRpYW5zKC45ODU2KSpvO3JldHVybiBJcC5waXRjaD1QLnRvUmFkaWFucygxODApLVAudG9SYWRpYW5zKDMuODc4KSpNYXRoLnNpbihyKS1QLnRvUmFkaWFucyguMTIpKk1hdGguc2luKGkpK1AudG9SYWRpYW5zKC4wNykqTWF0aC5zaW4ocyktUC50b1JhZGlhbnMoLjAxNykqTWF0aC5zaW4oZiksSXAucm9sbD1QLnRvUmFkaWFucyg2Ni41My05MCkrUC50b1JhZGlhbnMoMS41NDMpKk1hdGguY29zKHIpK1AudG9SYWRpYW5zKC4yNCkqTWF0aC5jb3MoaSktUC50b1JhZGlhbnMoLjAyOCkqTWF0aC5jb3MocykrUC50b1JhZGlhbnMoLjAwNykqTWF0aC5jb3MoZiksSXAuaGVhZGluZz1QLnRvUmFkaWFucygyNDQuMzc1LTkwKStQLnRvUmFkaWFucygxMy4xNzYzNTgzMSkqbytQLnRvUmFkaWFucygzLjU1OCkqTWF0aC5zaW4ocikrUC50b1JhZGlhbnMoLjEyMSkqTWF0aC5zaW4oaSktUC50b1JhZGlhbnMoLjA2NCkqTWF0aC5zaW4ocykrUC50b1JhZGlhbnMoLjAxNikqTWF0aC5zaW4oZikrUC50b1JhZGlhbnMoLjAyNSkqTWF0aC5zaW4odSksWi5mcm9tSGVhZGluZ1BpdGNoUm9sbChJcCxfMyl9O1JlLmNvbXB1dGVJY3JmVG9Nb29uRml4ZWRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiZGF0ZSBpcyByZXF1aXJlZC4iKTtoKGUpfHwoZT1uZXcgWik7bGV0IG49UmUuY29tcHV0ZU1vb25GaXhlZFRvSWNyZk1hdHJpeCh0LGUpO2lmKGgobikpcmV0dXJuIFoudHJhbnNwb3NlKG4sZSl9O2czPW5ldyBncCgwLDAsMCksQTM9bmV3IGNmKDAsMCwwLDAsMCwwKSxtaD1uZXcgWixoaD1uZXcgWjtSZS5jb21wdXRlRml4ZWRUb0ljcmZNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiZGF0ZSBpcyByZXF1aXJlZC4iKTtoKGUpfHwoZT1uZXcgWik7bGV0IG49UmUuZWFydGhPcmllbnRhdGlvblBhcmFtZXRlcnMuY29tcHV0ZSh0LEEzKTtpZighaChuKSlyZXR1cm47bGV0IG89dC5kYXlOdW1iZXIscj10LnNlY29uZHNPZkRheStfaCxpPVJlLmlhdTIwMDZYeXNEYXRhLmNvbXB1dGVYeXNSYWRpYW5zKG8scixnMyk7aWYoIWgoaSkpcmV0dXJuO2xldCBzPWkueCtuLnhQb2xlT2Zmc2V0LGY9aS55K24ueVBvbGVPZmZzZXQsdT0xLygxK01hdGguc3FydCgxLXMqcy1mKmYpKSxjPW1oO2NbMF09MS11KnMqcyxjWzNdPS11KnMqZixjWzZdPXMsY1sxXT0tdSpzKmYsY1s0XT0xLXUqZipmLGNbN109ZixjWzJdPS1zLGNbNV09LWYsY1s4XT0xLXUqKHMqcytmKmYpO2xldCBsPVouZnJvbVJvdGF0aW9uWigtaS5zLGhoKSxwPVoubXVsdGlwbHkoYyxsLG1oKSxkPXQuZGF5TnVtYmVyLG09dC5zZWNvbmRzT2ZEYXktR24uY29tcHV0ZVRhaU1pbnVzVXRjKHQpK24udXQxTWludXNVdGMsXz1kLTI0NTE1NDUsZz1tL3luLlNFQ09ORFNfUEVSX0RBWSxiPS43NzkwNTcyNzMyNjQrZysuMDAyNzM3ODExOTExMzU0NDgqKF8rZyk7Yj1iJTEqUC5UV09fUEk7bGV0IFQ9Wi5mcm9tUm90YXRpb25aKGIsaGgpLE89Wi5tdWx0aXBseShwLFQsbWgpLEU9TWF0aC5jb3Mobi54UG9sZVdhbmRlciksdz1NYXRoLmNvcyhuLnlQb2xlV2FuZGVyKSxDPU1hdGguc2luKG4ueFBvbGVXYW5kZXIpLE09TWF0aC5zaW4obi55UG9sZVdhbmRlciksTj1vLWQzK3IveW4uU0VDT05EU19QRVJfREFZO04vPTM2NTI1O2xldCBGPS00N2UtNipOKlAuUkFESUFOU19QRVJfREVHUkVFLzM2MDAsST1NYXRoLmNvcyhGKSx2PU1hdGguc2luKEYpLEI9aGg7cmV0dXJuIEJbMF09RSpJLEJbMV09RSp2LEJbMl09QyxCWzNdPS13KnYrTSpDKkksQls0XT13KkkrTSpDKnYsQls1XT0tTSpFLEJbNl09LU0qdi13KkMqSSxCWzddPU0qSS13KkMqdixCWzhdPXcqRSxaLm11bHRpcGx5KE8sQixlKX07YjM9bmV3IG1lO1JlLnBvaW50VG9XaW5kb3dDb29yZGluYXRlcz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gbz1SZS5wb2ludFRvR0xXaW5kb3dDb29yZGluYXRlcyh0LGUsbixvKSxvLnk9MiplWzVdLW8ueSxvfTtSZS5wb2ludFRvR0xXaW5kb3dDb29yZGluYXRlcz1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgTCgibW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgidmlld3BvcnRUcmFuc2Zvcm1hdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgTCgicG9pbnQgaXMgcmVxdWlyZWQuIik7aChvKXx8KG89bmV3IEopO2xldCByPWIzO3JldHVybiBpdC5tdWx0aXBseUJ5VmVjdG9yKHQsbWUuZnJvbUVsZW1lbnRzKG4ueCxuLnksbi56LDEsciksciksbWUubXVsdGlwbHlCeVNjYWxhcihyLDEvci53LHIpLGl0Lm11bHRpcGx5QnlWZWN0b3IoZSxyLHIpLEouZnJvbUNhcnRlc2lhbjQocixvKX07VDM9bmV3IGEsdzM9bmV3IGEsTzM9bmV3IGE7UmUucm90YXRpb25NYXRyaXhGcm9tUG9zaXRpb25WZWxvY2l0eT1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgTCgicG9zaXRpb24gaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoInZlbG9jaXR5IGlzIHJlcXVpcmVkLiIpO2xldCByPShuPz9ZLmRlZmF1bHQpLmdlb2RldGljU3VyZmFjZU5vcm1hbCh0LFQzKSxpPWEuY3Jvc3MoZSxyLHczKTthLmVxdWFsc0Vwc2lsb24oaSxhLlpFUk8sUC5FUFNJTE9ONikmJihpPWEuY2xvbmUoYS5VTklUX1gsaSkpO2xldCBzPWEuY3Jvc3MoaSxlLE8zKTtyZXR1cm4gYS5ub3JtYWxpemUocyxzKSxhLmNyb3NzKGUscyxpKSxhLm5lZ2F0ZShpLGkpLGEubm9ybWFsaXplKGksaSksaChvKXx8KG89bmV3IFopLG9bMF09ZS54LG9bMV09ZS55LG9bMl09ZS56LG9bM109aS54LG9bNF09aS55LG9bNV09aS56LG9bNl09cy54LG9bN109cy55LG9bOF09cy56LG99O3JiPW5ldyBpdCgwLDAsMSwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMCwxKSxpYj1uZXcgc3QseWg9bmV3IGEsRTM9bmV3IGEsUjM9bmV3IFosZ2g9bmV3IGl0LHNiPW5ldyBpdDtSZS5iYXNpc1RvMkQ9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJwcm9qZWN0aW9uIGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJtYXRyaXggaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEwoInJlc3VsdCBpcyByZXF1aXJlZC4iKTtsZXQgbz1pdC5nZXRUcmFuc2xhdGlvbihlLEUzKSxyPXQuZWxsaXBzb2lkLGk7aWYoYS5lcXVhbHMobyxhLlpFUk8pKWk9YS5jbG9uZShhLlpFUk8seWgpO2Vsc2V7bGV0IGw9ci5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhvLGliKTtpPXQucHJvamVjdChsLHloKSxhLmZyb21FbGVtZW50cyhpLnosaS54LGkueSxpKX1sZXQgcz1SZS5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShvLHIsZ2gpLGY9aXQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKHMsc2IpLHU9aXQuZ2V0TWF0cml4MyhlLFIzKSxjPWl0Lm11bHRpcGx5QnlNYXRyaXgzKGYsdSxuKTtyZXR1cm4gaXQubXVsdGlwbHkocmIsYyxuKSxpdC5zZXRUcmFuc2xhdGlvbihuLGksbiksbn07UmUuZWxsaXBzb2lkVG8yRE1vZGVsTWF0cml4PWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgTCgicHJvamVjdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgiY2VudGVyIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBMKCJyZXN1bHQgaXMgcmVxdWlyZWQuIik7bGV0IG89dC5lbGxpcHNvaWQscj1SZS5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShlLG8sZ2gpLGk9aXQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKHIsc2IpLHM9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLGliKSxmPXQucHJvamVjdChzLHloKTthLmZyb21FbGVtZW50cyhmLnosZi54LGYueSxmKTtsZXQgdT1pdC5mcm9tVHJhbnNsYXRpb24oZixnaCk7cmV0dXJuIGl0Lm11bHRpcGx5KHJiLGksbiksaXQubXVsdGlwbHkodSxuLG4pLG59O1hvPVJlfSk7ZnVuY3Rpb24gY2UodCxlLG4sbyl7dGhpcy53ZXN0PXQ/PzAsdGhpcy5zb3V0aD1lPz8wLHRoaXMuZWFzdD1uPz8wLHRoaXMubm9ydGg9bz8/MH12YXIgUzMsQzMseDMsUDMsTTMsQWgsTjMsTXQsd249JCgoKT0+e0x0KCk7SWUoKTtXdCgpO2F0KCk7JHQoKTtLdCgpO2NzKCk7VW4oKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjZS5wcm90b3R5cGUse3dpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY2UuY29tcHV0ZVdpZHRoKHRoaXMpfX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY2UuY29tcHV0ZUhlaWdodCh0aGlzKX19fSk7Y2UucGFja2VkTGVuZ3RoPTQ7Y2UucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxlW24rK109dC53ZXN0LGVbbisrXT10LnNvdXRoLGVbbisrXT10LmVhc3QsZVtuXT10Lm5vcnRoLGV9O2NlLnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MCxoKG4pfHwobj1uZXcgY2UpLG4ud2VzdD10W2UrK10sbi5zb3V0aD10W2UrK10sbi5lYXN0PXRbZSsrXSxuLm5vcnRoPXRbZV0sbn07Y2UuY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKHQpe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KTtsZXQgZT10LmVhc3Qsbj10Lndlc3Q7cmV0dXJuIGU8biYmKGUrPVAuVFdPX1BJKSxlLW59O2NlLmNvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx0Lm5vcnRoLXQuc291dGh9O2NlLmZyb21EZWdyZWVzPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIHQ9UC50b1JhZGlhbnModD8/MCksZT1QLnRvUmFkaWFucyhlPz8wKSxuPVAudG9SYWRpYW5zKG4/PzApLG89UC50b1JhZGlhbnMobz8/MCksaChyKT8oci53ZXN0PXQsci5zb3V0aD1lLHIuZWFzdD1uLHIubm9ydGg9byxyKTpuZXcgY2UodCxlLG4sbyl9O2NlLmZyb21SYWRpYW5zPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIGgocik/KHIud2VzdD10Pz8wLHIuc291dGg9ZT8/MCxyLmVhc3Q9bj8/MCxyLm5vcnRoPW8/PzAscik6bmV3IGNlKHQsZSxuLG8pfTtjZS5mcm9tQ2FydG9ncmFwaGljQXJyYXk9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRvZ3JhcGhpY3MiLHQpO2xldCBuPU51bWJlci5NQVhfVkFMVUUsbz0tTnVtYmVyLk1BWF9WQUxVRSxyPU51bWJlci5NQVhfVkFMVUUsaT0tTnVtYmVyLk1BWF9WQUxVRSxzPU51bWJlci5NQVhfVkFMVUUsZj0tTnVtYmVyLk1BWF9WQUxVRTtmb3IobGV0IHU9MCxjPXQubGVuZ3RoO3U8Yzt1Kyspe2xldCBsPXRbdV07bj1NYXRoLm1pbihuLGwubG9uZ2l0dWRlKSxvPU1hdGgubWF4KG8sbC5sb25naXR1ZGUpLHM9TWF0aC5taW4ocyxsLmxhdGl0dWRlKSxmPU1hdGgubWF4KGYsbC5sYXRpdHVkZSk7bGV0IHA9bC5sb25naXR1ZGU+PTA/bC5sb25naXR1ZGU6bC5sb25naXR1ZGUrUC5UV09fUEk7cj1NYXRoLm1pbihyLHApLGk9TWF0aC5tYXgoaSxwKX1yZXR1cm4gby1uPmktciYmKG49cixvPWksbz5QLlBJJiYobz1vLVAuVFdPX1BJKSxuPlAuUEkmJihuPW4tUC5UV09fUEkpKSxoKGUpPyhlLndlc3Q9bixlLnNvdXRoPXMsZS5lYXN0PW8sZS5ub3J0aD1mLGUpOm5ldyBjZShuLHMsbyxmKX07Y2UuZnJvbUNhcnRlc2lhbkFycmF5PWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImNhcnRlc2lhbnMiLHQpLGU9ZT8/WS5kZWZhdWx0O2xldCBvPU51bWJlci5NQVhfVkFMVUUscj0tTnVtYmVyLk1BWF9WQUxVRSxpPU51bWJlci5NQVhfVkFMVUUscz0tTnVtYmVyLk1BWF9WQUxVRSxmPU51bWJlci5NQVhfVkFMVUUsdT0tTnVtYmVyLk1BWF9WQUxVRTtmb3IobGV0IGM9MCxsPXQubGVuZ3RoO2M8bDtjKyspe2xldCBwPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModFtjXSk7bz1NYXRoLm1pbihvLHAubG9uZ2l0dWRlKSxyPU1hdGgubWF4KHIscC5sb25naXR1ZGUpLGY9TWF0aC5taW4oZixwLmxhdGl0dWRlKSx1PU1hdGgubWF4KHUscC5sYXRpdHVkZSk7bGV0IGQ9cC5sb25naXR1ZGU+PTA/cC5sb25naXR1ZGU6cC5sb25naXR1ZGUrUC5UV09fUEk7aT1NYXRoLm1pbihpLGQpLHM9TWF0aC5tYXgocyxkKX1yZXR1cm4gci1vPnMtaSYmKG89aSxyPXMscj5QLlBJJiYocj1yLVAuVFdPX1BJKSxvPlAuUEkmJihvPW8tUC5UV09fUEkpKSxoKG4pPyhuLndlc3Q9byxuLnNvdXRoPWYsbi5lYXN0PXIsbi5ub3J0aD11LG4pOm5ldyBjZShvLGYscix1KX07UzM9bmV3IGEsQzM9bmV3IGEseDM9bmV3IGEsUDM9bmV3IGEsTTM9bmV3IGEsQWg9bmV3IEFycmF5KDUpO2ZvcihsZXQgdD0wO3Q8QWgubGVuZ3RoOysrdClBaFt0XT1uZXcgYTtjZS5mcm9tQm91bmRpbmdTcGhlcmU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgiYm91bmRpbmdTcGhlcmUiLHQpO2xldCBvPXQuY2VudGVyLHI9dC5yYWRpdXM7aWYoaChlKXx8KGU9WS5kZWZhdWx0KSxoKG4pfHwobj1uZXcgY2UpLGEuZXF1YWxzKG8sYS5aRVJPKSlyZXR1cm4gY2UuY2xvbmUoY2UuTUFYX1ZBTFVFLG4pLG47bGV0IGk9WG8uZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUobyxlLFMzKSxzPWl0Lm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKGksYS5VTklUX1gsQzMpO2Eubm9ybWFsaXplKHMscyk7bGV0IGY9aXQubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IoaSxhLlVOSVRfWSx4Myk7YS5ub3JtYWxpemUoZixmKSxhLm11bHRpcGx5QnlTY2FsYXIoZixyLGYpLGEubXVsdGlwbHlCeVNjYWxhcihzLHIscyk7bGV0IHU9YS5uZWdhdGUoZixNMyksYz1hLm5lZ2F0ZShzLFAzKSxsPUFoLHA9bFswXTtyZXR1cm4gYS5hZGQobyxmLHApLHA9bFsxXSxhLmFkZChvLGMscCkscD1sWzJdLGEuYWRkKG8sdSxwKSxwPWxbM10sYS5hZGQobyxzLHApLGxbNF09byxjZS5mcm9tQ2FydGVzaWFuQXJyYXkobCxlLG4pfTtjZS5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGUud2VzdD10Lndlc3QsZS5zb3V0aD10LnNvdXRoLGUuZWFzdD10LmVhc3QsZS5ub3J0aD10Lm5vcnRoLGUpOm5ldyBjZSh0Lndlc3QsdC5zb3V0aCx0LmVhc3QsdC5ub3J0aCl9O2NlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPW4/PzAsdD09PWV8fGgodCkmJmgoZSkmJk1hdGguYWJzKHQud2VzdC1lLndlc3QpPD1uJiZNYXRoLmFicyh0LnNvdXRoLWUuc291dGgpPD1uJiZNYXRoLmFicyh0LmVhc3QtZS5lYXN0KTw9biYmTWF0aC5hYnModC5ub3J0aC1lLm5vcnRoKTw9bn07Y2UucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBjZS5jbG9uZSh0aGlzLHQpfTtjZS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBjZS5lcXVhbHModGhpcyx0KX07Y2UuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0Lndlc3Q9PT1lLndlc3QmJnQuc291dGg9PT1lLnNvdXRoJiZ0LmVhc3Q9PT1lLmVhc3QmJnQubm9ydGg9PT1lLm5vcnRofTtjZS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUpe3JldHVybiBjZS5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlKX07Y2UuX3ZhbGlkYXRlPWZ1bmN0aW9uKHQpe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KTtsZXQgZT10Lm5vcnRoO3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJub3J0aCIsZSwtUC5QSV9PVkVSX1RXTykseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm5vcnRoIixlLFAuUElfT1ZFUl9UV08pO2xldCBuPXQuc291dGg7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInNvdXRoIixuLC1QLlBJX09WRVJfVFdPKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygic291dGgiLG4sUC5QSV9PVkVSX1RXTyk7bGV0IG89dC53ZXN0O3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ3ZXN0IixvLC1NYXRoLlBJKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygid2VzdCIsbyxNYXRoLlBJKTtsZXQgcj10LmVhc3Q7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImVhc3QiLHIsLU1hdGguUEkpLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJlYXN0IixyLE1hdGguUEkpfTtjZS5zb3V0aHdlc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGgoZSk/KGUubG9uZ2l0dWRlPXQud2VzdCxlLmxhdGl0dWRlPXQuc291dGgsZS5oZWlnaHQ9MCxlKTpuZXcgc3QodC53ZXN0LHQuc291dGgpfTtjZS5ub3J0aHdlc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGgoZSk/KGUubG9uZ2l0dWRlPXQud2VzdCxlLmxhdGl0dWRlPXQubm9ydGgsZS5oZWlnaHQ9MCxlKTpuZXcgc3QodC53ZXN0LHQubm9ydGgpfTtjZS5ub3J0aGVhc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGgoZSk/KGUubG9uZ2l0dWRlPXQuZWFzdCxlLmxhdGl0dWRlPXQubm9ydGgsZS5oZWlnaHQ9MCxlKTpuZXcgc3QodC5lYXN0LHQubm9ydGgpfTtjZS5zb3V0aGVhc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGgoZSk/KGUubG9uZ2l0dWRlPXQuZWFzdCxlLmxhdGl0dWRlPXQuc291dGgsZS5oZWlnaHQ9MCxlKTpuZXcgc3QodC5lYXN0LHQuc291dGgpfTtjZS5jZW50ZXI9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCk7bGV0IG49dC5lYXN0LG89dC53ZXN0O248byYmKG4rPVAuVFdPX1BJKTtsZXQgcj1QLm5lZ2F0aXZlUGlUb1BpKChvK24pKi41KSxpPSh0LnNvdXRoK3Qubm9ydGgpKi41O3JldHVybiBoKGUpPyhlLmxvbmdpdHVkZT1yLGUubGF0aXR1ZGU9aSxlLmhlaWdodD0wLGUpOm5ldyBzdChyLGkpfTtjZS5pbnRlcnNlY3Rpb249ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx5LnR5cGVPZi5vYmplY3QoIm90aGVyUmVjdGFuZ2xlIixlKTtsZXQgbz10LmVhc3Qscj10Lndlc3QsaT1lLmVhc3Qscz1lLndlc3Q7bzxyJiZpPjA/bys9UC5UV09fUEk6aTxzJiZvPjAmJihpKz1QLlRXT19QSSksbzxyJiZzPDA/cys9UC5UV09fUEk6aTxzJiZyPDAmJihyKz1QLlRXT19QSSk7bGV0IGY9UC5uZWdhdGl2ZVBpVG9QaShNYXRoLm1heChyLHMpKSx1PVAubmVnYXRpdmVQaVRvUGkoTWF0aC5taW4obyxpKSk7aWYoKHQud2VzdDx0LmVhc3R8fGUud2VzdDxlLmVhc3QpJiZ1PD1mKXJldHVybjtsZXQgYz1NYXRoLm1heCh0LnNvdXRoLGUuc291dGgpLGw9TWF0aC5taW4odC5ub3J0aCxlLm5vcnRoKTtpZighKGM+PWwpKXJldHVybiBoKG4pPyhuLndlc3Q9ZixuLnNvdXRoPWMsbi5lYXN0PXUsbi5ub3J0aD1sLG4pOm5ldyBjZShmLGMsdSxsKX07Y2Uuc2ltcGxlSW50ZXJzZWN0aW9uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCkseS50eXBlT2Yub2JqZWN0KCJvdGhlclJlY3RhbmdsZSIsZSk7bGV0IG89TWF0aC5tYXgodC53ZXN0LGUud2VzdCkscj1NYXRoLm1heCh0LnNvdXRoLGUuc291dGgpLGk9TWF0aC5taW4odC5lYXN0LGUuZWFzdCkscz1NYXRoLm1pbih0Lm5vcnRoLGUubm9ydGgpO2lmKCEocj49c3x8bz49aSkpcmV0dXJuIGgobik/KG4ud2VzdD1vLG4uc291dGg9cixuLmVhc3Q9aSxuLm5vcnRoPXMsbik6bmV3IGNlKG8scixpLHMpfTtjZS51bmlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm9iamVjdCgib3RoZXJSZWN0YW5nbGUiLGUpLGgobil8fChuPW5ldyBjZSk7bGV0IG89dC5lYXN0LHI9dC53ZXN0LGk9ZS5lYXN0LHM9ZS53ZXN0O288ciYmaT4wP28rPVAuVFdPX1BJOmk8cyYmbz4wJiYoaSs9UC5UV09fUEkpLG88ciYmczwwP3MrPVAuVFdPX1BJOmk8cyYmcjwwJiYocis9UC5UV09fUEkpO2xldCBmPVAubmVnYXRpdmVQaVRvUGkoTWF0aC5taW4ocixzKSksdT1QLm5lZ2F0aXZlUGlUb1BpKE1hdGgubWF4KG8saSkpO3JldHVybiBuLndlc3Q9ZixuLnNvdXRoPU1hdGgubWluKHQuc291dGgsZS5zb3V0aCksbi5lYXN0PXUsbi5ub3J0aD1NYXRoLm1heCh0Lm5vcnRoLGUubm9ydGgpLG59O2NlLmV4cGFuZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx5LnR5cGVPZi5vYmplY3QoImNhcnRvZ3JhcGhpYyIsZSksaChuKXx8KG49bmV3IGNlKSxuLndlc3Q9TWF0aC5taW4odC53ZXN0LGUubG9uZ2l0dWRlKSxuLnNvdXRoPU1hdGgubWluKHQuc291dGgsZS5sYXRpdHVkZSksbi5lYXN0PU1hdGgubWF4KHQuZWFzdCxlLmxvbmdpdHVkZSksbi5ub3J0aD1NYXRoLm1heCh0Lm5vcnRoLGUubGF0aXR1ZGUpLG59O2NlLmNvbnRhaW5zPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm9iamVjdCgiY2FydG9ncmFwaGljIixlKTtsZXQgbj1lLmxvbmdpdHVkZSxvPWUubGF0aXR1ZGUscj10Lndlc3QsaT10LmVhc3Q7cmV0dXJuIGk8ciYmKGkrPVAuVFdPX1BJLG48MCYmKG4rPVAuVFdPX1BJKSksKG4+cnx8UC5lcXVhbHNFcHNpbG9uKG4scixQLkVQU0lMT04xNCkpJiYobjxpfHxQLmVxdWFsc0Vwc2lsb24obixpLFAuRVBTSUxPTjE0KSkmJm8+PXQuc291dGgmJm88PXQubm9ydGh9O04zPW5ldyBzdDtjZS5zdWJzYW1wbGU9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGU9ZT8/WS5kZWZhdWx0LG49bj8/MCxoKG8pfHwobz1bXSk7bGV0IHI9MCxpPXQubm9ydGgscz10LnNvdXRoLGY9dC5lYXN0LHU9dC53ZXN0LGM9TjM7Yy5oZWlnaHQ9bixjLmxvbmdpdHVkZT11LGMubGF0aXR1ZGU9aSxvW3JdPWUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW3JdKSxyKyssYy5sb25naXR1ZGU9ZixvW3JdPWUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW3JdKSxyKyssYy5sYXRpdHVkZT1zLG9bcl09ZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bcl0pLHIrKyxjLmxvbmdpdHVkZT11LG9bcl09ZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bcl0pLHIrKyxpPDA/Yy5sYXRpdHVkZT1pOnM+MD9jLmxhdGl0dWRlPXM6Yy5sYXRpdHVkZT0wO2ZvcihsZXQgbD0xO2w8ODsrK2wpYy5sb25naXR1ZGU9LU1hdGguUEkrbCpQLlBJX09WRVJfVFdPLGNlLmNvbnRhaW5zKHQsYykmJihvW3JdPWUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW3JdKSxyKyspO3JldHVybiBjLmxhdGl0dWRlPT09MCYmKGMubG9uZ2l0dWRlPXUsb1tyXT1lLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGMsb1tyXSkscisrLGMubG9uZ2l0dWRlPWYsb1tyXT1lLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGMsb1tyXSkscisrKSxvLmxlbmd0aD1yLG99O2NlLnN1YnNlY3Rpb249ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2lmKHkudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygid2VzdExlcnAiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIndlc3RMZXJwIixlLDEpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJzb3V0aExlcnAiLG4sMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoInNvdXRoTGVycCIsbiwxKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZWFzdExlcnAiLG8sMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImVhc3RMZXJwIixvLDEpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJub3J0aExlcnAiLHIsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm5vcnRoTGVycCIsciwxKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygid2VzdExlcnAiLGUsbykseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoInNvdXRoTGVycCIsbixyKSxoKGkpfHwoaT1uZXcgY2UpLHQud2VzdDw9dC5lYXN0KXtsZXQgZj10LmVhc3QtdC53ZXN0O2kud2VzdD10Lndlc3QrZSpmLGkuZWFzdD10Lndlc3QrbypmfWVsc2V7bGV0IGY9UC5UV09fUEkrdC5lYXN0LXQud2VzdDtpLndlc3Q9UC5uZWdhdGl2ZVBpVG9QaSh0Lndlc3QrZSpmKSxpLmVhc3Q9UC5uZWdhdGl2ZVBpVG9QaSh0Lndlc3QrbypmKX1sZXQgcz10Lm5vcnRoLXQuc291dGg7cmV0dXJuIGkuc291dGg9dC5zb3V0aCtuKnMsaS5ub3J0aD10LnNvdXRoK3IqcyxlPT09MSYmKGkud2VzdD10LmVhc3QpLG89PT0xJiYoaS5lYXN0PXQuZWFzdCksbj09PTEmJihpLnNvdXRoPXQubm9ydGgpLHI9PT0xJiYoaS5ub3J0aD10Lm5vcnRoKSxpfTtjZS5NQVhfVkFMVUU9T2JqZWN0LmZyZWV6ZShuZXcgY2UoLU1hdGguUEksLVAuUElfT1ZFUl9UV08sTWF0aC5QSSxQLlBJX09WRVJfVFdPKSk7TXQ9Y2V9KTtmdW5jdGlvbiBlZSh0LGUpe3RoaXMuY2VudGVyPWEuY2xvbmUodD8/YS5aRVJPKSx0aGlzLnJhZGl1cz1lPz8wfXZhciB3aCxPaCxFaCxSaCxTaCxDaCx4aCxpbyxQaCxNaCxOaCxJaCxJMyxjYix2MyxGMyxiaCxUaCxMMyxEMyxCMyxVMyxrMyxHMyxWMyx6MyxqMyxIMyxxMyxLMyxhYixXMyxYMyxZMywkMyxaMyx1YixmYixndCx2ZT0kKCgpPT57THQoKTtJZSgpO1d0KCk7YXQoKTskdCgpO1NpKCk7R3MoKTtIbCgpO0t0KCk7Qm4oKTtVbigpO3duKCk7d2g9bmV3IGEsT2g9bmV3IGEsRWg9bmV3IGEsUmg9bmV3IGEsU2g9bmV3IGEsQ2g9bmV3IGEseGg9bmV3IGEsaW89bmV3IGEsUGg9bmV3IGEsTWg9bmV3IGEsTmg9bmV3IGEsSWg9bmV3IGEsSTM9NC8zKlAuUEk7ZWUuZnJvbVBvaW50cz1mdW5jdGlvbih0LGUpe2lmKGgoZSl8fChlPW5ldyBlZSksIWgodCl8fHQubGVuZ3RoPT09MClyZXR1cm4gZS5jZW50ZXI9YS5jbG9uZShhLlpFUk8sZS5jZW50ZXIpLGUucmFkaXVzPTAsZTtsZXQgbj1hLmNsb25lKHRbMF0seGgpLG89YS5jbG9uZShuLHdoKSxyPWEuY2xvbmUobixPaCksaT1hLmNsb25lKG4sRWgpLHM9YS5jbG9uZShuLFJoKSxmPWEuY2xvbmUobixTaCksdT1hLmNsb25lKG4sQ2gpLGM9dC5sZW5ndGgsbDtmb3IobD0xO2w8YztsKyspe2EuY2xvbmUodFtsXSxuKTtsZXQgRj1uLngsST1uLnksdj1uLno7RjxvLngmJmEuY2xvbmUobixvKSxGPnMueCYmYS5jbG9uZShuLHMpLEk8ci55JiZhLmNsb25lKG4sciksST5mLnkmJmEuY2xvbmUobixmKSx2PGkueiYmYS5jbG9uZShuLGkpLHY+dS56JiZhLmNsb25lKG4sdSl9bGV0IHA9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QocyxvLGlvKSksZD1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChmLHIsaW8pKSxtPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KHUsaSxpbykpLF89byxnPXMsYj1wO2Q+YiYmKGI9ZCxfPXIsZz1mKSxtPmImJihiPW0sXz1pLGc9dSk7bGV0IFQ9UGg7VC54PShfLngrZy54KSouNSxULnk9KF8ueStnLnkpKi41LFQuej0oXy56K2cueikqLjU7bGV0IE89YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QoZyxULGlvKSksRT1NYXRoLnNxcnQoTyksdz1NaDt3Lng9by54LHcueT1yLnksdy56PWkuejtsZXQgQz1OaDtDLng9cy54LEMueT1mLnksQy56PXUuejtsZXQgTT1hLm1pZHBvaW50KHcsQyxJaCksTj0wO2ZvcihsPTA7bDxjO2wrKyl7YS5jbG9uZSh0W2xdLG4pO2xldCBGPWEubWFnbml0dWRlKGEuc3VidHJhY3QobixNLGlvKSk7Rj5OJiYoTj1GKTtsZXQgST1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChuLFQsaW8pKTtpZihJPk8pe2xldCB2PU1hdGguc3FydChJKTtFPShFK3YpKi41LE89RSpFO2xldCBCPXYtRTtULng9KEUqVC54K0Iqbi54KS92LFQueT0oRSpULnkrQipuLnkpL3YsVC56PShFKlQueitCKm4ueikvdn19cmV0dXJuIEU8Tj8oYS5jbG9uZShULGUuY2VudGVyKSxlLnJhZGl1cz1FKTooYS5jbG9uZShNLGUuY2VudGVyKSxlLnJhZGl1cz1OKSxlfTtjYj1uZXcgSm4sdjM9bmV3IGEsRjM9bmV3IGEsYmg9bmV3IHN0LFRoPW5ldyBzdDtlZS5mcm9tUmVjdGFuZ2xlMkQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlZS5mcm9tUmVjdGFuZ2xlV2l0aEhlaWdodHMyRCh0LGUsMCwwLG4pfTtlZS5mcm9tUmVjdGFuZ2xlV2l0aEhlaWdodHMyRD1mdW5jdGlvbih0LGUsbixvLHIpe2lmKGgocil8fChyPW5ldyBlZSksIWgodCkpcmV0dXJuIHIuY2VudGVyPWEuY2xvbmUoYS5aRVJPLHIuY2VudGVyKSxyLnJhZGl1cz0wLHI7Y2IuX2VsbGlwc29pZD1ZLmRlZmF1bHQsZT1lPz9jYixNdC5zb3V0aHdlc3QodCxiaCksYmguaGVpZ2h0PW4sTXQubm9ydGhlYXN0KHQsVGgpLFRoLmhlaWdodD1vO2xldCBpPWUucHJvamVjdChiaCx2Mykscz1lLnByb2plY3QoVGgsRjMpLGY9cy54LWkueCx1PXMueS1pLnksYz1zLnotaS56O3IucmFkaXVzPU1hdGguc3FydChmKmYrdSp1K2MqYykqLjU7bGV0IGw9ci5jZW50ZXI7cmV0dXJuIGwueD1pLngrZiouNSxsLnk9aS55K3UqLjUsbC56PWkueitjKi41LHJ9O0wzPVtdO2VlLmZyb21SZWN0YW5nbGUzRD1mdW5jdGlvbih0LGUsbixvKXtpZihlPWU/P1kuZGVmYXVsdCxuPW4/PzAsaChvKXx8KG89bmV3IGVlKSwhaCh0KSlyZXR1cm4gby5jZW50ZXI9YS5jbG9uZShhLlpFUk8sby5jZW50ZXIpLG8ucmFkaXVzPTAsbztsZXQgcj1NdC5zdWJzYW1wbGUodCxlLG4sTDMpO3JldHVybiBlZS5mcm9tUG9pbnRzKHIsbyl9O2VlLmZyb21WZXJ0aWNlcz1mdW5jdGlvbih0LGUsbixvKXtpZihoKG8pfHwobz1uZXcgZWUpLCFoKHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIG8uY2VudGVyPWEuY2xvbmUoYS5aRVJPLG8uY2VudGVyKSxvLnJhZGl1cz0wLG87ZT1lPz9hLlpFUk8sbj1uPz8zLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJzdHJpZGUiLG4sMyk7bGV0IHI9eGg7ci54PXRbMF0rZS54LHIueT10WzFdK2UueSxyLno9dFsyXStlLno7bGV0IGk9YS5jbG9uZShyLHdoKSxzPWEuY2xvbmUocixPaCksZj1hLmNsb25lKHIsRWgpLHU9YS5jbG9uZShyLFJoKSxjPWEuY2xvbmUocixTaCksbD1hLmNsb25lKHIsQ2gpLHA9dC5sZW5ndGgsZDtmb3IoZD0wO2Q8cDtkKz1uKXtsZXQgdj10W2RdK2UueCxCPXRbZCsxXStlLnksQT10W2QrMl0rZS56O3IueD12LHIueT1CLHIuej1BLHY8aS54JiZhLmNsb25lKHIsaSksdj51LngmJmEuY2xvbmUocix1KSxCPHMueSYmYS5jbG9uZShyLHMpLEI+Yy55JiZhLmNsb25lKHIsYyksQTxmLnomJmEuY2xvbmUocixmKSxBPmwueiYmYS5jbG9uZShyLGwpfWxldCBtPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KHUsaSxpbykpLF89YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QoYyxzLGlvKSksZz1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChsLGYsaW8pKSxiPWksVD11LE89bTtfPk8mJihPPV8sYj1zLFQ9YyksZz5PJiYoTz1nLGI9ZixUPWwpO2xldCBFPVBoO0UueD0oYi54K1QueCkqLjUsRS55PShiLnkrVC55KSouNSxFLno9KGIueitULnopKi41O2xldCB3PWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KFQsRSxpbykpLEM9TWF0aC5zcXJ0KHcpLE09TWg7TS54PWkueCxNLnk9cy55LE0uej1mLno7bGV0IE49Tmg7Ti54PXUueCxOLnk9Yy55LE4uej1sLno7bGV0IEY9YS5taWRwb2ludChNLE4sSWgpLEk9MDtmb3IoZD0wO2Q8cDtkKz1uKXtyLng9dFtkXStlLngsci55PXRbZCsxXStlLnksci56PXRbZCsyXStlLno7bGV0IHY9YS5tYWduaXR1ZGUoYS5zdWJ0cmFjdChyLEYsaW8pKTt2PkkmJihJPXYpO2xldCBCPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KHIsRSxpbykpO2lmKEI+dyl7bGV0IEE9TWF0aC5zcXJ0KEIpO0M9KEMrQSkqLjUsdz1DKkM7bGV0IFM9QS1DO0UueD0oQypFLngrUypyLngpL0EsRS55PShDKkUueStTKnIueSkvQSxFLno9KEMqRS56K1Mqci56KS9BfX1yZXR1cm4gQzxJPyhhLmNsb25lKEUsby5jZW50ZXIpLG8ucmFkaXVzPUMpOihhLmNsb25lKEYsby5jZW50ZXIpLG8ucmFkaXVzPUkpLG99O2VlLmZyb21FbmNvZGVkQ2FydGVzaWFuVmVydGljZXM9ZnVuY3Rpb24odCxlLG4pe2lmKGgobil8fChuPW5ldyBlZSksIWgodCl8fCFoKGUpfHx0Lmxlbmd0aCE9PWUubGVuZ3RofHx0Lmxlbmd0aD09PTApcmV0dXJuIG4uY2VudGVyPWEuY2xvbmUoYS5aRVJPLG4uY2VudGVyKSxuLnJhZGl1cz0wLG47bGV0IG89eGg7by54PXRbMF0rZVswXSxvLnk9dFsxXStlWzFdLG8uej10WzJdK2VbMl07bGV0IHI9YS5jbG9uZShvLHdoKSxpPWEuY2xvbmUobyxPaCkscz1hLmNsb25lKG8sRWgpLGY9YS5jbG9uZShvLFJoKSx1PWEuY2xvbmUobyxTaCksYz1hLmNsb25lKG8sQ2gpLGw9dC5sZW5ndGgscDtmb3IocD0wO3A8bDtwKz0zKXtsZXQgST10W3BdK2VbcF0sdj10W3ArMV0rZVtwKzFdLEI9dFtwKzJdK2VbcCsyXTtvLng9SSxvLnk9dixvLno9QixJPHIueCYmYS5jbG9uZShvLHIpLEk+Zi54JiZhLmNsb25lKG8sZiksdjxpLnkmJmEuY2xvbmUobyxpKSx2PnUueSYmYS5jbG9uZShvLHUpLEI8cy56JiZhLmNsb25lKG8scyksQj5jLnomJmEuY2xvbmUobyxjKX1sZXQgZD1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChmLHIsaW8pKSxtPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KHUsaSxpbykpLF89YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QoYyxzLGlvKSksZz1yLGI9ZixUPWQ7bT5UJiYoVD1tLGc9aSxiPXUpLF8+VCYmKFQ9XyxnPXMsYj1jKTtsZXQgTz1QaDtPLng9KGcueCtiLngpKi41LE8ueT0oZy55K2IueSkqLjUsTy56PShnLnorYi56KSouNTtsZXQgRT1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChiLE8saW8pKSx3PU1hdGguc3FydChFKSxDPU1oO0MueD1yLngsQy55PWkueSxDLno9cy56O2xldCBNPU5oO00ueD1mLngsTS55PXUueSxNLno9Yy56O2xldCBOPWEubWlkcG9pbnQoQyxNLEloKSxGPTA7Zm9yKHA9MDtwPGw7cCs9Myl7by54PXRbcF0rZVtwXSxvLnk9dFtwKzFdK2VbcCsxXSxvLno9dFtwKzJdK2VbcCsyXTtsZXQgST1hLm1hZ25pdHVkZShhLnN1YnRyYWN0KG8sTixpbykpO0k+RiYmKEY9SSk7bGV0IHY9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QobyxPLGlvKSk7aWYodj5FKXtsZXQgQj1NYXRoLnNxcnQodik7dz0odytCKSouNSxFPXcqdztsZXQgQT1CLXc7Ty54PSh3Kk8ueCtBKm8ueCkvQixPLnk9KHcqTy55K0Eqby55KS9CLE8uej0odypPLnorQSpvLnopL0J9fXJldHVybiB3PEY/KGEuY2xvbmUoTyxuLmNlbnRlciksbi5yYWRpdXM9dyk6KGEuY2xvbmUoTixuLmNlbnRlciksbi5yYWRpdXM9Riksbn07ZWUuZnJvbUNvcm5lclBvaW50cz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJjb3JuZXIiLHQpLHkudHlwZU9mLm9iamVjdCgib3Bwb3NpdGVDb3JuZXIiLGUpLGgobil8fChuPW5ldyBlZSk7bGV0IG89YS5taWRwb2ludCh0LGUsbi5jZW50ZXIpO3JldHVybiBuLnJhZGl1cz1hLmRpc3RhbmNlKG8sZSksbn07ZWUuZnJvbUVsbGlwc29pZD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImVsbGlwc29pZCIsdCksaChlKXx8KGU9bmV3IGVlKSxhLmNsb25lKGEuWkVSTyxlLmNlbnRlciksZS5yYWRpdXM9dC5tYXhpbXVtUmFkaXVzLGV9O0QzPW5ldyBhO2VlLmZyb21Cb3VuZGluZ1NwaGVyZXM9ZnVuY3Rpb24odCxlKXtpZihoKGUpfHwoZT1uZXcgZWUpLCFoKHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIGUuY2VudGVyPWEuY2xvbmUoYS5aRVJPLGUuY2VudGVyKSxlLnJhZGl1cz0wLGU7bGV0IG49dC5sZW5ndGg7aWYobj09PTEpcmV0dXJuIGVlLmNsb25lKHRbMF0sZSk7aWYobj09PTIpcmV0dXJuIGVlLnVuaW9uKHRbMF0sdFsxXSxlKTtsZXQgbz1bXSxyO2ZvcihyPTA7cjxuO3IrKylvLnB1c2godFtyXS5jZW50ZXIpO2U9ZWUuZnJvbVBvaW50cyhvLGUpO2xldCBpPWUuY2VudGVyLHM9ZS5yYWRpdXM7Zm9yKHI9MDtyPG47cisrKXtsZXQgZj10W3JdO3M9TWF0aC5tYXgocyxhLmRpc3RhbmNlKGksZi5jZW50ZXIsRDMpK2YucmFkaXVzKX1yZXR1cm4gZS5yYWRpdXM9cyxlfTtCMz1uZXcgYSxVMz1uZXcgYSxrMz1uZXcgYTtlZS5mcm9tT3JpZW50ZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgib3JpZW50ZWRCb3VuZGluZ0JveCIsdCksaChlKXx8KGU9bmV3IGVlKTtsZXQgbj10LmhhbGZBeGVzLG89Wi5nZXRDb2x1bW4obiwwLEIzKSxyPVouZ2V0Q29sdW1uKG4sMSxVMyksaT1aLmdldENvbHVtbihuLDIsazMpO3JldHVybiBhLmFkZChvLHIsbyksYS5hZGQobyxpLG8pLGUuY2VudGVyPWEuY2xvbmUodC5jZW50ZXIsZS5jZW50ZXIpLGUucmFkaXVzPWEubWFnbml0dWRlKG8pLGV9O0czPW5ldyBhLFYzPW5ldyBhO2VlLmZyb21UcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgidHJhbnNmb3JtYXRpb24iLHQpLGgoZSl8fChlPW5ldyBlZSk7bGV0IG49aXQuZ2V0VHJhbnNsYXRpb24odCxHMyksbz1pdC5nZXRTY2FsZSh0LFYzKSxyPS41KmEubWFnbml0dWRlKG8pO3JldHVybiBlLmNlbnRlcj1hLmNsb25lKG4sZS5jZW50ZXIpLGUucmFkaXVzPXIsZX07ZWUuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLmNlbnRlcj1hLmNsb25lKHQuY2VudGVyLGUuY2VudGVyKSxlLnJhZGl1cz10LnJhZGl1cyxlKTpuZXcgZWUodC5jZW50ZXIsdC5yYWRpdXMpfTtlZS5wYWNrZWRMZW5ndGg9NDtlZS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzA7bGV0IG89dC5jZW50ZXI7cmV0dXJuIGVbbisrXT1vLngsZVtuKytdPW8ueSxlW24rK109by56LGVbbl09dC5yYWRpdXMsZX07ZWUudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IGVlKTtsZXQgbz1uLmNlbnRlcjtyZXR1cm4gby54PXRbZSsrXSxvLnk9dFtlKytdLG8uej10W2UrK10sbi5yYWRpdXM9dFtlXSxufTt6Mz1uZXcgYSxqMz1uZXcgYTtlZS51bmlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSxoKG4pfHwobj1uZXcgZWUpO2xldCBvPXQuY2VudGVyLHI9dC5yYWRpdXMsaT1lLmNlbnRlcixzPWUucmFkaXVzLGY9YS5zdWJ0cmFjdChpLG8sejMpLHU9YS5tYWduaXR1ZGUoZik7aWYocj49dStzKXJldHVybiB0LmNsb25lKG4pLG47aWYocz49dStyKXJldHVybiBlLmNsb25lKG4pLG47bGV0IGM9KHIrdStzKSouNSxsPWEubXVsdGlwbHlCeVNjYWxhcihmLCgtcitjKS91LGozKTtyZXR1cm4gYS5hZGQobCxvLGwpLGEuY2xvbmUobCxuLmNlbnRlciksbi5yYWRpdXM9YyxufTtIMz1uZXcgYTtlZS5leHBhbmQ9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgic3BoZXJlIix0KSx5LnR5cGVPZi5vYmplY3QoInBvaW50IixlKSxuPWVlLmNsb25lKHQsbik7bGV0IG89YS5tYWduaXR1ZGUoYS5zdWJ0cmFjdChlLG4uY2VudGVyLEgzKSk7cmV0dXJuIG8+bi5yYWRpdXMmJihuLnJhZGl1cz1vKSxufTtlZS5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgic3BoZXJlIix0KSx5LnR5cGVPZi5vYmplY3QoInBsYW5lIixlKTtsZXQgbj10LmNlbnRlcixvPXQucmFkaXVzLHI9ZS5ub3JtYWwsaT1hLmRvdChyLG4pK2UuZGlzdGFuY2U7cmV0dXJuIGk8LW8/U24uT1VUU0lERTppPG8/U24uSU5URVJTRUNUSU5HOlNuLklOU0lERX07ZWUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLHkudHlwZU9mLm9iamVjdCgidHJhbnNmb3JtIixlKSxoKG4pfHwobj1uZXcgZWUpLG4uY2VudGVyPWl0Lm11bHRpcGx5QnlQb2ludChlLHQuY2VudGVyLG4uY2VudGVyKSxuLnJhZGl1cz1pdC5nZXRNYXhpbXVtU2NhbGUoZSkqdC5yYWRpdXMsbn07cTM9bmV3IGE7ZWUuZGlzdGFuY2VTcXVhcmVkVG89ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInNwaGVyZSIsdCkseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLGUpO2xldCBuPWEuc3VidHJhY3QodC5jZW50ZXIsZSxxMyksbz1hLm1hZ25pdHVkZShuKS10LnJhZGl1cztyZXR1cm4gbzw9MD8wOm8qb307ZWUudHJhbnNmb3JtV2l0aG91dFNjYWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLHkudHlwZU9mLm9iamVjdCgidHJhbnNmb3JtIixlKSxoKG4pfHwobj1uZXcgZWUpLG4uY2VudGVyPWl0Lm11bHRpcGx5QnlQb2ludChlLHQuY2VudGVyLG4uY2VudGVyKSxuLnJhZGl1cz10LnJhZGl1cyxufTtLMz1uZXcgYTtlZS5jb21wdXRlUGxhbmVEaXN0YW5jZXM9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLHkudHlwZU9mLm9iamVjdCgicG9zaXRpb24iLGUpLHkudHlwZU9mLm9iamVjdCgiZGlyZWN0aW9uIixuKSxoKG8pfHwobz1uZXcgUXIpO2xldCByPWEuc3VidHJhY3QodC5jZW50ZXIsZSxLMyksaT1hLmRvdChuLHIpO3JldHVybiBvLnN0YXJ0PWktdC5yYWRpdXMsby5zdG9wPWkrdC5yYWRpdXMsb307YWI9bmV3IGEsVzM9bmV3IGEsWDM9bmV3IGEsWTM9bmV3IGEsJDM9bmV3IGEsWjM9bmV3IHN0LHViPW5ldyBBcnJheSg4KTtmb3IobGV0IHQ9MDt0PDg7Kyt0KXViW3RdPW5ldyBhO2ZiPW5ldyBKbjtlZS5wcm9qZWN0VG8yRD1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLGZiLl9lbGxpcHNvaWQ9WS5kZWZhdWx0LGU9ZT8/ZmI7bGV0IG89ZS5lbGxpcHNvaWQscj10LmNlbnRlcixpPXQucmFkaXVzLHM7YS5lcXVhbHMocixhLlpFUk8pP3M9YS5jbG9uZShhLlVOSVRfWCxhYik6cz1vLmdlb2RldGljU3VyZmFjZU5vcm1hbChyLGFiKTtsZXQgZj1hLmNyb3NzKGEuVU5JVF9aLHMsVzMpO2Eubm9ybWFsaXplKGYsZik7bGV0IHU9YS5jcm9zcyhzLGYsWDMpO2Eubm9ybWFsaXplKHUsdSksYS5tdWx0aXBseUJ5U2NhbGFyKHMsaSxzKSxhLm11bHRpcGx5QnlTY2FsYXIodSxpLHUpLGEubXVsdGlwbHlCeVNjYWxhcihmLGksZik7bGV0IGM9YS5uZWdhdGUodSwkMyksbD1hLm5lZ2F0ZShmLFkzKSxwPXViLGQ9cFswXTthLmFkZChzLHUsZCksYS5hZGQoZCxmLGQpLGQ9cFsxXSxhLmFkZChzLHUsZCksYS5hZGQoZCxsLGQpLGQ9cFsyXSxhLmFkZChzLGMsZCksYS5hZGQoZCxsLGQpLGQ9cFszXSxhLmFkZChzLGMsZCksYS5hZGQoZCxmLGQpLGEubmVnYXRlKHMscyksZD1wWzRdLGEuYWRkKHMsdSxkKSxhLmFkZChkLGYsZCksZD1wWzVdLGEuYWRkKHMsdSxkKSxhLmFkZChkLGwsZCksZD1wWzZdLGEuYWRkKHMsYyxkKSxhLmFkZChkLGwsZCksZD1wWzddLGEuYWRkKHMsYyxkKSxhLmFkZChkLGYsZCk7bGV0IG09cC5sZW5ndGg7Zm9yKGxldCBUPTA7VDxtOysrVCl7bGV0IE89cFtUXTthLmFkZChyLE8sTyk7bGV0IEU9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhPLFozKTtlLnByb2plY3QoRSxPKX1uPWVlLmZyb21Qb2ludHMocCxuKSxyPW4uY2VudGVyO2xldCBfPXIueCxnPXIueSxiPXIuejtyZXR1cm4gci54PWIsci55PV8sci56PWcsbn07ZWUuaXNPY2NsdWRlZD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInNwaGVyZSIsdCkseS50eXBlT2Yub2JqZWN0KCJvY2NsdWRlciIsZSksIWUuaXNCb3VuZGluZ1NwaGVyZVZpc2libGUodCl9O2VlLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmYS5lcXVhbHModC5jZW50ZXIsZS5jZW50ZXIpJiZ0LnJhZGl1cz09PWUucmFkaXVzfTtlZS5wcm90b3R5cGUuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGVlLmludGVyc2VjdFBsYW5lKHRoaXMsdCl9O2VlLnByb3RvdHlwZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbih0KXtyZXR1cm4gZWUuZGlzdGFuY2VTcXVhcmVkVG8odGhpcyx0KX07ZWUucHJvdG90eXBlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGVlLmNvbXB1dGVQbGFuZURpc3RhbmNlcyh0aGlzLHQsZSxuKX07ZWUucHJvdG90eXBlLmlzT2NjbHVkZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGVlLmlzT2NjbHVkZWQodGhpcyx0KX07ZWUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gZWUuZXF1YWxzKHRoaXMsdCl9O2VlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gZWUuY2xvbmUodGhpcyx0KX07ZWUucHJvdG90eXBlLnZvbHVtZT1mdW5jdGlvbigpe2xldCB0PXRoaXMucmFkaXVzO3JldHVybiBJMyp0KnQqdH07Z3Q9ZWV9KTt2YXIgUTMsSHQsJHM9JCgoKT0+e1EzPXtERVBUSF9CVUZGRVJfQklUOjI1NixTVEVOQ0lMX0JVRkZFUl9CSVQ6MTAyNCxDT0xPUl9CVUZGRVJfQklUOjE2Mzg0LFBPSU5UUzowLExJTkVTOjEsTElORV9MT09QOjIsTElORV9TVFJJUDozLFRSSUFOR0xFUzo0LFRSSUFOR0xFX1NUUklQOjUsVFJJQU5HTEVfRkFOOjYsWkVSTzowLE9ORToxLFNSQ19DT0xPUjo3NjgsT05FX01JTlVTX1NSQ19DT0xPUjo3NjksU1JDX0FMUEhBOjc3MCxPTkVfTUlOVVNfU1JDX0FMUEhBOjc3MSxEU1RfQUxQSEE6NzcyLE9ORV9NSU5VU19EU1RfQUxQSEE6NzczLERTVF9DT0xPUjo3NzQsT05FX01JTlVTX0RTVF9DT0xPUjo3NzUsU1JDX0FMUEhBX1NBVFVSQVRFOjc3NixGVU5DX0FERDozMjc3NCxCTEVORF9FUVVBVElPTjozMjc3NyxCTEVORF9FUVVBVElPTl9SR0I6MzI3NzcsQkxFTkRfRVFVQVRJT05fQUxQSEE6MzQ4NzcsRlVOQ19TVUJUUkFDVDozMjc3OCxGVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6MzI3NzksQkxFTkRfRFNUX1JHQjozMjk2OCxCTEVORF9TUkNfUkdCOjMyOTY5LEJMRU5EX0RTVF9BTFBIQTozMjk3MCxCTEVORF9TUkNfQUxQSEE6MzI5NzEsQ09OU1RBTlRfQ09MT1I6MzI3NjksT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOjMyNzcwLENPTlNUQU5UX0FMUEhBOjMyNzcxLE9ORV9NSU5VU19DT05TVEFOVF9BTFBIQTozMjc3MixCTEVORF9DT0xPUjozMjc3MyxBUlJBWV9CVUZGRVI6MzQ5NjIsRUxFTUVOVF9BUlJBWV9CVUZGRVI6MzQ5NjMsQVJSQVlfQlVGRkVSX0JJTkRJTkc6MzQ5NjQsRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzozNDk2NSxTVFJFQU1fRFJBVzozNTA0MCxTVEFUSUNfRFJBVzozNTA0NCxEWU5BTUlDX0RSQVc6MzUwNDgsQlVGRkVSX1NJWkU6MzQ2NjAsQlVGRkVSX1VTQUdFOjM0NjYxLENVUlJFTlRfVkVSVEVYX0FUVFJJQjozNDM0MixGUk9OVDoxMDI4LEJBQ0s6MTAyOSxGUk9OVF9BTkRfQkFDSzoxMDMyLENVTExfRkFDRToyODg0LEJMRU5EOjMwNDIsRElUSEVSOjMwMjQsU1RFTkNJTF9URVNUOjI5NjAsREVQVEhfVEVTVDoyOTI5LFNDSVNTT1JfVEVTVDozMDg5LFBPTFlHT05fT0ZGU0VUX0ZJTEw6MzI4MjMsU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOjMyOTI2LFNBTVBMRV9DT1ZFUkFHRTozMjkyOCxOT19FUlJPUjowLElOVkFMSURfRU5VTToxMjgwLElOVkFMSURfVkFMVUU6MTI4MSxJTlZBTElEX09QRVJBVElPTjoxMjgyLE9VVF9PRl9NRU1PUlk6MTI4NSxDVzoyMzA0LENDVzoyMzA1LExJTkVfV0lEVEg6Mjg0OSxBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6MzM5MDEsQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOjMzOTAyLENVTExfRkFDRV9NT0RFOjI4ODUsRlJPTlRfRkFDRToyODg2LERFUFRIX1JBTkdFOjI5MjgsREVQVEhfV1JJVEVNQVNLOjI5MzAsREVQVEhfQ0xFQVJfVkFMVUU6MjkzMSxERVBUSF9GVU5DOjI5MzIsU1RFTkNJTF9DTEVBUl9WQUxVRToyOTYxLFNURU5DSUxfRlVOQzoyOTYyLFNURU5DSUxfRkFJTDoyOTY0LFNURU5DSUxfUEFTU19ERVBUSF9GQUlMOjI5NjUsU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6Mjk2NixTVEVOQ0lMX1JFRjoyOTY3LFNURU5DSUxfVkFMVUVfTUFTSzoyOTYzLFNURU5DSUxfV1JJVEVNQVNLOjI5NjgsU1RFTkNJTF9CQUNLX0ZVTkM6MzQ4MTYsU1RFTkNJTF9CQUNLX0ZBSUw6MzQ4MTcsU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDozNDgxOCxTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOjM0ODE5LFNURU5DSUxfQkFDS19SRUY6MzYwMDMsU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6MzYwMDQsU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzozNjAwNSxWSUVXUE9SVDoyOTc4LFNDSVNTT1JfQk9YOjMwODgsQ09MT1JfQ0xFQVJfVkFMVUU6MzEwNixDT0xPUl9XUklURU1BU0s6MzEwNyxVTlBBQ0tfQUxJR05NRU5UOjMzMTcsUEFDS19BTElHTk1FTlQ6MzMzMyxNQVhfVEVYVFVSRV9TSVpFOjMzNzksTUFYX1ZJRVdQT1JUX0RJTVM6MzM4NixTVUJQSVhFTF9CSVRTOjM0MDgsUkVEX0JJVFM6MzQxMCxHUkVFTl9CSVRTOjM0MTEsQkxVRV9CSVRTOjM0MTIsQUxQSEFfQklUUzozNDEzLERFUFRIX0JJVFM6MzQxNCxTVEVOQ0lMX0JJVFM6MzQxNSxQT0xZR09OX09GRlNFVF9VTklUUzoxMDc1MixQT0xZR09OX09GRlNFVF9GQUNUT1I6MzI4MjQsVEVYVFVSRV9CSU5ESU5HXzJEOjMyODczLFNBTVBMRV9CVUZGRVJTOjMyOTM2LFNBTVBMRVM6MzI5MzcsU0FNUExFX0NPVkVSQUdFX1ZBTFVFOjMyOTM4LFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6MzI5MzksQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6MzQ0NjcsRE9OVF9DQVJFOjQzNTIsRkFTVEVTVDo0MzUzLE5JQ0VTVDo0MzU0LEdFTkVSQVRFX01JUE1BUF9ISU5UOjMzMTcwLEJZVEU6NTEyMCxVTlNJR05FRF9CWVRFOjUxMjEsU0hPUlQ6NTEyMixVTlNJR05FRF9TSE9SVDo1MTIzLElOVDo1MTI0LFVOU0lHTkVEX0lOVDo1MTI1LEZMT0FUOjUxMjYsREVQVEhfQ09NUE9ORU5UOjY0MDIsQUxQSEE6NjQwNixSR0I6NjQwNyxSR0JBOjY0MDgsTFVNSU5BTkNFOjY0MDksTFVNSU5BTkNFX0FMUEhBOjY0MTAsVU5TSUdORURfU0hPUlRfNF80XzRfNDozMjgxOSxVTlNJR05FRF9TSE9SVF81XzVfNV8xOjMyODIwLFVOU0lHTkVEX1NIT1JUXzVfNl81OjMzNjM1LEZSQUdNRU5UX1NIQURFUjozNTYzMixWRVJURVhfU0hBREVSOjM1NjMzLE1BWF9WRVJURVhfQVRUUklCUzozNDkyMSxNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzozNjM0NyxNQVhfVkFSWUlOR19WRUNUT1JTOjM2MzQ4LE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOjM1NjYxLE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzozNTY2MCxNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzozNDkzMCxNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOjM2MzQ5LFNIQURFUl9UWVBFOjM1NjYzLERFTEVURV9TVEFUVVM6MzU3MTIsTElOS19TVEFUVVM6MzU3MTQsVkFMSURBVEVfU1RBVFVTOjM1NzE1LEFUVEFDSEVEX1NIQURFUlM6MzU3MTcsQUNUSVZFX1VOSUZPUk1TOjM1NzE4LEFDVElWRV9BVFRSSUJVVEVTOjM1NzIxLFNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjozNTcyNCxDVVJSRU5UX1BST0dSQU06MzU3MjUsTkVWRVI6NTEyLExFU1M6NTEzLEVRVUFMOjUxNCxMRVFVQUw6NTE1LEdSRUFURVI6NTE2LE5PVEVRVUFMOjUxNyxHRVFVQUw6NTE4LEFMV0FZUzo1MTksS0VFUDo3NjgwLFJFUExBQ0U6NzY4MSxJTkNSOjc2ODIsREVDUjo3NjgzLElOVkVSVDo1Mzg2LElOQ1JfV1JBUDozNDA1NSxERUNSX1dSQVA6MzQwNTYsVkVORE9SOjc5MzYsUkVOREVSRVI6NzkzNyxWRVJTSU9OOjc5MzgsTkVBUkVTVDo5NzI4LExJTkVBUjo5NzI5LE5FQVJFU1RfTUlQTUFQX05FQVJFU1Q6OTk4NCxMSU5FQVJfTUlQTUFQX05FQVJFU1Q6OTk4NSxORUFSRVNUX01JUE1BUF9MSU5FQVI6OTk4NixMSU5FQVJfTUlQTUFQX0xJTkVBUjo5OTg3LFRFWFRVUkVfTUFHX0ZJTFRFUjoxMDI0MCxURVhUVVJFX01JTl9GSUxURVI6MTAyNDEsVEVYVFVSRV9XUkFQX1M6MTAyNDIsVEVYVFVSRV9XUkFQX1Q6MTAyNDMsVEVYVFVSRV8yRDozNTUzLFRFWFRVUkU6NTg5MCxURVhUVVJFX0NVQkVfTUFQOjM0MDY3LFRFWFRVUkVfQklORElOR19DVUJFX01BUDozNDA2OCxURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6MzQwNjksVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOjM0MDcwLFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWTozNDA3MSxURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6MzQwNzIsVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOjM0MDczLFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjozNDA3NCxNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOjM0MDc2LFRFWFRVUkUwOjMzOTg0LFRFWFRVUkUxOjMzOTg1LFRFWFRVUkUyOjMzOTg2LFRFWFRVUkUzOjMzOTg3LFRFWFRVUkU0OjMzOTg4LFRFWFRVUkU1OjMzOTg5LFRFWFRVUkU2OjMzOTkwLFRFWFRVUkU3OjMzOTkxLFRFWFRVUkU4OjMzOTkyLFRFWFRVUkU5OjMzOTkzLFRFWFRVUkUxMDozMzk5NCxURVhUVVJFMTE6MzM5OTUsVEVYVFVSRTEyOjMzOTk2LFRFWFRVUkUxMzozMzk5NyxURVhUVVJFMTQ6MzM5OTgsVEVYVFVSRTE1OjMzOTk5LFRFWFRVUkUxNjozNGUzLFRFWFRVUkUxNzozNDAwMSxURVhUVVJFMTg6MzQwMDIsVEVYVFVSRTE5OjM0MDAzLFRFWFRVUkUyMDozNDAwNCxURVhUVVJFMjE6MzQwMDUsVEVYVFVSRTIyOjM0MDA2LFRFWFRVUkUyMzozNDAwNyxURVhUVVJFMjQ6MzQwMDgsVEVYVFVSRTI1OjM0MDA5LFRFWFRVUkUyNjozNDAxMCxURVhUVVJFMjc6MzQwMTEsVEVYVFVSRTI4OjM0MDEyLFRFWFRVUkUyOTozNDAxMyxURVhUVVJFMzA6MzQwMTQsVEVYVFVSRTMxOjM0MDE1LEFDVElWRV9URVhUVVJFOjM0MDE2LFJFUEVBVDoxMDQ5NyxDTEFNUF9UT19FREdFOjMzMDcxLE1JUlJPUkVEX1JFUEVBVDozMzY0OCxGTE9BVF9WRUMyOjM1NjY0LEZMT0FUX1ZFQzM6MzU2NjUsRkxPQVRfVkVDNDozNTY2NixJTlRfVkVDMjozNTY2NyxJTlRfVkVDMzozNTY2OCxJTlRfVkVDNDozNTY2OSxCT09MOjM1NjcwLEJPT0xfVkVDMjozNTY3MSxCT09MX1ZFQzM6MzU2NzIsQk9PTF9WRUM0OjM1NjczLEZMT0FUX01BVDI6MzU2NzQsRkxPQVRfTUFUMzozNTY3NSxGTE9BVF9NQVQ0OjM1Njc2LFNBTVBMRVJfMkQ6MzU2NzgsU0FNUExFUl9DVUJFOjM1NjgwLFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDozNDMzOCxWRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6MzQzMzksVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6MzQzNDAsVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOjM0MzQxLFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDozNDkyMixWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVI6MzQzNzMsVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzozNDk3NSxJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6MzU3MzgsSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6MzU3MzksQ09NUElMRV9TVEFUVVM6MzU3MTMsTE9XX0ZMT0FUOjM2MzM2LE1FRElVTV9GTE9BVDozNjMzNyxISUdIX0ZMT0FUOjM2MzM4LExPV19JTlQ6MzYzMzksTUVESVVNX0lOVDozNjM0MCxISUdIX0lOVDozNjM0MSxGUkFNRUJVRkZFUjozNjE2MCxSRU5ERVJCVUZGRVI6MzYxNjEsUkdCQTQ6MzI4NTQsUkdCNV9BMTozMjg1NSxSR0I1NjU6MzYxOTQsREVQVEhfQ09NUE9ORU5UMTY6MzMxODksU1RFTkNJTF9JTkRFWDo2NDAxLFNURU5DSUxfSU5ERVg4OjM2MTY4LERFUFRIX1NURU5DSUw6MzQwNDEsUkVOREVSQlVGRkVSX1dJRFRIOjM2MTYyLFJFTkRFUkJVRkZFUl9IRUlHSFQ6MzYxNjMsUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDozNjE2NCxSRU5ERVJCVUZGRVJfUkVEX1NJWkU6MzYxNzYsUkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6MzYxNzcsUkVOREVSQlVGRkVSX0JMVUVfU0laRTozNjE3OCxSRU5ERVJCVUZGRVJfQUxQSEFfU0laRTozNjE3OSxSRU5ERVJCVUZGRVJfREVQVEhfU0laRTozNjE4MCxSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOjM2MTgxLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6MzYwNDgsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRTozNjA0OSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6MzYwNTAsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6MzYwNTEsQ09MT1JfQVRUQUNITUVOVDA6MzYwNjQsREVQVEhfQVRUQUNITUVOVDozNjA5NixTVEVOQ0lMX0FUVEFDSE1FTlQ6MzYxMjgsREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOjMzMzA2LE5PTkU6MCxGUkFNRUJVRkZFUl9DT01QTEVURTozNjA1MyxGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ6MzYwNTQsRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ6MzYwNTUsRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOjM2MDU3LEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOjM2MDYxLEZSQU1FQlVGRkVSX0JJTkRJTkc6MzYwMDYsUkVOREVSQlVGRkVSX0JJTkRJTkc6MzYwMDcsTUFYX1JFTkRFUkJVRkZFUl9TSVpFOjM0MDI0LElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOjEyODYsVU5QQUNLX0ZMSVBfWV9XRUJHTDozNzQ0MCxVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Mzc0NDEsQ09OVEVYVF9MT1NUX1dFQkdMOjM3NDQyLFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6Mzc0NDMsQlJPV1NFUl9ERUZBVUxUX1dFQkdMOjM3NDQ0LENPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6MzM3NzYsQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6MzM3NzcsQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6MzM3NzgsQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6MzM3NzksQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzozNTg0MCxDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOjM1ODQxLENPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOjM1ODQyLENPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOjM1ODQzLENPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9XRUJHTDozNzgwOCxDT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOjM2MTk2LENPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNOjM2NDkyLEhBTEZfRkxPQVRfT0VTOjM2MTkzLERPVUJMRTo1MTMwLFJFQURfQlVGRkVSOjMwNzQsVU5QQUNLX1JPV19MRU5HVEg6MzMxNCxVTlBBQ0tfU0tJUF9ST1dTOjMzMTUsVU5QQUNLX1NLSVBfUElYRUxTOjMzMTYsUEFDS19ST1dfTEVOR1RIOjMzMzAsUEFDS19TS0lQX1JPV1M6MzMzMSxQQUNLX1NLSVBfUElYRUxTOjMzMzIsQ09MT1I6NjE0NCxERVBUSDo2MTQ1LFNURU5DSUw6NjE0NixSRUQ6NjQwMyxSR0I4OjMyODQ5LFJHQkE4OjMyODU2LFJHQjEwX0EyOjMyODU3LFRFWFRVUkVfQklORElOR18zRDozMjg3NCxVTlBBQ0tfU0tJUF9JTUFHRVM6MzI4NzcsVU5QQUNLX0lNQUdFX0hFSUdIVDozMjg3OCxURVhUVVJFXzNEOjMyODc5LFRFWFRVUkVfV1JBUF9SOjMyODgyLE1BWF8zRF9URVhUVVJFX1NJWkU6MzI4ODMsVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOjMzNjQwLE1BWF9FTEVNRU5UU19WRVJUSUNFUzozM2UzLE1BWF9FTEVNRU5UU19JTkRJQ0VTOjMzMDAxLFRFWFRVUkVfTUlOX0xPRDozMzA4MixURVhUVVJFX01BWF9MT0Q6MzMwODMsVEVYVFVSRV9CQVNFX0xFVkVMOjMzMDg0LFRFWFRVUkVfTUFYX0xFVkVMOjMzMDg1LE1JTjozMjc3NSxNQVg6MzI3NzYsREVQVEhfQ09NUE9ORU5UMjQ6MzMxOTAsTUFYX1RFWFRVUkVfTE9EX0JJQVM6MzQwNDUsVEVYVFVSRV9DT01QQVJFX01PREU6MzQ4OTIsVEVYVFVSRV9DT01QQVJFX0ZVTkM6MzQ4OTMsQ1VSUkVOVF9RVUVSWTozNDkxNyxRVUVSWV9SRVNVTFQ6MzQ5MTgsUVVFUllfUkVTVUxUX0FWQUlMQUJMRTozNDkxOSxTVFJFQU1fUkVBRDozNTA0MSxTVFJFQU1fQ09QWTozNTA0MixTVEFUSUNfUkVBRDozNTA0NSxTVEFUSUNfQ09QWTozNTA0NixEWU5BTUlDX1JFQUQ6MzUwNDksRFlOQU1JQ19DT1BZOjM1MDUwLE1BWF9EUkFXX0JVRkZFUlM6MzQ4NTIsRFJBV19CVUZGRVIwOjM0ODUzLERSQVdfQlVGRkVSMTozNDg1NCxEUkFXX0JVRkZFUjI6MzQ4NTUsRFJBV19CVUZGRVIzOjM0ODU2LERSQVdfQlVGRkVSNDozNDg1NyxEUkFXX0JVRkZFUjU6MzQ4NTgsRFJBV19CVUZGRVI2OjM0ODU5LERSQVdfQlVGRkVSNzozNDg2MCxEUkFXX0JVRkZFUjg6MzQ4NjEsRFJBV19CVUZGRVI5OjM0ODYyLERSQVdfQlVGRkVSMTA6MzQ4NjMsRFJBV19CVUZGRVIxMTozNDg2NCxEUkFXX0JVRkZFUjEyOjM0ODY1LERSQVdfQlVGRkVSMTM6MzQ4NjYsRFJBV19CVUZGRVIxNDozNDg2NyxEUkFXX0JVRkZFUjE1OjM0ODY4LE1BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6MzU2NTcsTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6MzU2NTgsU0FNUExFUl8zRDozNTY3OSxTQU1QTEVSXzJEX1NIQURPVzozNTY4MixGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UOjM1NzIzLFBJWEVMX1BBQ0tfQlVGRkVSOjM1MDUxLFBJWEVMX1VOUEFDS19CVUZGRVI6MzUwNTIsUElYRUxfUEFDS19CVUZGRVJfQklORElORzozNTA1MyxQSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkc6MzUwNTUsRkxPQVRfTUFUMngzOjM1Njg1LEZMT0FUX01BVDJ4NDozNTY4NixGTE9BVF9NQVQzeDI6MzU2ODcsRkxPQVRfTUFUM3g0OjM1Njg4LEZMT0FUX01BVDR4MjozNTY4OSxGTE9BVF9NQVQ0eDM6MzU2OTAsU1JHQjozNTkwNCxTUkdCODozNTkwNSxTUkdCOF9BTFBIQTg6MzU5MDcsQ09NUEFSRV9SRUZfVE9fVEVYVFVSRTozNDg5NCxSR0JBMzJGOjM0ODM2LFJHQjMyRjozNDgzNyxSR0JBMTZGOjM0ODQyLFJHQjE2RjozNDg0MyxWRVJURVhfQVRUUklCX0FSUkFZX0lOVEVHRVI6MzUwNjksTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTOjM1MDcxLE1JTl9QUk9HUkFNX1RFWEVMX09GRlNFVDozNTA3NixNQVhfUFJPR1JBTV9URVhFTF9PRkZTRVQ6MzUwNzcsTUFYX1ZBUllJTkdfQ09NUE9ORU5UUzozNTY1OSxURVhUVVJFXzJEX0FSUkFZOjM1ODY2LFRFWFRVUkVfQklORElOR18yRF9BUlJBWTozNTg2OSxSMTFGX0cxMUZfQjEwRjozNTg5OCxVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOjM1ODk5LFJHQjlfRTU6MzU5MDEsVU5TSUdORURfSU5UXzVfOV85XzlfUkVWOjM1OTAyLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERTozNTk2NyxNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM6MzU5NjgsVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdTOjM1OTcxLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6MzU5NzIsVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOjM1OTczLFRSQU5TRk9STV9GRUVEQkFDS19QUklNSVRJVkVTX1dSSVRURU46MzU5NzYsUkFTVEVSSVpFUl9ESVNDQVJEOjM1OTc3LE1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfSU5URVJMRUFWRURfQ09NUE9ORU5UUzozNTk3OCxNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6MzU5NzksSU5URVJMRUFWRURfQVRUUklCUzozNTk4MCxTRVBBUkFURV9BVFRSSUJTOjM1OTgxLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6MzU5ODIsVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOjM1OTgzLFJHQkEzMlVJOjM2MjA4LFJHQjMyVUk6MzYyMDksUkdCQTE2VUk6MzYyMTQsUkdCMTZVSTozNjIxNSxSR0JBOFVJOjM2MjIwLFJHQjhVSTozNjIyMSxSR0JBMzJJOjM2MjI2LFJHQjMySTozNjIyNyxSR0JBMTZJOjM2MjMyLFJHQjE2STozNjIzMyxSR0JBOEk6MzYyMzgsUkdCOEk6MzYyMzksUkVEX0lOVEVHRVI6MzYyNDQsUkdCX0lOVEVHRVI6MzYyNDgsUkdCQV9JTlRFR0VSOjM2MjQ5LFNBTVBMRVJfMkRfQVJSQVk6MzYyODksU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6MzYyOTIsU0FNUExFUl9DVUJFX1NIQURPVzozNjI5MyxVTlNJR05FRF9JTlRfVkVDMjozNjI5NCxVTlNJR05FRF9JTlRfVkVDMzozNjI5NSxVTlNJR05FRF9JTlRfVkVDNDozNjI5NixJTlRfU0FNUExFUl8yRDozNjI5OCxJTlRfU0FNUExFUl8zRDozNjI5OSxJTlRfU0FNUExFUl9DVUJFOjM2MzAwLElOVF9TQU1QTEVSXzJEX0FSUkFZOjM2MzAzLFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOjM2MzA2LFVOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOjM2MzA3LFVOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU6MzYzMDgsVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6MzYzMTEsREVQVEhfQ09NUE9ORU5UMzJGOjM2MDEyLERFUFRIMzJGX1NURU5DSUw4OjM2MDEzLEZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVjozNjI2OSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HOjMzMjk2LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09NUE9ORU5UX1RZUEU6MzMyOTcsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9SRURfU0laRTozMzI5OCxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0dSRUVOX1NJWkU6MzMyOTksRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkU6MzMzMDAsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTFBIQV9TSVpFOjMzMzAxLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQVEhfU0laRTozMzMwMixGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRTozMzMwMyxGUkFNRUJVRkZFUl9ERUZBVUxUOjMzMzA0LFVOU0lHTkVEX0lOVF8yNF84OjM0MDQyLERFUFRIMjRfU1RFTkNJTDg6MzUwNTYsVU5TSUdORURfTk9STUFMSVpFRDozNTg2MyxEUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkc6MzYwMDYsUkVBRF9GUkFNRUJVRkZFUjozNjAwOCxEUkFXX0ZSQU1FQlVGRkVSOjM2MDA5LFJFQURfRlJBTUVCVUZGRVJfQklORElORzozNjAxMCxSRU5ERVJCVUZGRVJfU0FNUExFUzozNjAxMSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEFZRVI6MzYwNTIsTUFYX0NPTE9SX0FUVEFDSE1FTlRTOjM2MDYzLENPTE9SX0FUVEFDSE1FTlQxOjM2MDY1LENPTE9SX0FUVEFDSE1FTlQyOjM2MDY2LENPTE9SX0FUVEFDSE1FTlQzOjM2MDY3LENPTE9SX0FUVEFDSE1FTlQ0OjM2MDY4LENPTE9SX0FUVEFDSE1FTlQ1OjM2MDY5LENPTE9SX0FUVEFDSE1FTlQ2OjM2MDcwLENPTE9SX0FUVEFDSE1FTlQ3OjM2MDcxLENPTE9SX0FUVEFDSE1FTlQ4OjM2MDcyLENPTE9SX0FUVEFDSE1FTlQ5OjM2MDczLENPTE9SX0FUVEFDSE1FTlQxMDozNjA3NCxDT0xPUl9BVFRBQ0hNRU5UMTE6MzYwNzUsQ09MT1JfQVRUQUNITUVOVDEyOjM2MDc2LENPTE9SX0FUVEFDSE1FTlQxMzozNjA3NyxDT0xPUl9BVFRBQ0hNRU5UMTQ6MzYwNzgsQ09MT1JfQVRUQUNITUVOVDE1OjM2MDc5LEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEU6MzYxODIsTUFYX1NBTVBMRVM6MzYxODMsSEFMRl9GTE9BVDo1MTMxLFJHOjMzMzE5LFJHX0lOVEVHRVI6MzMzMjAsUjg6MzMzMjEsUkc4OjMzMzIzLFIxNkY6MzMzMjUsUjMyRjozMzMyNixSRzE2RjozMzMyNyxSRzMyRjozMzMyOCxSOEk6MzMzMjksUjhVSTozMzMzMCxSMTZJOjMzMzMxLFIxNlVJOjMzMzMyLFIzMkk6MzMzMzMsUjMyVUk6MzMzMzQsUkc4STozMzMzNSxSRzhVSTozMzMzNixSRzE2STozMzMzNyxSRzE2VUk6MzMzMzgsUkczMkk6MzMzMzksUkczMlVJOjMzMzQwLFZFUlRFWF9BUlJBWV9CSU5ESU5HOjM0MjI5LFI4X1NOT1JNOjM2NzU2LFJHOF9TTk9STTozNjc1NyxSR0I4X1NOT1JNOjM2NzU4LFJHQkE4X1NOT1JNOjM2NzU5LFNJR05FRF9OT1JNQUxJWkVEOjM2NzY0LENPUFlfUkVBRF9CVUZGRVI6MzY2NjIsQ09QWV9XUklURV9CVUZGRVI6MzY2NjMsQ09QWV9SRUFEX0JVRkZFUl9CSU5ESU5HOjM2NjYyLENPUFlfV1JJVEVfQlVGRkVSX0JJTkRJTkc6MzY2NjMsVU5JRk9STV9CVUZGRVI6MzUzNDUsVU5JRk9STV9CVUZGRVJfQklORElORzozNTM2OCxVTklGT1JNX0JVRkZFUl9TVEFSVDozNTM2OSxVTklGT1JNX0JVRkZFUl9TSVpFOjM1MzcwLE1BWF9WRVJURVhfVU5JRk9STV9CTE9DS1M6MzUzNzEsTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQkxPQ0tTOjM1MzczLE1BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzozNTM3NCxNQVhfVU5JRk9STV9CVUZGRVJfQklORElOR1M6MzUzNzUsTUFYX1VOSUZPUk1fQkxPQ0tfU0laRTozNTM3NixNQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzozNTM3NyxNQVhfQ09NQklORURfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOjM1Mzc5LFVOSUZPUk1fQlVGRkVSX09GRlNFVF9BTElHTk1FTlQ6MzUzODAsQUNUSVZFX1VOSUZPUk1fQkxPQ0tTOjM1MzgyLFVOSUZPUk1fVFlQRTozNTM4MyxVTklGT1JNX1NJWkU6MzUzODQsVU5JRk9STV9CTE9DS19JTkRFWDozNTM4NixVTklGT1JNX09GRlNFVDozNTM4NyxVTklGT1JNX0FSUkFZX1NUUklERTozNTM4OCxVTklGT1JNX01BVFJJWF9TVFJJREU6MzUzODksVU5JRk9STV9JU19ST1dfTUFKT1I6MzUzOTAsVU5JRk9STV9CTE9DS19CSU5ESU5HOjM1MzkxLFVOSUZPUk1fQkxPQ0tfREFUQV9TSVpFOjM1MzkyLFVOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1TOjM1Mzk0LFVOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUzozNTM5NSxVTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUjozNTM5NixVTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSOjM1Mzk4LElOVkFMSURfSU5ERVg6NDI5NDk2NzI5NSxNQVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRTOjM3MTU0LE1BWF9GUkFHTUVOVF9JTlBVVF9DT01QT05FTlRTOjM3MTU3LE1BWF9TRVJWRVJfV0FJVF9USU1FT1VUOjM3MTM3LE9CSkVDVF9UWVBFOjM3MTM4LFNZTkNfQ09ORElUSU9OOjM3MTM5LFNZTkNfU1RBVFVTOjM3MTQwLFNZTkNfRkxBR1M6MzcxNDEsU1lOQ19GRU5DRTozNzE0MixTWU5DX0dQVV9DT01NQU5EU19DT01QTEVURTozNzE0MyxVTlNJR05BTEVEOjM3MTQ0LFNJR05BTEVEOjM3MTQ1LEFMUkVBRFlfU0lHTkFMRUQ6MzcxNDYsVElNRU9VVF9FWFBJUkVEOjM3MTQ3LENPTkRJVElPTl9TQVRJU0ZJRUQ6MzcxNDgsV0FJVF9GQUlMRUQ6MzcxNDksU1lOQ19GTFVTSF9DT01NQU5EU19CSVQ6MSxWRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1I6MzUwNzAsQU5ZX1NBTVBMRVNfUEFTU0VEOjM1ODg3LEFOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU6MzYyMDIsU0FNUExFUl9CSU5ESU5HOjM1MDk3LFJHQjEwX0EyVUk6MzY5NzUsSU5UXzJfMTBfMTBfMTBfUkVWOjM2MjU1LFRSQU5TRk9STV9GRUVEQkFDSzozNjM4NixUUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEOjM2Mzg3LFRSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6MzYzODgsVFJBTlNGT1JNX0ZFRURCQUNLX0JJTkRJTkc6MzYzODksQ09NUFJFU1NFRF9SMTFfRUFDOjM3NDg4LENPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUM6Mzc0ODksQ09NUFJFU1NFRF9SRzExX0VBQzozNzQ5MCxDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQzozNzQ5MSxDT01QUkVTU0VEX1JHQjhfRVRDMjozNzQ5MixDT01QUkVTU0VEX1NSR0I4X0VUQzI6Mzc0OTMsQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjozNzQ5NCxDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjozNzQ5NSxDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDOjM3NDk2LENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOjM3NDk3LFRFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVDozNzE2NyxNQVhfRUxFTUVOVF9JTkRFWDozNjIwMyxURVhUVVJFX0lNTVVUQUJMRV9MRVZFTFM6MzM1MDMsTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOjM0MDQ3fSxIdD1PYmplY3QuZnJlZXplKFEzKX0pO3ZhciBpZSxldCxEZT0kKCgpPT57YXQoKTtqdCgpOyRzKCk7aWU9e0JZVEU6SHQuQllURSxVTlNJR05FRF9CWVRFOkh0LlVOU0lHTkVEX0JZVEUsU0hPUlQ6SHQuU0hPUlQsVU5TSUdORURfU0hPUlQ6SHQuVU5TSUdORURfU0hPUlQsSU5UOkh0LklOVCxVTlNJR05FRF9JTlQ6SHQuVU5TSUdORURfSU5ULEZMT0FUOkh0LkZMT0FULERPVUJMRTpIdC5ET1VCTEV9O2llLmdldFNpemVJbkJ5dGVzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJ2YWx1ZSBpcyByZXF1aXJlZC4iKTtzd2l0Y2godCl7Y2FzZSBpZS5CWVRFOnJldHVybiBJbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBpZS5VTlNJR05FRF9CWVRFOnJldHVybiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2UgaWUuU0hPUlQ6cmV0dXJuIEludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBpZS5VTlNJR05FRF9TSE9SVDpyZXR1cm4gVWludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBpZS5JTlQ6cmV0dXJuIEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBpZS5VTlNJR05FRF9JTlQ6cmV0dXJuIFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2UgaWUuRkxPQVQ6cmV0dXJuIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIGllLkRPVUJMRTpyZXR1cm4gRmxvYXQ2NEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2RlZmF1bHQ6dGhyb3cgbmV3IEwoImNvbXBvbmVudERhdGF0eXBlIGlzIG5vdCBhIHZhbGlkIHZhbHVlLiIpfX07aWUuZnJvbVR5cGVkQXJyYXk9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gaWUuQllURTtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gaWUuVU5TSUdORURfQllURTtpZih0IGluc3RhbmNlb2YgSW50MTZBcnJheSlyZXR1cm4gaWUuU0hPUlQ7aWYodCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KXJldHVybiBpZS5VTlNJR05FRF9TSE9SVDtpZih0IGluc3RhbmNlb2YgSW50MzJBcnJheSlyZXR1cm4gaWUuSU5UO2lmKHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gaWUuVU5TSUdORURfSU5UO2lmKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpcmV0dXJuIGllLkZMT0FUO2lmKHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpcmV0dXJuIGllLkRPVUJMRTt0aHJvdyBuZXcgTCgiYXJyYXkgbXVzdCBiZSBhbiBJbnQ4QXJyYXksIFVpbnQ4QXJyYXksIEludDE2QXJyYXksIFVpbnQxNkFycmF5LCBJbnQzMkFycmF5LCBVaW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBvciBGbG9hdDY0QXJyYXkuIil9O2llLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpJiYodD09PWllLkJZVEV8fHQ9PT1pZS5VTlNJR05FRF9CWVRFfHx0PT09aWUuU0hPUlR8fHQ9PT1pZS5VTlNJR05FRF9TSE9SVHx8dD09PWllLklOVHx8dD09PWllLlVOU0lHTkVEX0lOVHx8dD09PWllLkZMT0FUfHx0PT09aWUuRE9VQkxFKX07aWUuY3JlYXRlVHlwZWRBcnJheT1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJjb21wb25lbnREYXRhdHlwZSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgidmFsdWVzT3JMZW5ndGggaXMgcmVxdWlyZWQuIik7c3dpdGNoKHQpe2Nhc2UgaWUuQllURTpyZXR1cm4gbmV3IEludDhBcnJheShlKTtjYXNlIGllLlVOU0lHTkVEX0JZVEU6cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpO2Nhc2UgaWUuU0hPUlQ6cmV0dXJuIG5ldyBJbnQxNkFycmF5KGUpO2Nhc2UgaWUuVU5TSUdORURfU0hPUlQ6cmV0dXJuIG5ldyBVaW50MTZBcnJheShlKTtjYXNlIGllLklOVDpyZXR1cm4gbmV3IEludDMyQXJyYXkoZSk7Y2FzZSBpZS5VTlNJR05FRF9JTlQ6cmV0dXJuIG5ldyBVaW50MzJBcnJheShlKTtjYXNlIGllLkZMT0FUOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KGUpO2Nhc2UgaWUuRE9VQkxFOnJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEwoImNvbXBvbmVudERhdGF0eXBlIGlzIG5vdCBhIHZhbGlkIHZhbHVlLiIpfX07aWUuY3JlYXRlQXJyYXlCdWZmZXJWaWV3PWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJjb21wb25lbnREYXRhdHlwZSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgiYnVmZmVyIGlzIHJlcXVpcmVkLiIpO3N3aXRjaChuPW4/PzAsbz1vPz8oZS5ieXRlTGVuZ3RoLW4pL2llLmdldFNpemVJbkJ5dGVzKHQpLHQpe2Nhc2UgaWUuQllURTpyZXR1cm4gbmV3IEludDhBcnJheShlLG4sbyk7Y2FzZSBpZS5VTlNJR05FRF9CWVRFOnJldHVybiBuZXcgVWludDhBcnJheShlLG4sbyk7Y2FzZSBpZS5TSE9SVDpyZXR1cm4gbmV3IEludDE2QXJyYXkoZSxuLG8pO2Nhc2UgaWUuVU5TSUdORURfU0hPUlQ6cmV0dXJuIG5ldyBVaW50MTZBcnJheShlLG4sbyk7Y2FzZSBpZS5JTlQ6cmV0dXJuIG5ldyBJbnQzMkFycmF5KGUsbixvKTtjYXNlIGllLlVOU0lHTkVEX0lOVDpyZXR1cm4gbmV3IFVpbnQzMkFycmF5KGUsbixvKTtjYXNlIGllLkZMT0FUOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KGUsbixvKTtjYXNlIGllLkRPVUJMRTpyZXR1cm4gbmV3IEZsb2F0NjRBcnJheShlLG4sbyk7ZGVmYXVsdDp0aHJvdyBuZXcgTCgiY29tcG9uZW50RGF0YXR5cGUgaXMgbm90IGEgdmFsaWQgdmFsdWUuIil9fTtpZS5mcm9tTmFtZT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJCWVRFIjpyZXR1cm4gaWUuQllURTtjYXNlIlVOU0lHTkVEX0JZVEUiOnJldHVybiBpZS5VTlNJR05FRF9CWVRFO2Nhc2UiU0hPUlQiOnJldHVybiBpZS5TSE9SVDtjYXNlIlVOU0lHTkVEX1NIT1JUIjpyZXR1cm4gaWUuVU5TSUdORURfU0hPUlQ7Y2FzZSJJTlQiOnJldHVybiBpZS5JTlQ7Y2FzZSJVTlNJR05FRF9JTlQiOnJldHVybiBpZS5VTlNJR05FRF9JTlQ7Y2FzZSJGTE9BVCI6cmV0dXJuIGllLkZMT0FUO2Nhc2UiRE9VQkxFIjpyZXR1cm4gaWUuRE9VQkxFO2RlZmF1bHQ6dGhyb3cgbmV3IEwoIm5hbWUgaXMgbm90IGEgdmFsaWQgdmFsdWUuIil9fTtldD1PYmplY3QuZnJlZXplKGllKX0pO3ZhciBKMyxNaSx2cD0kKCgpPT57SjM9e05PTkU6MCxUUklBTkdMRVM6MSxMSU5FUzoyLFBPTFlMSU5FUzozfSxNaT1PYmplY3QuZnJlZXplKEozKX0pO2Z1bmN0aW9uIFh0KHQsZSxuLG8pe3RoaXNbMF09dD8/MCx0aGlzWzFdPW4/PzAsdGhpc1syXT1lPz8wLHRoaXNbM109bz8/MH12YXIgdFAsZVAsbGIscGIsblAsb1AsWW8sQWY9JCgoKT0+e1VlKCk7V3QoKTthdCgpO2p0KCk7WHQucGFja2VkTGVuZ3RoPTQ7WHQucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxlW24rK109dFswXSxlW24rK109dFsxXSxlW24rK109dFsyXSxlW24rK109dFszXSxlfTtYdC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IFh0KSxuWzBdPXRbZSsrXSxuWzFdPXRbZSsrXSxuWzJdPXRbZSsrXSxuWzNdPXRbZSsrXSxufTtYdC5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImFycmF5Iix0KTtsZXQgbj10Lmxlbmd0aCxvPW4qNDtpZighaChlKSllPW5ldyBBcnJheShvKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aCE9PW8pdGhyb3cgbmV3IEwoIklmIHJlc3VsdCBpcyBhIHR5cGVkIGFycmF5LCBpdCBtdXN0IGhhdmUgZXhhY3RseSBhcnJheS5sZW5ndGggKiA0IGVsZW1lbnRzIik7ZS5sZW5ndGghPT1vJiYoZS5sZW5ndGg9byl9Zm9yKGxldCByPTA7cjxuOysrcilYdC5wYWNrKHRbcl0sZSxyKjQpO3JldHVybiBlfTtYdC51bnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe2lmKHkuZGVmaW5lZCgiYXJyYXkiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJhcnJheS5sZW5ndGgiLHQubGVuZ3RoLDQpLHQubGVuZ3RoJTQhPT0wKXRocm93IG5ldyBMKCJhcnJheSBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuIik7bGV0IG49dC5sZW5ndGg7aChlKT9lLmxlbmd0aD1uLzQ6ZT1uZXcgQXJyYXkobi80KTtmb3IobGV0IG89MDtvPG47bys9NCl7bGV0IHI9by80O2Vbcl09WHQudW5wYWNrKHQsbyxlW3JdKX1yZXR1cm4gZX07WHQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZSk6bmV3IFh0KHRbMF0sdFsyXSx0WzFdLHRbM10pfTtYdC5mcm9tQXJyYXk9WHQudW5wYWNrO1h0LmZyb21Db2x1bW5NYWpvckFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgidmFsdWVzIix0KSxYdC5jbG9uZSh0LGUpfTtYdC5mcm9tUm93TWFqb3JBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoInZhbHVlcyIsdCksaChlKT8oZVswXT10WzBdLGVbMV09dFsyXSxlWzJdPXRbMV0sZVszXT10WzNdLGUpOm5ldyBYdCh0WzBdLHRbMV0sdFsyXSx0WzNdKX07WHQuZnJvbVNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic2NhbGUiLHQpLGgoZSk/KGVbMF09dC54LGVbMV09MCxlWzJdPTAsZVszXT10LnksZSk6bmV3IFh0KHQueCwwLDAsdC55KX07WHQuZnJvbVVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoInNjYWxlIix0KSxoKGUpPyhlWzBdPXQsZVsxXT0wLGVbMl09MCxlWzNdPXQsZSk6bmV3IFh0KHQsMCwwLHQpfTtYdC5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5udW1iZXIoImFuZ2xlIix0KTtsZXQgbj1NYXRoLmNvcyh0KSxvPU1hdGguc2luKHQpO3JldHVybiBoKGUpPyhlWzBdPW4sZVsxXT1vLGVbMl09LW8sZVszXT1uLGUpOm5ldyBYdChuLC1vLG8sbil9O1h0LnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLGgoZSk/KGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlKTpbdFswXSx0WzFdLHRbMl0sdFszXV19O1h0LmdldEVsZW1lbnRJbmRleD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygicm93IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJyb3ciLGUsMSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImNvbHVtbiIsdCwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiY29sdW1uIix0LDEpLHQqMitlfTtYdC5nZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDEpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lKjIscj10W29dLGk9dFtvKzFdO3JldHVybiBuLng9cixuLnk9aSxufTtYdC5zZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMSkseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvPVh0LmNsb25lKHQsbyk7bGV0IHI9ZSoyO3JldHVybiBvW3JdPW4ueCxvW3IrMV09bi55LG99O1h0LmdldFJvdz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXRbZV0scj10W2UrMl07cmV0dXJuIG4ueD1vLG4ueT1yLG59O1h0LnNldFJvdz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMSkseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvPVh0LmNsb25lKHQsbyksb1tlXT1uLngsb1tlKzJdPW4ueSxvfTt0UD1uZXcgSjtYdC5zZXRTY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1YdC5nZXRTY2FsZSh0LHRQKSxyPWUueC9vLngsaT1lLnkvby55O3JldHVybiBuWzBdPXRbMF0qcixuWzFdPXRbMV0qcixuWzJdPXRbMl0qaSxuWzNdPXRbM10qaSxufTtlUD1uZXcgSjtYdC5zZXRVbmlmb3JtU2NhbGU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89WHQuZ2V0U2NhbGUodCxlUCkscj1lL28ueCxpPWUvby55O3JldHVybiBuWzBdPXRbMF0qcixuWzFdPXRbMV0qcixuWzJdPXRbMl0qaSxuWzNdPXRbM10qaSxufTtsYj1uZXcgSjtYdC5nZXRTY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD1KLm1hZ25pdHVkZShKLmZyb21FbGVtZW50cyh0WzBdLHRbMV0sbGIpKSxlLnk9Si5tYWduaXR1ZGUoSi5mcm9tRWxlbWVudHModFsyXSx0WzNdLGxiKSksZX07cGI9bmV3IEo7WHQuZ2V0TWF4aW11bVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBYdC5nZXRTY2FsZSh0LHBiKSxKLm1heGltdW1Db21wb25lbnQocGIpfTtuUD1uZXcgSjtYdC5zZXRSb3RhdGlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1YdC5nZXRTY2FsZSh0LG5QKTtyZXR1cm4gblswXT1lWzBdKm8ueCxuWzFdPWVbMV0qby54LG5bMl09ZVsyXSpvLnksblszXT1lWzNdKm8ueSxufTtvUD1uZXcgSjtYdC5nZXRSb3RhdGlvbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49WHQuZ2V0U2NhbGUodCxvUCk7cmV0dXJuIGVbMF09dFswXS9uLngsZVsxXT10WzFdL24ueCxlWzJdPXRbMl0vbi55LGVbM109dFszXS9uLnksZX07WHQubXVsdGlwbHk9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXRbMF0qZVswXSt0WzJdKmVbMV0scj10WzBdKmVbMl0rdFsyXSplWzNdLGk9dFsxXSplWzBdK3RbM10qZVsxXSxzPXRbMV0qZVsyXSt0WzNdKmVbM107cmV0dXJuIG5bMF09byxuWzFdPWksblsyXT1yLG5bM109cyxufTtYdC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0rZVswXSxuWzFdPXRbMV0rZVsxXSxuWzJdPXRbMl0rZVsyXSxuWzNdPXRbM10rZVszXSxufTtYdC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXS1lWzBdLG5bMV09dFsxXS1lWzFdLG5bMl09dFsyXS1lWzJdLG5bM109dFszXS1lWzNdLG59O1h0Lm11bHRpcGx5QnlWZWN0b3I9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXRbMF0qZS54K3RbMl0qZS55LHI9dFsxXSplLngrdFszXSplLnk7cmV0dXJuIG4ueD1vLG4ueT1yLG59O1h0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0qZSxuWzFdPXRbMV0qZSxuWzJdPXRbMl0qZSxuWzNdPXRbM10qZSxufTtYdC5tdWx0aXBseUJ5U2NhbGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXSplLngsblsxXT10WzFdKmUueCxuWzJdPXRbMl0qZS55LG5bM109dFszXSplLnksbn07WHQubXVsdGlwbHlCeVVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUsblsxXT10WzFdKmUsblsyXT10WzJdKmUsblszXT10WzNdKmUsbn07WHQubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT0tdFswXSxlWzFdPS10WzFdLGVbMl09LXRbMl0sZVszXT0tdFszXSxlfTtYdC50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXRbMF0sbz10WzJdLHI9dFsxXSxpPXRbM107cmV0dXJuIGVbMF09bixlWzFdPW8sZVsyXT1yLGVbM109aSxlfTtYdC5hYnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlWzBdPU1hdGguYWJzKHRbMF0pLGVbMV09TWF0aC5hYnModFsxXSksZVsyXT1NYXRoLmFicyh0WzJdKSxlWzNdPU1hdGguYWJzKHRbM10pLGV9O1h0LmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmdFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXSYmdFszXT09PWVbM119O1h0LmVxdWFsc0FycmF5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFswXT09PWVbbl0mJnRbMV09PT1lW24rMV0mJnRbMl09PT1lW24rMl0mJnRbM109PT1lW24rM119O1h0LmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPW4/PzAsdD09PWV8fGgodCkmJmgoZSkmJk1hdGguYWJzKHRbMF0tZVswXSk8PW4mJk1hdGguYWJzKHRbMV0tZVsxXSk8PW4mJk1hdGguYWJzKHRbMl0tZVsyXSk8PW4mJk1hdGguYWJzKHRbM10tZVszXSk8PW59O1h0LklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IFh0KDEsMCwwLDEpKTtYdC5aRVJPPU9iamVjdC5mcmVlemUobmV3IFh0KDAsMCwwLDApKTtYdC5DT0xVTU4wUk9XMD0wO1h0LkNPTFVNTjBST1cxPTE7WHQuQ09MVU1OMVJPVzA9MjtYdC5DT0xVTU4xUk9XMT0zO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFh0LnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHQucGFja2VkTGVuZ3RofX19KTtYdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIFh0LmNsb25lKHRoaXMsdCl9O1h0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIFh0LmVxdWFscyh0aGlzLHQpfTtYdC5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUpe3JldHVybiBYdC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlKX07WHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXNbMF19LCAke3RoaXNbMl19KQooJHt0aGlzWzFdfSwgJHt0aGlzWzNdfSlgfTtZbz1YdH0pO3ZhciBtbyxEdCx0bj0kKCgpPT57JHMoKTttbz17UE9JTlRTOkh0LlBPSU5UUyxMSU5FUzpIdC5MSU5FUyxMSU5FX0xPT1A6SHQuTElORV9MT09QLExJTkVfU1RSSVA6SHQuTElORV9TVFJJUCxUUklBTkdMRVM6SHQuVFJJQU5HTEVTLFRSSUFOR0xFX1NUUklQOkh0LlRSSUFOR0xFX1NUUklQLFRSSUFOR0xFX0ZBTjpIdC5UUklBTkdMRV9GQU59O21vLmlzTGluZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1tby5MSU5FU3x8dD09PW1vLkxJTkVfTE9PUHx8dD09PW1vLkxJTkVfU1RSSVB9O21vLmlzVHJpYW5nbGVzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09bW8uVFJJQU5HTEVTfHx0PT09bW8uVFJJQU5HTEVfU1RSSVB8fHQ9PT1tby5UUklBTkdMRV9GQU59O21vLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09bW8uUE9JTlRTfHx0PT09bW8uTElORVN8fHQ9PT1tby5MSU5FX0xPT1B8fHQ9PT1tby5MSU5FX1NUUklQfHx0PT09bW8uVFJJQU5HTEVTfHx0PT09bW8uVFJJQU5HTEVfU1RSSVB8fHQ9PT1tby5UUklBTkdMRV9GQU59O0R0PU9iamVjdC5mcmVlemUobW8pfSk7ZnVuY3Rpb24gdmgodCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1QseS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLmF0dHJpYnV0ZXMiLHQuYXR0cmlidXRlcyksdGhpcy5hdHRyaWJ1dGVzPXQuYXR0cmlidXRlcyx0aGlzLmluZGljZXM9dC5pbmRpY2VzLHRoaXMucHJpbWl0aXZlVHlwZT10LnByaW1pdGl2ZVR5cGU/P0R0LlRSSUFOR0xFUyx0aGlzLmJvdW5kaW5nU3BoZXJlPXQuYm91bmRpbmdTcGhlcmUsdGhpcy5nZW9tZXRyeVR5cGU9dC5nZW9tZXRyeVR5cGU/P01pLk5PTkUsdGhpcy5ib3VuZGluZ1NwaGVyZUNWPXQuYm91bmRpbmdTcGhlcmVDVix0aGlzLm9mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZX12YXIgclAsaVAsZGIsc1AsY1AsYVAsZlAsdVAsbFAscFAsQnQsWGU9JCgoKT0+e1VlKCk7THQoKTtJZSgpO1d0KCk7eWUoKTthdCgpO2p0KCk7dnAoKTtBZigpO0JuKCk7VW4oKTt0bigpO0tvKCk7d24oKTtjcygpO3ZoLmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzPWZ1bmN0aW9uKHQpe3kudHlwZU9mLm9iamVjdCgiZ2VvbWV0cnkiLHQpO2xldCBlPS0xO2ZvcihsZXQgbiBpbiB0LmF0dHJpYnV0ZXMpaWYodC5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KG4pJiZoKHQuYXR0cmlidXRlc1tuXSkmJmgodC5hdHRyaWJ1dGVzW25dLnZhbHVlcykpe2xldCBvPXQuYXR0cmlidXRlc1tuXSxyPW8udmFsdWVzLmxlbmd0aC9vLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU7aWYoZSE9PXImJmUhPT0tMSl0aHJvdyBuZXcgTCgiQWxsIGF0dHJpYnV0ZSBsaXN0cyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMuIik7ZT1yfXJldHVybiBlfTtyUD1uZXcgc3QsaVA9bmV3IGEsZGI9bmV3IGl0LHNQPVtuZXcgc3QsbmV3IHN0LG5ldyBzdF0sY1A9W25ldyBKLG5ldyBKLG5ldyBKXSxhUD1bbmV3IEosbmV3IEosbmV3IEpdLGZQPW5ldyBhLHVQPW5ldyB0ZSxsUD1uZXcgaXQscFA9bmV3IFlvO3ZoLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByLGk9TXQuY2VudGVyKG8sclApLHM9c3QudG9DYXJ0ZXNpYW4oaSxuLGlQKSxmPVhvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHMsbixkYiksdT1pdC5pbnZlcnNlKGYsZGIpLGM9Y1AsbD1zUDtsWzBdLmxvbmdpdHVkZT1vLndlc3QsbFswXS5sYXRpdHVkZT1vLnNvdXRoLGxbMV0ubG9uZ2l0dWRlPW8ud2VzdCxsWzFdLmxhdGl0dWRlPW8ubm9ydGgsbFsyXS5sb25naXR1ZGU9by5lYXN0LGxbMl0ubGF0aXR1ZGU9by5zb3V0aDtsZXQgcD1mUDtmb3Iocj0wO3I8MztyKyspc3QudG9DYXJ0ZXNpYW4obFtyXSxuLHApLHA9aXQubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IodSxwLHApLGNbcl0ueD1wLngsY1tyXS55PXAueTtsZXQgZD10ZS5mcm9tQXhpc0FuZ2xlKGEuVU5JVF9aLC1lLHVQKSxtPVouZnJvbVF1YXRlcm5pb24oZCxsUCksXz10Lmxlbmd0aCxnPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxiPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxUPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxPPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3Iocj0wO3I8XztyKyspcD1pdC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3Rvcih1LHRbcl0scCkscD1aLm11bHRpcGx5QnlWZWN0b3IobSxwLHApLGc9TWF0aC5taW4oZyxwLngpLGI9TWF0aC5taW4oYixwLnkpLFQ9TWF0aC5tYXgoVCxwLngpLE89TWF0aC5tYXgoTyxwLnkpO2xldCBFPVlvLmZyb21Sb3RhdGlvbihlLHBQKSx3PWFQO3dbMF0ueD1nLHdbMF0ueT1iLHdbMV0ueD1nLHdbMV0ueT1PLHdbMl0ueD1ULHdbMl0ueT1iO2xldCBDPWNbMF0sTT1jWzJdLngtQy54LE49Y1sxXS55LUMueTtmb3Iocj0wO3I8MztyKyspe2xldCBBPXdbcl07WW8ubXVsdGlwbHlCeVZlY3RvcihFLEEsQSksQS54PShBLngtQy54KS9NLEEueT0oQS55LUMueSkvTn1sZXQgRj13WzBdLEk9d1sxXSx2PXdbMl0sQj1uZXcgQXJyYXkoNik7cmV0dXJuIEoucGFjayhGLEIpLEoucGFjayhJLEIsMiksSi5wYWNrKHYsQiw0KSxCfTtCdD12aH0pO2Z1bmN0aW9uIGRQKHQpe2lmKHQ9dD8/TnQuRU1QVFlfT0JKRUNULCFoKHQuY29tcG9uZW50RGF0YXR5cGUpKXRocm93IG5ldyBMKCJvcHRpb25zLmNvbXBvbmVudERhdGF0eXBlIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHQuY29tcG9uZW50c1BlckF0dHJpYnV0ZSkpdGhyb3cgbmV3IEwoIm9wdGlvbnMuY29tcG9uZW50c1BlckF0dHJpYnV0ZSBpcyByZXF1aXJlZC4iKTtpZih0LmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU8MXx8dC5jb21wb25lbnRzUGVyQXR0cmlidXRlPjQpdGhyb3cgbmV3IEwoIm9wdGlvbnMuY29tcG9uZW50c1BlckF0dHJpYnV0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNC4iKTtpZighaCh0LnZhbHVlcykpdGhyb3cgbmV3IEwoIm9wdGlvbnMudmFsdWVzIGlzIHJlcXVpcmVkLiIpO3RoaXMuY29tcG9uZW50RGF0YXR5cGU9dC5jb21wb25lbnREYXRhdHlwZSx0aGlzLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU9dC5jb21wb25lbnRzUGVyQXR0cmlidXRlLHRoaXMubm9ybWFsaXplPXQubm9ybWFsaXplPz8hMSx0aGlzLnZhbHVlcz10LnZhbHVlc312YXIgcnQsWWU9JCgoKT0+e3llKCk7YXQoKTtqdCgpO3J0PWRQfSk7ZnVuY3Rpb24gbVAodCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1QsdGhpcy5wb3NpdGlvbj10LnBvc2l0aW9uLHRoaXMubm9ybWFsPXQubm9ybWFsLHRoaXMuc3Q9dC5zdCx0aGlzLmJpdGFuZ2VudD10LmJpdGFuZ2VudCx0aGlzLnRhbmdlbnQ9dC50YW5nZW50LHRoaXMuY29sb3I9dC5jb2xvcn12YXIgcmUsYW49JCgoKT0+e3llKCk7cmU9bVB9KTt2YXIgSGUsbWIsaGI9JCgoKT0+e1VlKCk7THQoKTtocigpO1d0KCk7anQoKTtBZigpO0JuKCk7VW4oKTtIZT17U0NBTEFSOiJTQ0FMQVIiLFZFQzI6IlZFQzIiLFZFQzM6IlZFQzMiLFZFQzQ6IlZFQzQiLE1BVDI6Ik1BVDIiLE1BVDM6Ik1BVDMiLE1BVDQ6Ik1BVDQifTtIZS5nZXRNYXRoVHlwZT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBIZS5TQ0FMQVI6cmV0dXJuIE51bWJlcjtjYXNlIEhlLlZFQzI6cmV0dXJuIEo7Y2FzZSBIZS5WRUMzOnJldHVybiBhO2Nhc2UgSGUuVkVDNDpyZXR1cm4gbWU7Y2FzZSBIZS5NQVQyOnJldHVybiBZbztjYXNlIEhlLk1BVDM6cmV0dXJuIFo7Y2FzZSBIZS5NQVQ0OnJldHVybiBpdDtkZWZhdWx0OnRocm93IG5ldyBMKCJhdHRyaWJ1dGVUeXBlIGlzIG5vdCBhIHZhbGlkIHZhbHVlLiIpfX07SGUuZ2V0TnVtYmVyT2ZDb21wb25lbnRzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIEhlLlNDQUxBUjpyZXR1cm4gMTtjYXNlIEhlLlZFQzI6cmV0dXJuIDI7Y2FzZSBIZS5WRUMzOnJldHVybiAzO2Nhc2UgSGUuVkVDNDpjYXNlIEhlLk1BVDI6cmV0dXJuIDQ7Y2FzZSBIZS5NQVQzOnJldHVybiA5O2Nhc2UgSGUuTUFUNDpyZXR1cm4gMTY7ZGVmYXVsdDp0aHJvdyBuZXcgTCgiYXR0cmlidXRlVHlwZSBpcyBub3QgYSB2YWxpZCB2YWx1ZS4iKX19O0hlLmdldEF0dHJpYnV0ZUxvY2F0aW9uQ291bnQ9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgSGUuU0NBTEFSOmNhc2UgSGUuVkVDMjpjYXNlIEhlLlZFQzM6Y2FzZSBIZS5WRUM0OnJldHVybiAxO2Nhc2UgSGUuTUFUMjpyZXR1cm4gMjtjYXNlIEhlLk1BVDM6cmV0dXJuIDM7Y2FzZSBIZS5NQVQ0OnJldHVybiA0O2RlZmF1bHQ6dGhyb3cgbmV3IEwoImF0dHJpYnV0ZVR5cGUgaXMgbm90IGEgdmFsaWQgdmFsdWUuIil9fTtIZS5nZXRHbHNsVHlwZT1mdW5jdGlvbih0KXtzd2l0Y2goeS50eXBlT2Yuc3RyaW5nKCJhdHRyaWJ1dGVUeXBlIix0KSx0KXtjYXNlIEhlLlNDQUxBUjpyZXR1cm4iZmxvYXQiO2Nhc2UgSGUuVkVDMjpyZXR1cm4idmVjMiI7Y2FzZSBIZS5WRUMzOnJldHVybiJ2ZWMzIjtjYXNlIEhlLlZFQzQ6cmV0dXJuInZlYzQiO2Nhc2UgSGUuTUFUMjpyZXR1cm4ibWF0MiI7Y2FzZSBIZS5NQVQzOnJldHVybiJtYXQzIjtjYXNlIEhlLk1BVDQ6cmV0dXJuIm1hdDQiO2RlZmF1bHQ6dGhyb3cgbmV3IEwoImF0dHJpYnV0ZVR5cGUgaXMgbm90IGEgdmFsaWQgdmFsdWUuIil9fTttYj1PYmplY3QuZnJlZXplKEhlKX0pO2Z1bmN0aW9uIEZwKHQpe3JldHVybiBnYlswXT10LGdiWzBdfWZ1bmN0aW9uIEZoKHQpe3JldHVybiB0Pj4xXi0odCYxKX12YXIgX2IseWIsZW4sYmYsZ2IsTGgsbm4sYXM9JCgoKT0+e1VlKCk7THQoKTtEZSgpO1d0KCk7YXQoKTtqdCgpO0t0KCk7aGIoKTtfYj0xLzI1Nix5Yj0yNTYsZW49e307ZW4ub2N0RW5jb2RlSW5SYW5nZT1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJ2ZWN0b3IiLHQpLHkuZGVmaW5lZCgicmVzdWx0IixuKTtsZXQgbz1hLm1hZ25pdHVkZVNxdWFyZWQodCk7aWYoTWF0aC5hYnMoby0xKT5QLkVQU0lMT042KXRocm93IG5ldyBMKCJ2ZWN0b3IgbXVzdCBiZSBub3JtYWxpemVkLiIpO2lmKG4ueD10LngvKE1hdGguYWJzKHQueCkrTWF0aC5hYnModC55KStNYXRoLmFicyh0LnopKSxuLnk9dC55LyhNYXRoLmFicyh0LngpK01hdGguYWJzKHQueSkrTWF0aC5hYnModC56KSksdC56PDApe2xldCByPW4ueCxpPW4ueTtuLng9KDEtTWF0aC5hYnMoaSkpKlAuc2lnbk5vdFplcm8ociksbi55PSgxLU1hdGguYWJzKHIpKSpQLnNpZ25Ob3RaZXJvKGkpfXJldHVybiBuLng9UC50b1NOb3JtKG4ueCxlKSxuLnk9UC50b1NOb3JtKG4ueSxlKSxufTtlbi5vY3RFbmNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZW4ub2N0RW5jb2RlSW5SYW5nZSh0LDI1NSxlKX07YmY9bmV3IEosZ2I9bmV3IFVpbnQ4QXJyYXkoMSk7ZW4ub2N0RW5jb2RlVG9DYXJ0ZXNpYW40PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVuLm9jdEVuY29kZUluUmFuZ2UodCw2NTUzNSxiZiksZS54PUZwKGJmLngqX2IpLGUueT1GcChiZi54KSxlLno9RnAoYmYueSpfYiksZS53PUZwKGJmLnkpLGV9O2VuLm9jdERlY29kZUluUmFuZ2U9ZnVuY3Rpb24odCxlLG4sbyl7aWYoeS5kZWZpbmVkKCJyZXN1bHQiLG8pLHQ8MHx8dD5ufHxlPDB8fGU+bil0aHJvdyBuZXcgTChgeCBhbmQgeSBtdXN0IGJlIHVuc2lnbmVkIG5vcm1hbGl6ZWQgaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAke259YCk7aWYoby54PVAuZnJvbVNOb3JtKHQsbiksby55PVAuZnJvbVNOb3JtKGUsbiksby56PTEtKE1hdGguYWJzKG8ueCkrTWF0aC5hYnMoby55KSksby56PDApe2xldCByPW8ueDtvLng9KDEtTWF0aC5hYnMoby55KSkqUC5zaWduTm90WmVybyhyKSxvLnk9KDEtTWF0aC5hYnMocikpKlAuc2lnbk5vdFplcm8oby55KX1yZXR1cm4gYS5ub3JtYWxpemUobyxvKX07ZW4ub2N0RGVjb2RlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZW4ub2N0RGVjb2RlSW5SYW5nZSh0LGUsMjU1LG4pfTtlbi5vY3REZWNvZGVGcm9tQ2FydGVzaWFuND1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiZW5jb2RlZCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXQueCxvPXQueSxyPXQueixpPXQudztpZihuPDB8fG4+MjU1fHxvPDB8fG8+MjU1fHxyPDB8fHI+MjU1fHxpPDB8fGk+MjU1KXRocm93IG5ldyBMKCJ4LCB5LCB6LCBhbmQgdyBtdXN0IGJlIHVuc2lnbmVkIG5vcm1hbGl6ZWQgaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAyNTUiKTtsZXQgcz1uKnliK28sZj1yKnliK2k7cmV0dXJuIGVuLm9jdERlY29kZUluUmFuZ2UocyxmLDY1NTM1LGUpfTtlbi5vY3RQYWNrRmxvYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkuZGVmaW5lZCgiZW5jb2RlZCIsdCksMjU2KnQueCt0Lnl9O0xoPW5ldyBKO2VuLm9jdEVuY29kZUZsb2F0PWZ1bmN0aW9uKHQpe3JldHVybiBlbi5vY3RFbmNvZGUodCxMaCksZW4ub2N0UGFja0Zsb2F0KExoKX07ZW4ub2N0RGVjb2RlRmxvYXQ9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoInZhbHVlIix0KTtsZXQgbj10LzI1NixvPU1hdGguZmxvb3Iobikscj0obi1vKSoyNTY7cmV0dXJuIGVuLm9jdERlY29kZShvLHIsZSl9O2VuLm9jdFBhY2s9ZnVuY3Rpb24odCxlLG4sbyl7eS5kZWZpbmVkKCJ2MSIsdCkseS5kZWZpbmVkKCJ2MiIsZSkseS5kZWZpbmVkKCJ2MyIsbikseS5kZWZpbmVkKCJyZXN1bHQiLG8pO2xldCByPWVuLm9jdEVuY29kZUZsb2F0KHQpLGk9ZW4ub2N0RW5jb2RlRmxvYXQoZSkscz1lbi5vY3RFbmNvZGUobixMaCk7cmV0dXJuIG8ueD02NTUzNipzLngrcixvLnk9NjU1MzYqcy55K2ksb307ZW4ub2N0VW5wYWNrPWZ1bmN0aW9uKHQsZSxuLG8pe3kuZGVmaW5lZCgicGFja2VkIix0KSx5LmRlZmluZWQoInYxIixlKSx5LmRlZmluZWQoInYyIixuKSx5LmRlZmluZWQoInYzIixvKTtsZXQgcj10LngvNjU1MzYsaT1NYXRoLmZsb29yKHIpLHM9KHItaSkqNjU1MzY7cj10LnkvNjU1MzY7bGV0IGY9TWF0aC5mbG9vcihyKSx1PShyLWYpKjY1NTM2O2VuLm9jdERlY29kZUZsb2F0KHMsZSksZW4ub2N0RGVjb2RlRmxvYXQodSxuKSxlbi5vY3REZWNvZGUoaSxmLG8pfTtlbi5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcz1mdW5jdGlvbih0KXt5LmRlZmluZWQoInRleHR1cmVDb29yZGluYXRlcyIsdCk7bGV0IGU9dC54KjQwOTV8MCxuPXQueSo0MDk1fDA7cmV0dXJuIDQwOTYqZStufTtlbi5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjb21wcmVzc2VkIix0KSx5LmRlZmluZWQoInJlc3VsdCIsZSk7bGV0IG49dC80MDk2LG89TWF0aC5mbG9vcihuKTtyZXR1cm4gZS54PW8vNDA5NSxlLnk9KHQtbyo0MDk2KS80MDk1LGV9O2VuLnppZ1phZ0RlbHRhRGVjb2RlPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoInVCdWZmZXIiLHQpLHkuZGVmaW5lZCgidkJ1ZmZlciIsZSkseS50eXBlT2YubnVtYmVyLmVxdWFscygidUJ1ZmZlci5sZW5ndGgiLCJ2QnVmZmVyLmxlbmd0aCIsdC5sZW5ndGgsZS5sZW5ndGgpLGgobikmJnkudHlwZU9mLm51bWJlci5lcXVhbHMoInVCdWZmZXIubGVuZ3RoIiwiaGVpZ2h0QnVmZmVyLmxlbmd0aCIsdC5sZW5ndGgsbi5sZW5ndGgpO2xldCBvPXQubGVuZ3RoLHI9MCxpPTAscz0wO2ZvcihsZXQgZj0wO2Y8bzsrK2Ypcis9RmgodFtmXSksaSs9RmgoZVtmXSksdFtmXT1yLGVbZl09aSxoKG4pJiYocys9RmgobltmXSksbltmXT1zKX07ZW4uZGVxdWFudGl6ZT1mdW5jdGlvbih0LGUsbixvKXt5LmRlZmluZWQoInR5cGVkQXJyYXkiLHQpLHkuZGVmaW5lZCgiY29tcG9uZW50RGF0YXR5cGUiLGUpLHkuZGVmaW5lZCgidHlwZSIsbikseS5kZWZpbmVkKCJjb3VudCIsbyk7bGV0IHI9bWIuZ2V0TnVtYmVyT2ZDb21wb25lbnRzKG4pLGk7c3dpdGNoKGUpe2Nhc2UgZXQuQllURTppPTEyNzticmVhaztjYXNlIGV0LlVOU0lHTkVEX0JZVEU6aT0yNTU7YnJlYWs7Y2FzZSBldC5TSE9SVDppPTMyNzY3O2JyZWFrO2Nhc2UgZXQuVU5TSUdORURfU0hPUlQ6aT02NTUzNTticmVhaztjYXNlIGV0LklOVDppPTIxNDc0ODM2NDc7YnJlYWs7Y2FzZSBldC5VTlNJR05FRF9JTlQ6aT00Mjk0OTY3Mjk1O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEwoYENhbm5vdCBkZXF1YW50aXplIGNvbXBvbmVudCBkYXRhdHlwZTogJHtlfWApfWxldCBzPW5ldyBGbG9hdDMyQXJyYXkobypyKTtmb3IobGV0IGY9MDtmPG87ZisrKWZvcihsZXQgdT0wO3U8cjt1Kyspe2xldCBjPWYqcit1O3NbY109TWF0aC5tYXgodFtjXS9pLC0xKX1yZXR1cm4gc307ZW4uZGVjb2RlUkdCNTY1PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJ0eXBlZEFycmF5Iix0KTtsZXQgbj10Lmxlbmd0aCozO2goZSkmJnkudHlwZU9mLm51bWJlci5lcXVhbHMoInJlc3VsdC5sZW5ndGgiLCJ0eXBlZEFycmF5Lmxlbmd0aCAqIDMiLGUubGVuZ3RoLG4pO2xldCBvPXQubGVuZ3RoO2goZSl8fChlPW5ldyBGbG9hdDMyQXJyYXkobyozKSk7bGV0IHI9MzEsaT02MyxzPTEvMzEsZj0xLzYzO2ZvcihsZXQgdT0wO3U8bzt1Kyspe2xldCBjPXRbdV0sbD1jPj4xMSxwPWM+PjUmaSxkPWMmcixtPTMqdTtlW21dPWwqcyxlW20rMV09cCpmLGVbbSsyXT1kKnN9cmV0dXJuIGV9O25uPWVufSk7ZnVuY3Rpb24gaFAodCxlLG4sbyxyKXt5LmRlZmluZWQoInBvaW50Iix0KSx5LmRlZmluZWQoInAwIixlKSx5LmRlZmluZWQoInAxIixuKSx5LmRlZmluZWQoInAyIixvKSxoKHIpfHwocj1uZXcgYSk7bGV0IGkscyxmLHUsYyxsLHAsZDtpZihoKGUueikpe2lmKGEuZXF1YWxzRXBzaWxvbih0LGUsUC5FUFNJTE9OMTQpKXJldHVybiBhLmNsb25lKGEuVU5JVF9YLHIpO2lmKGEuZXF1YWxzRXBzaWxvbih0LG4sUC5FUFNJTE9OMTQpKXJldHVybiBhLmNsb25lKGEuVU5JVF9ZLHIpO2lmKGEuZXF1YWxzRXBzaWxvbih0LG8sUC5FUFNJTE9OMTQpKXJldHVybiBhLmNsb25lKGEuVU5JVF9aLHIpO2k9YS5zdWJ0cmFjdChuLGUsQWIpLHM9YS5zdWJ0cmFjdChvLGUsYmIpLGY9YS5zdWJ0cmFjdCh0LGUsVGIpLHU9YS5kb3QoaSxpKSxjPWEuZG90KGkscyksbD1hLmRvdChpLGYpLHA9YS5kb3QocyxzKSxkPWEuZG90KHMsZil9ZWxzZXtpZihKLmVxdWFsc0Vwc2lsb24odCxlLFAuRVBTSUxPTjE0KSlyZXR1cm4gYS5jbG9uZShhLlVOSVRfWCxyKTtpZihKLmVxdWFsc0Vwc2lsb24odCxuLFAuRVBTSUxPTjE0KSlyZXR1cm4gYS5jbG9uZShhLlVOSVRfWSxyKTtpZihKLmVxdWFsc0Vwc2lsb24odCxvLFAuRVBTSUxPTjE0KSlyZXR1cm4gYS5jbG9uZShhLlVOSVRfWixyKTtpPUouc3VidHJhY3QobixlLEFiKSxzPUouc3VidHJhY3QobyxlLGJiKSxmPUouc3VidHJhY3QodCxlLFRiKSx1PUouZG90KGksaSksYz1KLmRvdChpLHMpLGw9Si5kb3QoaSxmKSxwPUouZG90KHMscyksZD1KLmRvdChzLGYpfXIueT1wKmwtYypkLHIuej11KmQtYypsO2xldCBtPXUqcC1jKmM7aWYobSE9PTApcmV0dXJuIHIueS89bSxyLnovPW0sci54PTEtci55LXIueixyfXZhciBBYixiYixUYix3YixPYj0kKCgpPT57VWUoKTtMdCgpO1d0KCk7YXQoKTtLdCgpO0FiPW5ldyBhLGJiPW5ldyBhLFRiPW5ldyBhO3diPWhQfSk7ZnVuY3Rpb24gcmkoKXt0aGlzLmhpZ2g9YS5jbG9uZShhLlpFUk8pLHRoaXMubG93PWEuY2xvbmUoYS5aRVJPKX12YXIgTmksRGgsWnMsQmg9JCgoKT0+e0x0KCk7V3QoKTthdCgpO3JpLmVuY29kZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm51bWJlcigidmFsdWUiLHQpLGgoZSl8fChlPXtoaWdoOjAsbG93OjB9KTtsZXQgbjtyZXR1cm4gdD49MD8obj1NYXRoLmZsb29yKHQvNjU1MzYpKjY1NTM2LGUuaGlnaD1uLGUubG93PXQtbik6KG49TWF0aC5mbG9vcigtdC82NTUzNikqNjU1MzYsZS5oaWdoPS1uLGUubG93PXQrbiksZX07Tmk9e2hpZ2g6MCxsb3c6MH07cmkuZnJvbUNhcnRlc2lhbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSxoKGUpfHwoZT1uZXcgcmkpO2xldCBuPWUuaGlnaCxvPWUubG93O3JldHVybiByaS5lbmNvZGUodC54LE5pKSxuLng9TmkuaGlnaCxvLng9TmkubG93LHJpLmVuY29kZSh0LnksTmkpLG4ueT1OaS5oaWdoLG8ueT1OaS5sb3cscmkuZW5jb2RlKHQueixOaSksbi56PU5pLmhpZ2gsby56PU5pLmxvdyxlfTtEaD1uZXcgcmk7cmkud3JpdGVFbGVtZW50cz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJjYXJ0ZXNpYW5BcnJheSIsZSkseS50eXBlT2YubnVtYmVyKCJpbmRleCIsbikseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixuLDApLHJpLmZyb21DYXJ0ZXNpYW4odCxEaCk7bGV0IG89RGguaGlnaCxyPURoLmxvdztlW25dPW8ueCxlW24rMV09by55LGVbbisyXT1vLnosZVtuKzNdPXIueCxlW24rNF09ci55LGVbbis1XT1yLnp9O1pzPXJpfSk7dmFyIHRvLEZ0LCRlPSQoKCk9PnthdCgpO2p0KCk7S3QoKTskcygpO3RvPXtVTlNJR05FRF9CWVRFOkh0LlVOU0lHTkVEX0JZVEUsVU5TSUdORURfU0hPUlQ6SHQuVU5TSUdORURfU0hPUlQsVU5TSUdORURfSU5UOkh0LlVOU0lHTkVEX0lOVH07dG8uZ2V0U2l6ZUluQnl0ZXM9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgdG8uVU5TSUdORURfQllURTpyZXR1cm4gVWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIHRvLlVOU0lHTkVEX1NIT1JUOnJldHVybiBVaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIHRvLlVOU0lHTkVEX0lOVDpyZXR1cm4gVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlR9dGhyb3cgbmV3IEwoImluZGV4RGF0YXR5cGUgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSB2YWxpZCBJbmRleERhdGF0eXBlIGNvbnN0YW50LiIpfTt0by5mcm9tU2l6ZUluQnl0ZXM9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMjpyZXR1cm4gdG8uVU5TSUdORURfU0hPUlQ7Y2FzZSA0OnJldHVybiB0by5VTlNJR05FRF9JTlQ7Y2FzZSAxOnJldHVybiB0by5VTlNJR05FRF9CWVRFO2RlZmF1bHQ6dGhyb3cgbmV3IEwoIlNpemUgaW4gYnl0ZXMgY2Fubm90IGJlIG1hcHBlZCB0byBhbiBJbmRleERhdGF0eXBlIil9fTt0by52YWxpZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmKHQ9PT10by5VTlNJR05FRF9CWVRFfHx0PT09dG8uVU5TSUdORURfU0hPUlR8fHQ9PT10by5VTlNJR05FRF9JTlQpfTt0by5jcmVhdGVUeXBlZEFycmF5PWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEwoIm51bWJlck9mVmVydGljZXMgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQ+PVAuU0lYVFlfRk9VUl9LSUxPQllURVM/bmV3IFVpbnQzMkFycmF5KGUpOm5ldyBVaW50MTZBcnJheShlKX07dG8uY3JlYXRlVHlwZWRBcnJheUZyb21BcnJheUJ1ZmZlcj1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgTCgibnVtYmVyT2ZWZXJ0aWNlcyBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgic291cmNlQXJyYXkgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEwoImJ5dGVPZmZzZXQgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQ+PVAuU0lYVFlfRk9VUl9LSUxPQllURVM/bmV3IFVpbnQzMkFycmF5KGUsbixvKTpuZXcgVWludDE2QXJyYXkoZSxuLG8pfTt0by5mcm9tVHlwZWRBcnJheT1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gdG8uVU5TSUdORURfQllURTtpZih0IGluc3RhbmNlb2YgVWludDE2QXJyYXkpcmV0dXJuIHRvLlVOU0lHTkVEX1NIT1JUO2lmKHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gdG8uVU5TSUdORURfSU5UO3Rocm93IG5ldyBMKCJhcnJheSBtdXN0IGJlIGEgVWludDhBcnJheSwgVWludDE2QXJyYXksIG9yIFVpbnQzMkFycmF5LiIpfTtGdD1PYmplY3QuZnJlZXplKHRvKX0pO2Z1bmN0aW9uIEViKHQsZSxuKXtsZXQgbz10K2U7cmV0dXJuIFAuc2lnbih0KSE9PVAuc2lnbihlKSYmTWF0aC5hYnMoby9NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSkpPG4/MDpvfXZhciBVaCxncixMcD0kKCgpPT57anQoKTtLdCgpO1VoPXt9O1VoLmNvbXB1dGVEaXNjcmltaW5hbnQ9ZnVuY3Rpb24odCxlLG4pe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgTCgiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEwoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBMKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO3JldHVybiBlKmUtNCp0Km59O1VoLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24odCxlLG4pe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgTCgiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEwoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBMKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2xldCBvO2lmKHQ9PT0wKXJldHVybiBlPT09MD9bXTpbLW4vZV07aWYoZT09PTApe2lmKG49PT0wKXJldHVyblswLDBdO2xldCB1PU1hdGguYWJzKG4pLGM9TWF0aC5hYnModCk7aWYodTxjJiZ1L2M8UC5FUFNJTE9OMTQpcmV0dXJuWzAsMF07aWYodT5jJiZjL3U8UC5FUFNJTE9OMTQpcmV0dXJuW107aWYobz0tbi90LG88MClyZXR1cm5bXTtsZXQgbD1NYXRoLnNxcnQobyk7cmV0dXJuWy1sLGxdfWVsc2UgaWYobj09PTApcmV0dXJuIG89LWUvdCxvPDA/W28sMF06WzAsb107bGV0IHI9ZSplLGk9NCp0Km4scz1FYihyLC1pLFAuRVBTSUxPTjE0KTtpZihzPDApcmV0dXJuW107bGV0IGY9LS41KkViKGUsUC5zaWduKGUpKk1hdGguc3FydChzKSxQLkVQU0lMT04xNCk7cmV0dXJuIGU+MD9bZi90LG4vZl06W24vZixmL3RdfTtncj1VaH0pO2Z1bmN0aW9uIGtoKHQsZSxuLG8pe2xldCByPXQsaT1lLzMscz1uLzMsZj1vLHU9cipzLGM9aSpmLGw9aSppLHA9cypzLGQ9cipzLWwsbT1yKmYtaSpzLF89aSpmLXAsZz00KmQqXy1tKm0sYixUO2lmKGc8MCl7bGV0IFIsbnQsY3Q7bCpjPj11KnA/KFI9cixudD1kLGN0PS0yKmkqZCtyKm0pOihSPWYsbnQ9XyxjdD0tZiptKzIqcypfKTtsZXQgX3Q9LShjdDwwPy0xOjEpKk1hdGguYWJzKFIpKk1hdGguc3FydCgtZyk7VD0tY3QrX3Q7bGV0IG90PVQvMix4dD1vdDwwPy1NYXRoLnBvdygtb3QsMS8zKTpNYXRoLnBvdyhvdCwxLzMpLHl0PVQ9PT1fdD8teHQ6LW50L3h0O3JldHVybiBiPW50PD0wP3h0K3l0Oi1jdC8oeHQqeHQreXQqeXQrbnQpLGwqYz49dSpwP1soYi1pKS9yXTpbLWYvKGIrcyldfWxldCBPPWQsRT0tMippKmQrciptLHc9XyxDPS1mKm0rMipzKl8sTT1NYXRoLnNxcnQoZyksTj1NYXRoLnNxcnQoMykvMixGPU1hdGguYWJzKE1hdGguYXRhbjIocipNLC1FKS8zKTtiPTIqTWF0aC5zcXJ0KC1PKTtsZXQgST1NYXRoLmNvcyhGKTtUPWIqSTtsZXQgdj1iKigtSS8yLU4qTWF0aC5zaW4oRikpLEI9VCt2PjIqaT9ULWk6di1pLEE9cixTPUIvQTtGPU1hdGguYWJzKE1hdGguYXRhbjIoZipNLC1DKS8zKSxiPTIqTWF0aC5zcXJ0KC13KSxJPU1hdGguY29zKEYpLFQ9YipJLHY9YiooLUkvMi1OKk1hdGguc2luKEYpKTtsZXQgeD0tZixEPVQrdjwyKnM/VCtzOnYrcyx6PXgvRCxqPUEqRCxrPS1CKkQtQSp4LHE9Qip4LFc9KHMqay1pKnEpLygtaSprK3Mqaik7cmV0dXJuIFM8PVc/Uzw9ej9XPD16P1tTLFcsel06W1MseixXXTpbeixTLFddOlM8PXo/W1csUyx6XTpXPD16P1tXLHosU106W3osVyxTXX12YXIgR2gsRHAsUmI9JCgoKT0+e2p0KCk7THAoKTtHaD17fTtHaC5jb21wdXRlRGlzY3JpbWluYW50PWZ1bmN0aW9uKHQsZSxuLG8pe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgTCgiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEwoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBMKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBvIT0ibnVtYmVyIil0aHJvdyBuZXcgTCgiZCBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtsZXQgcj10KnQsaT1lKmUscz1uKm4sZj1vKm87cmV0dXJuIDE4KnQqZSpuKm8raSpzLTI3KnIqZi00Kih0KnMqbitpKmUqbyl9O0doLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24odCxlLG4sbyl7aWYodHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBMKCJhIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBlIT0ibnVtYmVyIil0aHJvdyBuZXcgTCgiYiBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgbiE9Im51bWJlciIpdGhyb3cgbmV3IEwoImMgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG8hPSJudW1iZXIiKXRocm93IG5ldyBMKCJkIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2xldCByLGk7aWYodD09PTApcmV0dXJuIGdyLmNvbXB1dGVSZWFsUm9vdHMoZSxuLG8pO2lmKGU9PT0wKXtpZihuPT09MCl7aWYobz09PTApcmV0dXJuWzAsMCwwXTtpPS1vL3Q7bGV0IHM9aTwwPy1NYXRoLnBvdygtaSwxLzMpOk1hdGgucG93KGksMS8zKTtyZXR1cm5bcyxzLHNdfWVsc2UgaWYobz09PTApcmV0dXJuIHI9Z3IuY29tcHV0ZVJlYWxSb290cyh0LDAsbiksci5MZW5ndGg9PT0wP1swXTpbclswXSwwLHJbMV1dO3JldHVybiBraCh0LDAsbixvKX1lbHNle2lmKG49PT0wKXJldHVybiBvPT09MD8oaT0tZS90LGk8MD9baSwwLDBdOlswLDAsaV0pOmtoKHQsZSwwLG8pO2lmKG89PT0wKXJldHVybiByPWdyLmNvbXB1dGVSZWFsUm9vdHModCxlLG4pLHIubGVuZ3RoPT09MD9bMF06clsxXTw9MD9bclswXSxyWzFdLDBdOnJbMF0+PTA/WzAsclswXSxyWzFdXTpbclswXSwwLHJbMV1dfXJldHVybiBraCh0LGUsbixvKX07RHA9R2h9KTtmdW5jdGlvbiBCcih0LGUsbixvKXtsZXQgcj10KnQsaT1lLTMqci84LHM9bi1lKnQvMityKnQvOCxmPW8tbip0LzQrZSpyLzE2LTMqcipyLzI1Nix1PURwLmNvbXB1dGVSZWFsUm9vdHMoMSwyKmksaSppLTQqZiwtcypzKTtpZih1Lmxlbmd0aD4wKXtsZXQgYz0tdC80LGw9dVt1Lmxlbmd0aC0xXTtpZihNYXRoLmFicyhsKTxQLkVQU0lMT04xNCl7bGV0IHA9Z3IuY29tcHV0ZVJlYWxSb290cygxLGksZik7aWYocC5sZW5ndGg9PT0yKXtsZXQgZD1wWzBdLG09cFsxXSxfO2lmKGQ+PTAmJm0+PTApe2xldCBnPU1hdGguc3FydChkKSxiPU1hdGguc3FydChtKTtyZXR1cm5bYy1iLGMtZyxjK2csYytiXX1lbHNle2lmKGQ+PTAmJm08MClyZXR1cm4gXz1NYXRoLnNxcnQoZCksW2MtXyxjK19dO2lmKGQ8MCYmbT49MClyZXR1cm4gXz1NYXRoLnNxcnQobSksW2MtXyxjK19dfX1yZXR1cm5bXX1lbHNlIGlmKGw+MCl7bGV0IHA9TWF0aC5zcXJ0KGwpLGQ9KGkrbC1zL3ApLzIsbT0oaStsK3MvcCkvMixfPWdyLmNvbXB1dGVSZWFsUm9vdHMoMSxwLGQpLGc9Z3IuY29tcHV0ZVJlYWxSb290cygxLC1wLG0pO3JldHVybiBfLmxlbmd0aCE9PTA/KF9bMF0rPWMsX1sxXSs9YyxnLmxlbmd0aCE9PTA/KGdbMF0rPWMsZ1sxXSs9YyxfWzFdPD1nWzBdP1tfWzBdLF9bMV0sZ1swXSxnWzFdXTpnWzFdPD1fWzBdP1tnWzBdLGdbMV0sX1swXSxfWzFdXTpfWzBdPj1nWzBdJiZfWzFdPD1nWzFdP1tnWzBdLF9bMF0sX1sxXSxnWzFdXTpnWzBdPj1fWzBdJiZnWzFdPD1fWzFdP1tfWzBdLGdbMF0sZ1sxXSxfWzFdXTpfWzBdPmdbMF0mJl9bMF08Z1sxXT9bZ1swXSxfWzBdLGdbMV0sX1sxXV06W19bMF0sZ1swXSxfWzFdLGdbMV1dKTpfKTpnLmxlbmd0aCE9PTA/KGdbMF0rPWMsZ1sxXSs9YyxnKTpbXX19cmV0dXJuW119ZnVuY3Rpb24gVGYodCxlLG4sbyl7bGV0IHI9bipuLGk9ZSplLHM9dCp0LGY9LTIqZSx1PW4qdCtpLTQqbyxjPXMqby1uKmUqdCtyLGw9RHAuY29tcHV0ZVJlYWxSb290cygxLGYsdSxjKTtpZihsLmxlbmd0aD4wKXtsZXQgcD1sWzBdLGQ9ZS1wLG09ZCpkLF89dC8yLGc9ZC8yLGI9bS00Km8sVD1tKzQqTWF0aC5hYnMobyksTz1zLTQqcCxFPXMrNCpNYXRoLmFicyhwKSx3LEM7aWYocDwwfHxiKkU8TypUKXtsZXQgQT1NYXRoLnNxcnQoTyk7dz1BLzIsQz1BPT09MD8wOih0KmctbikvQX1lbHNle2xldCBBPU1hdGguc3FydChiKTt3PUE9PT0wPzA6KHQqZy1uKS9BLEM9QS8yfWxldCBNLE47Xz09PTAmJnc9PT0wPyhNPTAsTj0wKTpQLnNpZ24oXyk9PT1QLnNpZ24odyk/KE09Xyt3LE49cC9NKTooTj1fLXcsTT1wL04pO2xldCBGLEk7Zz09PTAmJkM9PT0wPyhGPTAsST0wKTpQLnNpZ24oZyk9PT1QLnNpZ24oQyk/KEY9ZytDLEk9by9GKTooST1nLUMsRj1vL0kpO2xldCB2PWdyLmNvbXB1dGVSZWFsUm9vdHMoMSxNLEYpLEI9Z3IuY29tcHV0ZVJlYWxSb290cygxLE4sSSk7aWYodi5sZW5ndGghPT0wKXJldHVybiBCLmxlbmd0aCE9PTA/dlsxXTw9QlswXT9bdlswXSx2WzFdLEJbMF0sQlsxXV06QlsxXTw9dlswXT9bQlswXSxCWzFdLHZbMF0sdlsxXV06dlswXT49QlswXSYmdlsxXTw9QlsxXT9bQlswXSx2WzBdLHZbMV0sQlsxXV06QlswXT49dlswXSYmQlsxXTw9dlsxXT9bdlswXSxCWzBdLEJbMV0sdlsxXV06dlswXT5CWzBdJiZ2WzBdPEJbMV0/W0JbMF0sdlswXSxCWzFdLHZbMV1dOlt2WzBdLEJbMF0sdlsxXSxCWzFdXTp2O2lmKEIubGVuZ3RoIT09MClyZXR1cm4gQn1yZXR1cm5bXX12YXIgVmgsU2IsQ2I9JCgoKT0+e1JiKCk7anQoKTtLdCgpO0xwKCk7Vmg9e307VmguY29tcHV0ZURpc2NyaW1pbmFudD1mdW5jdGlvbih0LGUsbixvLHIpe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgTCgiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEwoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBMKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBvIT0ibnVtYmVyIil0aHJvdyBuZXcgTCgiZCBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgciE9Im51bWJlciIpdGhyb3cgbmV3IEwoImUgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7bGV0IGk9dCp0LHM9aSp0LGY9ZSplLHU9ZiplLGM9bipuLGw9YypuLHA9bypvLGQ9cCpvLG09cipyLF89bSpyO3JldHVybiBmKmMqcC00KnUqZC00KnQqbCpwKzE4KnQqZSpuKmQtMjcqaSpwKnArMjU2KnMqXytyKigxOCp1Km4qby00KmYqbCsxNip0KmMqYy04MCp0KmUqYypvLTYqdCpmKnArMTQ0KmkqbipwKSttKigxNDQqdCpmKm4tMjcqZipmLTEyOCppKmMtMTkyKmkqZSpvKX07VmguY29tcHV0ZVJlYWxSb290cz1mdW5jdGlvbih0LGUsbixvLHIpe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgTCgiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEwoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBMKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBvIT0ibnVtYmVyIil0aHJvdyBuZXcgTCgiZCBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgciE9Im51bWJlciIpdGhyb3cgbmV3IEwoImUgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYoTWF0aC5hYnModCk8UC5FUFNJTE9OMTUpcmV0dXJuIERwLmNvbXB1dGVSZWFsUm9vdHMoZSxuLG8scik7bGV0IGk9ZS90LHM9bi90LGY9by90LHU9ci90LGM9aTwwPzE6MDtzd2l0Y2goYys9czwwP2MrMTpjLGMrPWY8MD9jKzE6YyxjKz11PDA/YysxOmMsYyl7Y2FzZSAwOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDE6cmV0dXJuIFRmKGkscyxmLHUpO2Nhc2UgMjpyZXR1cm4gVGYoaSxzLGYsdSk7Y2FzZSAzOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDQ6cmV0dXJuIEJyKGkscyxmLHUpO2Nhc2UgNTpyZXR1cm4gVGYoaSxzLGYsdSk7Y2FzZSA2OnJldHVybiBCcihpLHMsZix1KTtjYXNlIDc6cmV0dXJuIEJyKGkscyxmLHUpO2Nhc2UgODpyZXR1cm4gVGYoaSxzLGYsdSk7Y2FzZSA5OnJldHVybiBCcihpLHMsZix1KTtjYXNlIDEwOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDExOnJldHVybiBUZihpLHMsZix1KTtjYXNlIDEyOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDEzOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDE0OnJldHVybiBCcihpLHMsZix1KTtjYXNlIDE1OnJldHVybiBCcihpLHMsZix1KTtkZWZhdWx0OnJldHVybn19O1NiPVZofSk7ZnVuY3Rpb24gQnAodCxlKXtlPWEuY2xvbmUoZT8/YS5aRVJPKSxhLmVxdWFscyhlLGEuWkVSTyl8fGEubm9ybWFsaXplKGUsZSksdGhpcy5vcmlnaW49YS5jbG9uZSh0Pz9hLlpFUk8pLHRoaXMuZGlyZWN0aW9uPWV9dmFyIFFzLFVwPSQoKCk9PntMdCgpO1d0KCk7YXQoKTtCcC5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGUub3JpZ2luPWEuY2xvbmUodC5vcmlnaW4pLGUuZGlyZWN0aW9uPWEuY2xvbmUodC5kaXJlY3Rpb24pLGUpOm5ldyBCcCh0Lm9yaWdpbix0LmRpcmVjdGlvbil9O0JwLmdldFBvaW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyYXkiLHQpLHkudHlwZU9mLm51bWJlcigidCIsZSksaChuKXx8KG49bmV3IGEpLG49YS5tdWx0aXBseUJ5U2NhbGFyKHQuZGlyZWN0aW9uLGUsbiksYS5hZGQodC5vcmlnaW4sbixuKX07UXM9QnB9KTtmdW5jdGlvbiBBUCh0LGUsbixvKXtsZXQgcj1lKmUtNCp0Km47aWYocjwwKXJldHVybjtpZihyPjApe2xldCBzPTEvKDIqdCksZj1NYXRoLnNxcnQociksdT0oLWUrZikqcyxjPSgtZS1mKSpzO3JldHVybiB1PGM/KG8ucm9vdDA9dSxvLnJvb3QxPWMpOihvLnJvb3QwPWMsby5yb290MT11KSxvfWxldCBpPS1lLygyKnQpO2lmKGkhPT0wKXJldHVybiBvLnJvb3QwPW8ucm9vdDE9aSxvfWZ1bmN0aW9uIERiKHQsZSxuKXtoKG4pfHwobj1uZXcgUXIpO2xldCBvPXQub3JpZ2luLHI9dC5kaXJlY3Rpb24saT1lLmNlbnRlcixzPWUucmFkaXVzKmUucmFkaXVzLGY9YS5zdWJ0cmFjdChvLGksTGIpLHU9YS5kb3QocixyKSxjPTIqYS5kb3QocixmKSxsPWEubWFnbml0dWRlU3F1YXJlZChmKS1zLHA9QVAodSxjLGwsYlApO2lmKGgocCkpcmV0dXJuIG4uc3RhcnQ9cC5yb290MCxuLnN0b3A9cC5yb290MSxufWZ1bmN0aW9uIEpzKHQsZSxuKXtsZXQgbz10K2U7cmV0dXJuIFAuc2lnbih0KSE9PVAuc2lnbihlKSYmTWF0aC5hYnMoby9NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSkpPG4/MDpvfXZhciBnbixfUCx5UCxMYix4YixQYixnUCxiUCxUUCx3UCxPUCx6aCxNYixOYixrcCxFUCxSUCxTUCxDUCx4UCxQUCxJYix2YixGYixNUCxOUCxJUCxobyx0Yz0kKCgpPT57THQoKTtJZSgpO2F0KCk7anQoKTtIbCgpO0t0KCk7Qm4oKTtMcCgpO0NiKCk7VXAoKTtnbj17fTtnbi5yYXlQbGFuZT1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoInJheSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgicGxhbmUgaXMgcmVxdWlyZWQuIik7aChuKXx8KG49bmV3IGEpO2xldCBvPXQub3JpZ2luLHI9dC5kaXJlY3Rpb24saT1lLm5vcm1hbCxzPWEuZG90KGkscik7aWYoTWF0aC5hYnMocyk8UC5FUFNJTE9OMTUpcmV0dXJuO2xldCBmPSgtZS5kaXN0YW5jZS1hLmRvdChpLG8pKS9zO2lmKCEoZjwwKSlyZXR1cm4gbj1hLm11bHRpcGx5QnlTY2FsYXIocixmLG4pLGEuYWRkKG8sbixuKX07X1A9bmV3IGEseVA9bmV3IGEsTGI9bmV3IGEseGI9bmV3IGEsUGI9bmV3IGE7Z24ucmF5VHJpYW5nbGVQYXJhbWV0cmljPWZ1bmN0aW9uKHQsZSxuLG8scil7aWYoIWgodCkpdGhyb3cgbmV3IEwoInJheSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgicDAgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEwoInAxIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBMKCJwMiBpcyByZXF1aXJlZC4iKTtyPXI/PyExO2xldCBpPXQub3JpZ2luLHM9dC5kaXJlY3Rpb24sZj1hLnN1YnRyYWN0KG4sZSxfUCksdT1hLnN1YnRyYWN0KG8sZSx5UCksYz1hLmNyb3NzKHMsdSxMYiksbD1hLmRvdChmLGMpLHAsZCxtLF8sZztpZihyKXtpZihsPFAuRVBTSUxPTjZ8fChwPWEuc3VidHJhY3QoaSxlLHhiKSxtPWEuZG90KHAsYyksbTwwfHxtPmwpfHwoZD1hLmNyb3NzKHAsZixQYiksXz1hLmRvdChzLGQpLF88MHx8bStfPmwpKXJldHVybjtnPWEuZG90KHUsZCkvbH1lbHNle2lmKE1hdGguYWJzKGwpPFAuRVBTSUxPTjYpcmV0dXJuO2xldCBiPTEvbDtpZihwPWEuc3VidHJhY3QoaSxlLHhiKSxtPWEuZG90KHAsYykqYixtPDB8fG0+MXx8KGQ9YS5jcm9zcyhwLGYsUGIpLF89YS5kb3QocyxkKSpiLF88MHx8bStfPjEpKXJldHVybjtnPWEuZG90KHUsZCkqYn1yZXR1cm4gZ307Z24ucmF5VHJpYW5nbGU9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzPWduLnJheVRyaWFuZ2xlUGFyYW1ldHJpYyh0LGUsbixvLHIpO2lmKCEoIWgocyl8fHM8MCkpcmV0dXJuIGgoaSl8fChpPW5ldyBhKSxhLm11bHRpcGx5QnlTY2FsYXIodC5kaXJlY3Rpb24scyxpKSxhLmFkZCh0Lm9yaWdpbixpLGkpfTtnUD1uZXcgUXM7Z24ubGluZVNlZ21lbnRUcmlhbmdsZT1mdW5jdGlvbih0LGUsbixvLHIsaSxzKXtpZighaCh0KSl0aHJvdyBuZXcgTCgidjAgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoInYxIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBMKCJwMCBpcyByZXF1aXJlZC4iKTtpZighaChvKSl0aHJvdyBuZXcgTCgicDEgaXMgcmVxdWlyZWQuIik7aWYoIWgocikpdGhyb3cgbmV3IEwoInAyIGlzIHJlcXVpcmVkLiIpO2xldCBmPWdQO2EuY2xvbmUodCxmLm9yaWdpbiksYS5zdWJ0cmFjdChlLHQsZi5kaXJlY3Rpb24pLGEubm9ybWFsaXplKGYuZGlyZWN0aW9uLGYuZGlyZWN0aW9uKTtsZXQgdT1nbi5yYXlUcmlhbmdsZVBhcmFtZXRyaWMoZixuLG8scixpKTtpZighKCFoKHUpfHx1PDB8fHU+YS5kaXN0YW5jZSh0LGUpKSlyZXR1cm4gaChzKXx8KHM9bmV3IGEpLGEubXVsdGlwbHlCeVNjYWxhcihmLmRpcmVjdGlvbix1LHMpLGEuYWRkKGYub3JpZ2luLHMscyl9O2JQPXtyb290MDowLHJvb3QxOjB9O2duLnJheVNwaGVyZT1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoInJheSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgic3BoZXJlIGlzIHJlcXVpcmVkLiIpO2lmKG49RGIodCxlLG4pLCEoIWgobil8fG4uc3RvcDwwKSlyZXR1cm4gbi5zdGFydD1NYXRoLm1heChuLnN0YXJ0LDApLG59O1RQPW5ldyBRcztnbi5saW5lU2VnbWVudFNwaGVyZT1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgTCgicDAgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoInAxIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBMKCJzcGhlcmUgaXMgcmVxdWlyZWQuIik7bGV0IHI9VFA7YS5jbG9uZSh0LHIub3JpZ2luKTtsZXQgaT1hLnN1YnRyYWN0KGUsdCxyLmRpcmVjdGlvbikscz1hLm1hZ25pdHVkZShpKTtpZihhLm5vcm1hbGl6ZShpLGkpLG89RGIocixuLG8pLCEoIWgobyl8fG8uc3RvcDwwfHxvLnN0YXJ0PnMpKXJldHVybiBvLnN0YXJ0PU1hdGgubWF4KG8uc3RhcnQsMCksby5zdG9wPU1hdGgubWluKG8uc3RvcCxzKSxvfTt3UD1uZXcgYSxPUD1uZXcgYTtnbi5yYXlFbGxpcHNvaWQ9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgTCgicmF5IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJlbGxpcHNvaWQgaXMgcmVxdWlyZWQuIik7bGV0IG49ZS5vbmVPdmVyUmFkaWksbz1hLm11bHRpcGx5Q29tcG9uZW50cyhuLHQub3JpZ2luLHdQKSxyPWEubXVsdGlwbHlDb21wb25lbnRzKG4sdC5kaXJlY3Rpb24sT1ApLGk9YS5tYWduaXR1ZGVTcXVhcmVkKG8pLHM9YS5kb3QobyxyKSxmLHUsYyxsLHA7aWYoaT4xKXtpZihzPj0wKXJldHVybjtsZXQgZD1zKnM7aWYoZj1pLTEsdT1hLm1hZ25pdHVkZVNxdWFyZWQociksYz11KmYsZDxjKXJldHVybjtpZihkPmMpe2w9cypzLWMscD0tcytNYXRoLnNxcnQobCk7bGV0IF89cC91LGc9Zi9wO3JldHVybiBfPGc/bmV3IFFyKF8sZyk6e3N0YXJ0Omcsc3RvcDpffX1sZXQgbT1NYXRoLnNxcnQoZi91KTtyZXR1cm4gbmV3IFFyKG0sbSl9ZWxzZSBpZihpPDEpcmV0dXJuIGY9aS0xLHU9YS5tYWduaXR1ZGVTcXVhcmVkKHIpLGM9dSpmLGw9cypzLWMscD0tcytNYXRoLnNxcnQobCksbmV3IFFyKDAscC91KTtpZihzPDApcmV0dXJuIHU9YS5tYWduaXR1ZGVTcXVhcmVkKHIpLG5ldyBRcigwLC1zL3UpfTtnbi5xdWFkcmF0aWNWZWN0b3JFeHByZXNzaW9uPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9bypvLHM9cipyLGY9KHRbWi5DT0xVTU4xUk9XMV0tdFtaLkNPTFVNTjJST1cyXSkqcyx1PXIqKG8qSnModFtaLkNPTFVNTjFST1cwXSx0W1ouQ09MVU1OMFJPVzFdLFAuRVBTSUxPTjE1KStlLnkpLGM9dFtaLkNPTFVNTjBST1cwXSppK3RbWi5DT0xVTU4yUk9XMl0qcytvKmUueCtuLGw9cypKcyh0W1ouQ09MVU1OMlJPVzFdLHRbWi5DT0xVTU4xUk9XMl0sUC5FUFNJTE9OMTUpLHA9cioobypKcyh0W1ouQ09MVU1OMlJPVzBdLHRbWi5DT0xVTU4wUk9XMl0pK2UueiksZCxtPVtdO2lmKHA9PT0wJiZsPT09MCl7aWYoZD1nci5jb21wdXRlUmVhbFJvb3RzKGYsdSxjKSxkLmxlbmd0aD09PTApcmV0dXJuIG07bGV0IEY9ZFswXSxJPU1hdGguc3FydChNYXRoLm1heCgxLUYqRiwwKSk7aWYobS5wdXNoKG5ldyBhKG8scipGLHIqLUkpKSxtLnB1c2gobmV3IGEobyxyKkYscipJKSksZC5sZW5ndGg9PT0yKXtsZXQgdj1kWzFdLEI9TWF0aC5zcXJ0KE1hdGgubWF4KDEtdip2LDApKTttLnB1c2gobmV3IGEobyxyKnYsciotQikpLG0ucHVzaChuZXcgYShvLHIqdixyKkIpKX1yZXR1cm4gbX1sZXQgXz1wKnAsZz1sKmwsYj1mKmYsVD1wKmwsTz1iK2csRT0yKih1KmYrVCksdz0yKmMqZit1KnUtZytfLEM9MiooYyp1LVQpLE09YypjLV87aWYoTz09PTAmJkU9PT0wJiZ3PT09MCYmQz09PTApcmV0dXJuIG07ZD1TYi5jb21wdXRlUmVhbFJvb3RzKE8sRSx3LEMsTSk7bGV0IE49ZC5sZW5ndGg7aWYoTj09PTApcmV0dXJuIG07Zm9yKGxldCBGPTA7RjxOOysrRil7bGV0IEk9ZFtGXSx2PUkqSSxCPU1hdGgubWF4KDEtdiwwKSxBPU1hdGguc3FydChCKSxTO1Auc2lnbihmKT09PVAuc2lnbihjKT9TPUpzKGYqditjLHUqSSxQLkVQU0lMT04xMik6UC5zaWduKGMpPT09UC5zaWduKHUqSSk/Uz1KcyhmKnYsdSpJK2MsUC5FUFNJTE9OMTIpOlM9SnMoZip2K3UqSSxjLFAuRVBTSUxPTjEyKTtsZXQgeD1KcyhsKkkscCxQLkVQU0lMT04xNSksRD1TKng7RDwwP20ucHVzaChuZXcgYShvLHIqSSxyKkEpKTpEPjA/bS5wdXNoKG5ldyBhKG8scipJLHIqLUEpKTpBIT09MD8obS5wdXNoKG5ldyBhKG8scipJLHIqLUEpKSxtLnB1c2gobmV3IGEobyxyKkkscipBKSksKytGKTptLnB1c2gobmV3IGEobyxyKkkscipBKSl9cmV0dXJuIG19O3poPW5ldyBhLE1iPW5ldyBhLE5iPW5ldyBhLGtwPW5ldyBhLEVQPW5ldyBhLFJQPW5ldyBaLFNQPW5ldyBaLENQPW5ldyBaLHhQPW5ldyBaLFBQPW5ldyBaLEliPW5ldyBaLHZiPW5ldyBaLEZiPW5ldyBhLE1QPW5ldyBhLE5QPW5ldyBzdDtnbi5ncmF6aW5nQWx0aXR1ZGVMb2NhdGlvbj1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJyYXkgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoImVsbGlwc29pZCBpcyByZXF1aXJlZC4iKTtsZXQgbj10Lm9yaWdpbixvPXQuZGlyZWN0aW9uO2lmKCFhLmVxdWFscyhuLGEuWkVSTykpe2xldCBNPWUuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKG4semgpO2lmKGEuZG90KG8sTSk+PTApcmV0dXJuIG59bGV0IHI9aCh0aGlzLnJheUVsbGlwc29pZCh0LGUpKSxpPWUudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKG8semgpLHM9YS5ub3JtYWxpemUoaSxpKSxmPWEubW9zdE9ydGhvZ29uYWxBeGlzKGksa3ApLHU9YS5ub3JtYWxpemUoYS5jcm9zcyhmLHMsTWIpLE1iKSxjPWEubm9ybWFsaXplKGEuY3Jvc3Mocyx1LE5iKSxOYiksbD1SUDtsWzBdPXMueCxsWzFdPXMueSxsWzJdPXMueixsWzNdPXUueCxsWzRdPXUueSxsWzVdPXUueixsWzZdPWMueCxsWzddPWMueSxsWzhdPWMuejtsZXQgcD1aLnRyYW5zcG9zZShsLFNQKSxkPVouZnJvbVNjYWxlKGUucmFkaWksQ1ApLG09Wi5mcm9tU2NhbGUoZS5vbmVPdmVyUmFkaWkseFApLF89UFA7X1swXT0wLF9bMV09LW8ueixfWzJdPW8ueSxfWzNdPW8ueixfWzRdPTAsX1s1XT0tby54LF9bNl09LW8ueSxfWzddPW8ueCxfWzhdPTA7bGV0IGc9Wi5tdWx0aXBseShaLm11bHRpcGx5KHAsbSxJYiksXyxJYiksYj1aLm11bHRpcGx5KFoubXVsdGlwbHkoZyxkLHZiKSxsLHZiKSxUPVoubXVsdGlwbHlCeVZlY3RvcihnLG4sRVApLE89Z24ucXVhZHJhdGljVmVjdG9yRXhwcmVzc2lvbihiLGEubmVnYXRlKFQsemgpLDAsMCwxKSxFLHcsQz1PLmxlbmd0aDtpZihDPjApe2xldCBNPWEuY2xvbmUoYS5aRVJPLE1QKSxOPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IobGV0IEk9MDtJPEM7KytJKXtFPVoubXVsdGlwbHlCeVZlY3RvcihkLFoubXVsdGlwbHlCeVZlY3RvcihsLE9bSV0sRmIpLEZiKTtsZXQgdj1hLm5vcm1hbGl6ZShhLnN1YnRyYWN0KEUsbixrcCksa3ApLEI9YS5kb3QodixvKTtCPk4mJihOPUIsTT1hLmNsb25lKEUsTSkpfWxldCBGPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoTSxOUCk7cmV0dXJuIE49UC5jbGFtcChOLDAsMSksdz1hLm1hZ25pdHVkZShhLnN1YnRyYWN0KE0sbixrcCkpKk1hdGguc3FydCgxLU4qTiksdz1yPy13OncsRi5oZWlnaHQ9dyxlLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEYsbmV3IGEpfX07SVA9bmV3IGE7Z24ubGluZVNlZ21lbnRQbGFuZT1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiZW5kUG9pbnQwIGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJlbmRQb2ludDEgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEwoInBsYW5lIGlzIHJlcXVpcmVkLiIpO2gobyl8fChvPW5ldyBhKTtsZXQgcj1hLnN1YnRyYWN0KGUsdCxJUCksaT1uLm5vcm1hbCxzPWEuZG90KGkscik7aWYoTWF0aC5hYnMocyk8UC5FUFNJTE9ONilyZXR1cm47bGV0IGY9YS5kb3QoaSx0KSx1PS0obi5kaXN0YW5jZStmKS9zO2lmKCEodTwwfHx1PjEpKXJldHVybiBhLm11bHRpcGx5QnlTY2FsYXIocix1LG8pLGEuYWRkKHQsbyxvKSxvfTtnbi50cmlhbmdsZVBsYW5lSW50ZXJzZWN0aW9uPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFoKHQpfHwhaChlKXx8IWgobil8fCFoKG8pKXRocm93IG5ldyBMKCJwMCwgcDEsIHAyLCBhbmQgcGxhbmUgYXJlIHJlcXVpcmVkLiIpO2xldCByPW8ubm9ybWFsLGk9by5kaXN0YW5jZSxzPWEuZG90KHIsdCkraTwwLGY9YS5kb3QocixlKStpPDAsdT1hLmRvdChyLG4pK2k8MCxjPTA7Yys9cz8xOjAsYys9Zj8xOjAsYys9dT8xOjA7bGV0IGwscDtpZigoYz09PTF8fGM9PT0yKSYmKGw9bmV3IGEscD1uZXcgYSksYz09PTEpe2lmKHMpcmV0dXJuIGduLmxpbmVTZWdtZW50UGxhbmUodCxlLG8sbCksZ24ubGluZVNlZ21lbnRQbGFuZSh0LG4sbyxwKSx7cG9zaXRpb25zOlt0LGUsbixsLHBdLGluZGljZXM6WzAsMyw0LDEsMiw0LDEsNCwzXX07aWYoZilyZXR1cm4gZ24ubGluZVNlZ21lbnRQbGFuZShlLG4sbyxsKSxnbi5saW5lU2VnbWVudFBsYW5lKGUsdCxvLHApLHtwb3NpdGlvbnM6W3QsZSxuLGwscF0saW5kaWNlczpbMSwzLDQsMiwwLDQsMiw0LDNdfTtpZih1KXJldHVybiBnbi5saW5lU2VnbWVudFBsYW5lKG4sdCxvLGwpLGduLmxpbmVTZWdtZW50UGxhbmUobixlLG8scCkse3Bvc2l0aW9uczpbdCxlLG4sbCxwXSxpbmRpY2VzOlsyLDMsNCwwLDEsNCwwLDQsM119fWVsc2UgaWYoYz09PTIpaWYocylpZihmKXtpZighdSlyZXR1cm4gZ24ubGluZVNlZ21lbnRQbGFuZSh0LG4sbyxsKSxnbi5saW5lU2VnbWVudFBsYW5lKGUsbixvLHApLHtwb3NpdGlvbnM6W3QsZSxuLGwscF0saW5kaWNlczpbMCwxLDQsMCw0LDMsMiwzLDRdfX1lbHNlIHJldHVybiBnbi5saW5lU2VnbWVudFBsYW5lKG4sZSxvLGwpLGduLmxpbmVTZWdtZW50UGxhbmUodCxlLG8scCkse3Bvc2l0aW9uczpbdCxlLG4sbCxwXSxpbmRpY2VzOlsyLDAsNCwyLDQsMywxLDMsNF19O2Vsc2UgcmV0dXJuIGduLmxpbmVTZWdtZW50UGxhbmUoZSx0LG8sbCksZ24ubGluZVNlZ21lbnRQbGFuZShuLHQsbyxwKSx7cG9zaXRpb25zOlt0LGUsbixsLHBdLGluZGljZXM6WzEsMiw0LDEsNCwzLDAsMyw0XX19O2hvPWdufSk7ZnVuY3Rpb24gZW8odCxlKXtpZih5LnR5cGVPZi5vYmplY3QoIm5vcm1hbCIsdCksIVAuZXF1YWxzRXBzaWxvbihhLm1hZ25pdHVkZSh0KSwxLFAuRVBTSUxPTjYpKXRocm93IG5ldyBMKCJub3JtYWwgbXVzdCBiZSBub3JtYWxpemVkLiIpO3kudHlwZU9mLm51bWJlcigiZGlzdGFuY2UiLGUpLHRoaXMubm9ybWFsPWEuY2xvbmUodCksdGhpcy5kaXN0YW5jZT1lfXZhciB2UCxGUCxMUCxEUCxCUCxvbixmcz0kKCgpPT57THQoKTtocigpO1d0KCk7YXQoKTtqdCgpO0t0KCk7VW4oKTtlby5mcm9tUG9pbnROb3JtYWw9ZnVuY3Rpb24odCxlLG4pe2lmKHkudHlwZU9mLm9iamVjdCgicG9pbnQiLHQpLHkudHlwZU9mLm9iamVjdCgibm9ybWFsIixlKSwhUC5lcXVhbHNFcHNpbG9uKGEubWFnbml0dWRlKGUpLDEsUC5FUFNJTE9ONikpdGhyb3cgbmV3IEwoIm5vcm1hbCBtdXN0IGJlIG5vcm1hbGl6ZWQuIik7bGV0IG89LWEuZG90KGUsdCk7cmV0dXJuIGgobik/KGEuY2xvbmUoZSxuLm5vcm1hbCksbi5kaXN0YW5jZT1vLG4pOm5ldyBlbyhlLG8pfTt2UD1uZXcgYTtlby5mcm9tQ2FydGVzaWFuND1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY29lZmZpY2llbnRzIix0KTtsZXQgbj1hLmZyb21DYXJ0ZXNpYW40KHQsdlApLG89dC53O2lmKCFQLmVxdWFsc0Vwc2lsb24oYS5tYWduaXR1ZGUobiksMSxQLkVQU0lMT042KSl0aHJvdyBuZXcgTCgibm9ybWFsIG11c3QgYmUgbm9ybWFsaXplZC4iKTtyZXR1cm4gaChlKT8oYS5jbG9uZShuLGUubm9ybWFsKSxlLmRpc3RhbmNlPW8sZSk6bmV3IGVvKG4sbyl9O2VvLmdldFBvaW50RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJwbGFuZSIsdCkseS50eXBlT2Yub2JqZWN0KCJwb2ludCIsZSksYS5kb3QodC5ub3JtYWwsZSkrdC5kaXN0YW5jZX07RlA9bmV3IGE7ZW8ucHJvamVjdFBvaW50T250b1BsYW5lPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInBsYW5lIix0KSx5LnR5cGVPZi5vYmplY3QoInBvaW50IixlKSxoKG4pfHwobj1uZXcgYSk7bGV0IG89ZW8uZ2V0UG9pbnREaXN0YW5jZSh0LGUpLHI9YS5tdWx0aXBseUJ5U2NhbGFyKHQubm9ybWFsLG8sRlApO3JldHVybiBhLnN1YnRyYWN0KGUscixuKX07TFA9bmV3IGl0LERQPW5ldyBtZSxCUD1uZXcgYTtlby50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgicGxhbmUiLHQpLHkudHlwZU9mLm9iamVjdCgidHJhbnNmb3JtIixlKTtsZXQgbz10Lm5vcm1hbCxyPXQuZGlzdGFuY2UsaT1pdC5pbnZlcnNlVHJhbnNwb3NlKGUsTFApLHM9bWUuZnJvbUVsZW1lbnRzKG8ueCxvLnksby56LHIsRFApO3M9aXQubXVsdGlwbHlCeVZlY3RvcihpLHMscyk7bGV0IGY9YS5mcm9tQ2FydGVzaWFuNChzLEJQKTtyZXR1cm4gcz1tZS5kaXZpZGVCeVNjYWxhcihzLGEubWFnbml0dWRlKGYpLHMpLGVvLmZyb21DYXJ0ZXNpYW40KHMsbil9O2VvLmNsb25lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicGxhbmUiLHQpLGgoZSk/KGEuY2xvbmUodC5ub3JtYWwsZS5ub3JtYWwpLGUuZGlzdGFuY2U9dC5kaXN0YW5jZSxlKTpuZXcgZW8odC5ub3JtYWwsdC5kaXN0YW5jZSl9O2VvLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHQuZGlzdGFuY2U9PT1lLmRpc3RhbmNlJiZhLmVxdWFscyh0Lm5vcm1hbCxlLm5vcm1hbCl9O2VvLk9SSUdJTl9YWV9QTEFORT1PYmplY3QuZnJlZXplKG5ldyBlbyhhLlVOSVRfWiwwKSk7ZW8uT1JJR0lOX1laX1BMQU5FPU9iamVjdC5mcmVlemUobmV3IGVvKGEuVU5JVF9YLDApKTtlby5PUklHSU5fWlhfUExBTkU9T2JqZWN0LmZyZWV6ZShuZXcgZW8oYS5VTklUX1ksMCkpO29uPWVvfSk7dmFyIGpoLEJiLFViPSQoKCk9Pnt5ZSgpO2F0KCk7anQoKTtqaD17fTtqaC5jYWxjdWxhdGVBQ01SPWZ1bmN0aW9uKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBlPXQuaW5kaWNlcyxuPXQubWF4aW11bUluZGV4LG89dC5jYWNoZVNpemU/PzI0O2lmKCFoKGUpKXRocm93IG5ldyBMKCJpbmRpY2VzIGlzIHJlcXVpcmVkLiIpO2xldCByPWUubGVuZ3RoO2lmKHI8M3x8ciUzIT09MCl0aHJvdyBuZXcgTCgiaW5kaWNlcyBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRocmVlLiIpO2lmKG48PTApdGhyb3cgbmV3IEwoIm1heGltdW1JbmRleCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpO2lmKG88Myl0aHJvdyBuZXcgTCgiY2FjaGVTaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIHR3by4iKTtpZighaChuKSl7bj0wO2xldCBmPTAsdT1lW2ZdO2Zvcig7ZjxyOyl1Pm4mJihuPXUpLCsrZix1PWVbZl19bGV0IGk9W107Zm9yKGxldCBmPTA7ZjxuKzE7ZisrKWlbZl09MDtsZXQgcz1vKzE7Zm9yKGxldCBmPTA7ZjxyOysrZilzLWlbZVtmXV0+byYmKGlbZVtmXV09cywrK3MpO3JldHVybihzLW8rMSkvKHIvMyl9O2poLnRpcHNpZnk9ZnVuY3Rpb24odCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5pbmRpY2VzLG49dC5tYXhpbXVtSW5kZXgsbz10LmNhY2hlU2l6ZT8/MjQscjtmdW5jdGlvbiBpKEIsQSxTLHgpe2Zvcig7QS5sZW5ndGg+PTE7KXtsZXQgRD1BW0EubGVuZ3RoLTFdO2lmKEEuc3BsaWNlKEEubGVuZ3RoLTEsMSksQltEXS5udW1MaXZlVHJpYW5nbGVzPjApcmV0dXJuIER9Zm9yKDtyPHg7KXtpZihCW3JdLm51bUxpdmVUcmlhbmdsZXM+MClyZXR1cm4rK3Isci0xOysrcn1yZXR1cm4tMX1mdW5jdGlvbiBzKEIsQSxTLHgsRCx6LGope2xldCBrPS0xLHEsVz0tMSxSPTA7Zm9yKDtSPFMubGVuZ3RoOyl7bGV0IG50PVNbUl07eFtudF0ubnVtTGl2ZVRyaWFuZ2xlcyYmKHE9MCxELXhbbnRdLnRpbWVTdGFtcCsyKnhbbnRdLm51bUxpdmVUcmlhbmdsZXM8PUEmJihxPUQteFtudF0udGltZVN0YW1wKSwocT5XfHxXPT09LTEpJiYoVz1xLGs9bnQpKSwrK1J9cmV0dXJuIGs9PT0tMT9pKHgseixCLGopOmt9aWYoIWgoZSkpdGhyb3cgbmV3IEwoImluZGljZXMgaXMgcmVxdWlyZWQuIik7bGV0IGY9ZS5sZW5ndGg7aWYoZjwzfHxmJTMhPT0wKXRocm93IG5ldyBMKCJpbmRpY2VzIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhyZWUuIik7aWYobjw9MCl0aHJvdyBuZXcgTCgibWF4aW11bUluZGV4IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYobzwzKXRocm93IG5ldyBMKCJjYWNoZVNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gdHdvLiIpO2xldCB1PTAsYz0wLGw9ZVtjXSxwPWY7aWYoaChuKSl1PW4rMTtlbHNle2Zvcig7YzxwOylsPnUmJih1PWwpLCsrYyxsPWVbY107aWYodT09PS0xKXJldHVybiAwOysrdX1sZXQgZD1bXSxtO2ZvcihtPTA7bTx1O20rKylkW21dPXtudW1MaXZlVHJpYW5nbGVzOjAsdGltZVN0YW1wOjAsdmVydGV4VHJpYW5nbGVzOltdfTtjPTA7bGV0IF89MDtmb3IoO2M8cDspZFtlW2NdXS52ZXJ0ZXhUcmlhbmdsZXMucHVzaChfKSwrK2RbZVtjXV0ubnVtTGl2ZVRyaWFuZ2xlcyxkW2VbYysxXV0udmVydGV4VHJpYW5nbGVzLnB1c2goXyksKytkW2VbYysxXV0ubnVtTGl2ZVRyaWFuZ2xlcyxkW2VbYysyXV0udmVydGV4VHJpYW5nbGVzLnB1c2goXyksKytkW2VbYysyXV0ubnVtTGl2ZVRyaWFuZ2xlcywrK18sYys9MztsZXQgZz0wLGI9bysxO3I9MTtsZXQgVD1bXSxPPVtdLEUsdyxDPTAsTT1bXSxOPWYvMyxGPVtdO2ZvcihtPTA7bTxOO20rKylGW21dPSExO2xldCBJLHY7Zm9yKDtnIT09LTE7KXtUPVtdLHc9ZFtnXSx2PXcudmVydGV4VHJpYW5nbGVzLmxlbmd0aDtmb3IobGV0IEI9MDtCPHY7KytCKWlmKF89dy52ZXJ0ZXhUcmlhbmdsZXNbQl0sIUZbX10pe0ZbX109ITAsYz1fK18rXztmb3IobGV0IEE9MDtBPDM7KytBKUk9ZVtjXSxULnB1c2goSSksTy5wdXNoKEkpLE1bQ109SSwrK0MsRT1kW0ldLC0tRS5udW1MaXZlVHJpYW5nbGVzLGItRS50aW1lU3RhbXA+byYmKEUudGltZVN0YW1wPWIsKytiKSwrK2N9Zz1zKGUsbyxULGQsYixPLHUpfXJldHVybiBNfTtCYj1qaH0pO2Z1bmN0aW9uIEtwKHQsZSxuLG8scil7dFtlKytdPW4sdFtlKytdPW8sdFtlKytdPW8sdFtlKytdPXIsdFtlKytdPXIsdFtlXT1ufWZ1bmN0aW9uIFVQKHQpe2xldCBlPXQubGVuZ3RoLG49ZS8zKjYsbz1GdC5jcmVhdGVUeXBlZEFycmF5KGUsbikscj0wO2ZvcihsZXQgaT0wO2k8ZTtpKz0zLHIrPTYpS3AobyxyLHRbaV0sdFtpKzFdLHRbaSsyXSk7cmV0dXJuIG99ZnVuY3Rpb24ga1AodCl7bGV0IGU9dC5sZW5ndGg7aWYoZT49Myl7bGV0IG49KGUtMikqNixvPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoZSxuKTtLcChvLDAsdFswXSx0WzFdLHRbMl0pO2xldCByPTY7Zm9yKGxldCBpPTM7aTxlOysraSxyKz02KUtwKG8scix0W2ktMV0sdFtpXSx0W2ktMl0pO3JldHVybiBvfXJldHVybiBuZXcgVWludDE2QXJyYXl9ZnVuY3Rpb24gR1AodCl7aWYodC5sZW5ndGg+MCl7bGV0IGU9dC5sZW5ndGgtMSxuPShlLTEpKjYsbz1GdC5jcmVhdGVUeXBlZEFycmF5KGUsbikscj10WzBdLGk9MDtmb3IobGV0IHM9MTtzPGU7KytzLGkrPTYpS3AobyxpLHIsdFtzXSx0W3MrMV0pO3JldHVybiBvfXJldHVybiBuZXcgVWludDE2QXJyYXl9ZnVuY3Rpb24ga2IodCl7bGV0IGU9e307Zm9yKGxldCBuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSYmaCh0W25dKSYmaCh0W25dLnZhbHVlcykpe2xldCBvPXRbbl07ZVtuXT1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOm8uY29tcG9uZW50RGF0YXR5cGUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTpvLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsbm9ybWFsaXplOm8ubm9ybWFsaXplLHZhbHVlczpbXX0pfXJldHVybiBlfWZ1bmN0aW9uIFZQKHQsZSxuKXtmb3IobGV0IG8gaW4gZSlpZihlLmhhc093blByb3BlcnR5KG8pJiZoKGVbb10pJiZoKGVbb10udmFsdWVzKSl7bGV0IHI9ZVtvXTtmb3IobGV0IGk9MDtpPHIuY29tcG9uZW50c1BlckF0dHJpYnV0ZTsrK2kpdFtvXS52YWx1ZXMucHVzaChyLnZhbHVlc1tuKnIuY29tcG9uZW50c1BlckF0dHJpYnV0ZStpXSl9fWZ1bmN0aW9uIHFoKHQsZSl7aWYoaChlKSl7bGV0IG49ZS52YWx1ZXMsbz1uLmxlbmd0aDtmb3IobGV0IHI9MDtyPG87cis9MylhLnVucGFjayhuLHIsa3IpLGl0Lm11bHRpcGx5QnlQb2ludCh0LGtyLGtyKSxhLnBhY2soa3IsbixyKX19ZnVuY3Rpb24gS2godCxlKXtpZihoKGUpKXtsZXQgbj1lLnZhbHVlcyxvPW4ubGVuZ3RoO2ZvcihsZXQgcj0wO3I8bztyKz0zKWEudW5wYWNrKG4scixrciksWi5tdWx0aXBseUJ5VmVjdG9yKHQsa3Isa3IpLGtyPWEubm9ybWFsaXplKGtyLGtyKSxhLnBhY2soa3IsbixyKX19ZnVuY3Rpb24galAodCxlKXtsZXQgbj10Lmxlbmd0aCxvPXt9LHI9dFswXVtlXS5hdHRyaWJ1dGVzLGk7Zm9yKGkgaW4gcilpZihyLmhhc093blByb3BlcnR5KGkpJiZoKHJbaV0pJiZoKHJbaV0udmFsdWVzKSl7bGV0IHM9cltpXSxmPXMudmFsdWVzLmxlbmd0aCx1PSEwO2ZvcihsZXQgYz0xO2M8bjsrK2Mpe2xldCBsPXRbY11bZV0uYXR0cmlidXRlc1tpXTtpZighaChsKXx8cy5jb21wb25lbnREYXRhdHlwZSE9PWwuY29tcG9uZW50RGF0YXR5cGV8fHMuY29tcG9uZW50c1BlckF0dHJpYnV0ZSE9PWwuY29tcG9uZW50c1BlckF0dHJpYnV0ZXx8cy5ub3JtYWxpemUhPT1sLm5vcm1hbGl6ZSl7dT0hMTticmVha31mKz1sLnZhbHVlcy5sZW5ndGh9dSYmKG9baV09bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpzLmNvbXBvbmVudERhdGF0eXBlLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6cy5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5vcm1hbGl6ZTpzLm5vcm1hbGl6ZSx2YWx1ZXM6ZXQuY3JlYXRlVHlwZWRBcnJheShzLmNvbXBvbmVudERhdGF0eXBlLGYpfSkpfXJldHVybiBvfWZ1bmN0aW9uIFdoKHQsZSl7bGV0IG49dC5sZW5ndGgsbyxyLGkscyxmPXRbMF0ubW9kZWxNYXRyaXgsdT1oKHRbMF1bZV0uaW5kaWNlcyksYz10WzBdW2VdLnByaW1pdGl2ZVR5cGU7Zm9yKHI9MTtyPG47KytyKXtpZighaXQuZXF1YWxzKHRbcl0ubW9kZWxNYXRyaXgsZikpdGhyb3cgbmV3IEwoIkFsbCBpbnN0YW5jZXMgbXVzdCBoYXZlIHRoZSBzYW1lIG1vZGVsTWF0cml4LiIpO2lmKGgodFtyXVtlXS5pbmRpY2VzKSE9PXUpdGhyb3cgbmV3IEwoIkFsbCBpbnN0YW5jZSBnZW9tZXRyaWVzIG11c3QgaGF2ZSBhbiBpbmRpY2VzIG9yIG5vdCBoYXZlIG9uZS4iKTtpZih0W3JdW2VdLnByaW1pdGl2ZVR5cGUhPT1jKXRocm93IG5ldyBMKCJBbGwgaW5zdGFuY2UgZ2VvbWV0cmllcyBtdXN0IGhhdmUgdGhlIHNhbWUgcHJpbWl0aXZlVHlwZS4iKX1sZXQgbD1qUCh0LGUpLHAsZCxtO2ZvcihvIGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eShvKSlmb3IocD1sW29dLnZhbHVlcyxzPTAscj0wO3I8bjsrK3IpZm9yKGQ9dFtyXVtlXS5hdHRyaWJ1dGVzW29dLnZhbHVlcyxtPWQubGVuZ3RoLGk9MDtpPG07KytpKXBbcysrXT1kW2ldO2xldCBfO2lmKHUpe2xldCBPPTA7Zm9yKHI9MDtyPG47KytyKU8rPXRbcl1bZV0uaW5kaWNlcy5sZW5ndGg7bGV0IEU9QnQuY29tcHV0ZU51bWJlck9mVmVydGljZXMobmV3IEJ0KHthdHRyaWJ1dGVzOmwscHJpbWl0aXZlVHlwZTpEdC5QT0lOVFN9KSksdz1GdC5jcmVhdGVUeXBlZEFycmF5KEUsTyksQz0wLE09MDtmb3Iocj0wO3I8bjsrK3Ipe2xldCBOPXRbcl1bZV0uaW5kaWNlcyxGPU4ubGVuZ3RoO2ZvcihzPTA7czxGOysrcyl3W0MrK109TStOW3NdO00rPUJ0LmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKHRbcl1bZV0pfV89d31sZXQgZz1uZXcgYSxiPTAsVDtmb3Iocj0wO3I8bjsrK3Ipe2lmKFQ9dFtyXVtlXS5ib3VuZGluZ1NwaGVyZSwhaChUKSl7Zz12b2lkIDA7YnJlYWt9YS5hZGQoVC5jZW50ZXIsZyxnKX1pZihoKGcpKWZvcihhLmRpdmlkZUJ5U2NhbGFyKGcsbixnKSxyPTA7cjxuOysrcil7VD10W3JdW2VdLmJvdW5kaW5nU3BoZXJlO2xldCBPPWEubWFnbml0dWRlKGEuc3VidHJhY3QoVC5jZW50ZXIsZyxIUCkpK1QucmFkaXVzO08+YiYmKGI9Tyl9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpsLGluZGljZXM6XyxwcmltaXRpdmVUeXBlOmMsYm91bmRpbmdTcGhlcmU6aChnKT9uZXcgZ3QoZyxiKTp2b2lkIDB9KX1mdW5jdGlvbiBXUCh0KXtpZihoKHQuaW5kaWNlcykpcmV0dXJuIHQ7bGV0IGU9QnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7aWYoZTwzKXRocm93IG5ldyBMKCJUaGUgbnVtYmVyIG9mIHZlcnRpY2VzIG11c3QgYmUgYXQgbGVhc3QgdGhyZWUuIik7aWYoZSUzIT09MCl0aHJvdyBuZXcgTCgiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhyZWUuIik7bGV0IG49RnQuY3JlYXRlVHlwZWRBcnJheShlLGUpO2ZvcihsZXQgbz0wO288ZTsrK28pbltvXT1vO3JldHVybiB0LmluZGljZXM9bix0fWZ1bmN0aW9uIFhQKHQpe2xldCBlPUJ0LmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKHQpO2lmKGU8Myl0aHJvdyBuZXcgTCgiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGF0IGxlYXN0IHRocmVlLiIpO2xldCBuPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoZSwoZS0yKSozKTtuWzBdPTEsblsxXT0wLG5bMl09MjtsZXQgbz0zO2ZvcihsZXQgcj0zO3I8ZTsrK3IpbltvKytdPXItMSxuW28rK109MCxuW28rK109cjtyZXR1cm4gdC5pbmRpY2VzPW4sdC5wcmltaXRpdmVUeXBlPUR0LlRSSUFOR0xFUyx0fWZ1bmN0aW9uIFlQKHQpe2xldCBlPUJ0LmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKHQpO2lmKGU8Myl0aHJvdyBuZXcgTCgiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGF0IGxlYXN0IDMuIik7bGV0IG49RnQuY3JlYXRlVHlwZWRBcnJheShlLChlLTIpKjMpO25bMF09MCxuWzFdPTEsblsyXT0yLGU+MyYmKG5bM109MCxuWzRdPTIsbls1XT0zKTtsZXQgbz02O2ZvcihsZXQgcj0zO3I8ZS0xO3IrPTIpbltvKytdPXIsbltvKytdPXItMSxuW28rK109cisxLHIrMjxlJiYobltvKytdPXIsbltvKytdPXIrMSxuW28rK109cisyKTtyZXR1cm4gdC5pbmRpY2VzPW4sdC5wcmltaXRpdmVUeXBlPUR0LlRSSUFOR0xFUyx0fWZ1bmN0aW9uICRQKHQpe2lmKGgodC5pbmRpY2VzKSlyZXR1cm4gdDtsZXQgZT1CdC5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyh0KTtpZihlPDIpdGhyb3cgbmV3IEwoIlRoZSBudW1iZXIgb2YgdmVydGljZXMgbXVzdCBiZSBhdCBsZWFzdCB0d28uIik7aWYoZSUyIT09MCl0aHJvdyBuZXcgTCgiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMi4iKTtsZXQgbj1GdC5jcmVhdGVUeXBlZEFycmF5KGUsZSk7Zm9yKGxldCBvPTA7bzxlOysrbyluW29dPW87cmV0dXJuIHQuaW5kaWNlcz1uLHR9ZnVuY3Rpb24gWlAodCl7bGV0IGU9QnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7aWYoZTwyKXRocm93IG5ldyBMKCJUaGUgbnVtYmVyIG9mIHZlcnRpY2VzIG11c3QgYmUgYXQgbGVhc3QgdHdvLiIpO2xldCBuPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoZSwoZS0xKSoyKTtuWzBdPTAsblsxXT0xO2xldCBvPTI7Zm9yKGxldCByPTI7cjxlOysrciluW28rK109ci0xLG5bbysrXT1yO3JldHVybiB0LmluZGljZXM9bix0LnByaW1pdGl2ZVR5cGU9RHQuTElORVMsdH1mdW5jdGlvbiBRUCh0KXtsZXQgZT1CdC5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyh0KTtpZihlPDIpdGhyb3cgbmV3IEwoIlRoZSBudW1iZXIgb2YgdmVydGljZXMgbXVzdCBiZSBhdCBsZWFzdCB0d28uIik7bGV0IG49RnQuY3JlYXRlVHlwZWRBcnJheShlLGUqMik7blswXT0wLG5bMV09MTtsZXQgbz0yO2ZvcihsZXQgcj0yO3I8ZTsrK3IpbltvKytdPXItMSxuW28rK109cjtyZXR1cm4gbltvKytdPWUtMSxuW29dPTAsdC5pbmRpY2VzPW4sdC5wcmltaXRpdmVUeXBlPUR0LkxJTkVTLHR9ZnVuY3Rpb24gSlAodCl7c3dpdGNoKHQucHJpbWl0aXZlVHlwZSl7Y2FzZSBEdC5UUklBTkdMRV9GQU46cmV0dXJuIFhQKHQpO2Nhc2UgRHQuVFJJQU5HTEVfU1RSSVA6cmV0dXJuIFlQKHQpO2Nhc2UgRHQuVFJJQU5HTEVTOnJldHVybiBXUCh0KTtjYXNlIER0LkxJTkVfU1RSSVA6cmV0dXJuIFpQKHQpO2Nhc2UgRHQuTElORV9MT09QOnJldHVybiBRUCh0KTtjYXNlIER0LkxJTkVTOnJldHVybiAkUCh0KX1yZXR1cm4gdH1mdW5jdGlvbiB1cyh0LGUpe01hdGguYWJzKHQueSk8UC5FUFNJTE9ONiYmKGU/dC55PS1QLkVQU0lMT042OnQueT1QLkVQU0lMT042KX1mdW5jdGlvbiB0TSh0LGUsbil7aWYodC55IT09MCYmZS55IT09MCYmbi55IT09MCl7dXModCx0Lnk8MCksdXMoZSxlLnk8MCksdXMobixuLnk8MCk7cmV0dXJufWxldCBvPU1hdGguYWJzKHQueSkscj1NYXRoLmFicyhlLnkpLGk9TWF0aC5hYnMobi55KSxzO28+cj9vPmk/cz1QLnNpZ24odC55KTpzPVAuc2lnbihuLnkpOnI+aT9zPVAuc2lnbihlLnkpOnM9UC5zaWduKG4ueSk7bGV0IGY9czwwO3VzKHQsZiksdXMoZSxmKSx1cyhuLGYpfWZ1bmN0aW9uIGJyKHQsZSxuLG8pe2EuYWRkKHQsYS5tdWx0aXBseUJ5U2NhbGFyKGEuc3VidHJhY3QoZSx0LEhiKSx0LnkvKHQueS1lLnkpLEhiKSxuKSxhLmNsb25lKG4sbyksdXMobiwhMCksdXMobywhMSl9ZnVuY3Rpb24gZU0odCxlLG4pe2lmKHQueD49MHx8ZS54Pj0wfHxuLng+PTApcmV0dXJuO3RNKHQsZSxuKTtsZXQgbz10Lnk8MCxyPWUueTwwLGk9bi55PDAscz0wO3MrPW8/MTowLHMrPXI/MTowLHMrPWk/MTowO2xldCBmPVhoLmluZGljZXM7cz09PTE/KGZbMV09MyxmWzJdPTQsZls1XT02LGZbN109NixmWzhdPTUsbz8oYnIodCxlLGVjLG9jKSxicih0LG4sbmMscmMpLGZbMF09MCxmWzNdPTEsZls0XT0yLGZbNl09MSk6cj8oYnIoZSxuLGVjLG9jKSxicihlLHQsbmMscmMpLGZbMF09MSxmWzNdPTIsZls0XT0wLGZbNl09Mik6aSYmKGJyKG4sdCxlYyxvYyksYnIobixlLG5jLHJjKSxmWzBdPTIsZlszXT0wLGZbNF09MSxmWzZdPTApKTpzPT09MiYmKGZbMl09NCxmWzRdPTQsZls1XT0zLGZbN109NSxmWzhdPTYsbz9yP2l8fChicihuLHQsZWMsb2MpLGJyKG4sZSxuYyxyYyksZlswXT0wLGZbMV09MSxmWzNdPTAsZls2XT0yKTooYnIoZSxuLGVjLG9jKSxicihlLHQsbmMscmMpLGZbMF09MixmWzFdPTAsZlszXT0yLGZbNl09MSk6KGJyKHQsZSxlYyxvYyksYnIodCxuLG5jLHJjKSxmWzBdPTEsZlsxXT0yLGZbM109MSxmWzZdPTApKTtsZXQgdT1YaC5wb3NpdGlvbnM7cmV0dXJuIHVbMF09dCx1WzFdPWUsdVsyXT1uLHUubGVuZ3RoPTMsKHM9PT0xfHxzPT09MikmJih1WzNdPWVjLHVbNF09bmMsdVs1XT1vYyx1WzZdPXJjLHUubGVuZ3RoPTcpLFhofWZ1bmN0aW9uIHFiKHQsZSl7bGV0IG49dC5hdHRyaWJ1dGVzO2lmKG4ucG9zaXRpb24udmFsdWVzLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgciBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkocikmJmgobltyXSkmJmgobltyXS52YWx1ZXMpKXtsZXQgaT1uW3JdO2kudmFsdWVzPWV0LmNyZWF0ZVR5cGVkQXJyYXkoaS5jb21wb25lbnREYXRhdHlwZSxpLnZhbHVlcyl9bGV0IG89QnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7cmV0dXJuIHQuaW5kaWNlcz1GdC5jcmVhdGVUeXBlZEFycmF5KG8sdC5pbmRpY2VzKSxlJiYodC5ib3VuZGluZ1NwaGVyZT1ndC5mcm9tVmVydGljZXMobi5wb3NpdGlvbi52YWx1ZXMpKSx0fWZ1bmN0aW9uIGlhKHQpe2xldCBlPXQuYXR0cmlidXRlcyxuPXt9O2ZvcihsZXQgbyBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobykmJmgoZVtvXSkmJmgoZVtvXS52YWx1ZXMpKXtsZXQgcj1lW29dO25bb109bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpyLmNvbXBvbmVudERhdGF0eXBlLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6ci5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5vcm1hbGl6ZTpyLm5vcm1hbGl6ZSx2YWx1ZXM6W119KX1yZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOm4saW5kaWNlczpbXSxwcmltaXRpdmVUeXBlOnQucHJpbWl0aXZlVHlwZX0pfWZ1bmN0aW9uIFFoKHQsZSxuKXtsZXQgbz1oKHQuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUpO2U9cWIoZSxvKSxuPXFiKG4sbyksaChuKSYmIWgoZSk/dC5nZW9tZXRyeT1uOiFoKG4pJiZoKGUpP3QuZ2VvbWV0cnk9ZToodC53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5PWUsdC5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5PW4sdC5nZW9tZXRyeT12b2lkIDApfWZ1bmN0aW9uIEpoKHQsZSl7bGV0IG49bmV3IHQsbz1uZXcgdCxyPW5ldyB0O3JldHVybiBmdW5jdGlvbihpLHMsZix1LGMsbCxwLGQpe2xldCBtPXQuZnJvbUFycmF5KGMsaSplLG4pLF89dC5mcm9tQXJyYXkoYyxzKmUsbyksZz10LmZyb21BcnJheShjLGYqZSxyKTt0Lm11bHRpcGx5QnlTY2FsYXIobSx1LngsbSksdC5tdWx0aXBseUJ5U2NhbGFyKF8sdS55LF8pLHQubXVsdGlwbHlCeVNjYWxhcihnLHUueixnKTtsZXQgYj10LmFkZChtLF8sbSk7dC5hZGQoYixnLGIpLGQmJnQubm9ybWFsaXplKGIsYiksdC5wYWNrKGIsbCxwKmUpfX1mdW5jdGlvbiBqcCh0LGUsbixvLHIsaSxzLGYsdSxjLGwscCxkLG0sXyxnKXtpZighaChpKSYmIWgocykmJiFoKGYpJiYhaCh1KSYmIWgoYykmJm09PT0wKXJldHVybjtsZXQgYj1hLmZyb21BcnJheShyLHQqMyxFZiksVD1hLmZyb21BcnJheShyLGUqMyxZaCksTz1hLmZyb21BcnJheShyLG4qMywkaCksRT13YihvLGIsVCxPLHJNKTtpZihoKEUpKXtpZihoKGkpJiZxcCh0LGUsbixFLGkscC5ub3JtYWwudmFsdWVzLGcsITApLGgoYykpe2xldCB3PWEuZnJvbUFycmF5KGMsdCozLEVmKSxDPWEuZnJvbUFycmF5KGMsZSozLFloKSxNPWEuZnJvbUFycmF5KGMsbiozLCRoKTthLm11bHRpcGx5QnlTY2FsYXIodyxFLngsdyksYS5tdWx0aXBseUJ5U2NhbGFyKEMsRS55LEMpLGEubXVsdGlwbHlCeVNjYWxhcihNLEUueixNKTtsZXQgTjshYS5lcXVhbHModyxhLlpFUk8pfHwhYS5lcXVhbHMoQyxhLlpFUk8pfHwhYS5lcXVhbHMoTSxhLlpFUk8pPyhOPWEuYWRkKHcsQyx3KSxhLmFkZChOLE0sTiksYS5ub3JtYWxpemUoTixOKSk6KE49RWYsTi54PTAsTi55PTAsTi56PTApLGEucGFjayhOLHAuZXh0cnVkZURpcmVjdGlvbi52YWx1ZXMsZyozKX1pZihoKGwpJiZvTSh0LGUsbixFLGwscC5hcHBseU9mZnNldC52YWx1ZXMsZyksaChzKSYmcXAodCxlLG4sRSxzLHAudGFuZ2VudC52YWx1ZXMsZywhMCksaChmKSYmcXAodCxlLG4sRSxmLHAuYml0YW5nZW50LnZhbHVlcyxnLCEwKSxoKHUpJiZaYih0LGUsbixFLHUscC5zdC52YWx1ZXMsZyksbT4wKWZvcihsZXQgdz0wO3c8bTt3Kyspe2xldCBDPWRbd107aU0odCxlLG4sRSxnLF9bQ10scFtDXSl9fX1mdW5jdGlvbiBpTSh0LGUsbixvLHIsaSxzKXtsZXQgZj1pLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsdT1pLnZhbHVlcyxjPXMudmFsdWVzO3N3aXRjaChmKXtjYXNlIDQ6bk0odCxlLG4sbyx1LGMsciwhMSk7YnJlYWs7Y2FzZSAzOnFwKHQsZSxuLG8sdSxjLHIsITEpO2JyZWFrO2Nhc2UgMjpaYih0LGUsbixvLHUsYyxyLCExKTticmVhaztkZWZhdWx0OmNbcl09dVt0XSpvLngrdVtlXSpvLnkrdVtuXSpvLnp9fWZ1bmN0aW9uIGlpKHQsZSxuLG8scixpKXtsZXQgcz10LnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMztpZihyIT09LTEpe2xldCBmPW9bcl0sdT1uW2ZdO3JldHVybiB1PT09LTE/KG5bZl09cyx0LnBvc2l0aW9uLnZhbHVlcy5wdXNoKGkueCxpLnksaS56KSxlLnB1c2gocykscyk6KGUucHVzaCh1KSx1KX1yZXR1cm4gdC5wb3NpdGlvbi52YWx1ZXMucHVzaChpLngsaS55LGkueiksZS5wdXNoKHMpLHN9ZnVuY3Rpb24gS2IodCl7bGV0IGU9dC5nZW9tZXRyeSxuPWUuYXR0cmlidXRlcyxvPW4ucG9zaXRpb24udmFsdWVzLHI9aChuLm5vcm1hbCk/bi5ub3JtYWwudmFsdWVzOnZvaWQgMCxpPWgobi5iaXRhbmdlbnQpP24uYml0YW5nZW50LnZhbHVlczp2b2lkIDAscz1oKG4udGFuZ2VudCk/bi50YW5nZW50LnZhbHVlczp2b2lkIDAsZj1oKG4uc3QpP24uc3QudmFsdWVzOnZvaWQgMCx1PWgobi5leHRydWRlRGlyZWN0aW9uKT9uLmV4dHJ1ZGVEaXJlY3Rpb24udmFsdWVzOnZvaWQgMCxjPWgobi5hcHBseU9mZnNldCk/bi5hcHBseU9mZnNldC52YWx1ZXM6dm9pZCAwLGw9ZS5pbmRpY2VzLHA9W107Zm9yKGxldCBOIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShOKSYmIXNNW05dJiZoKG5bTl0pJiZwLnB1c2goTik7bGV0IGQ9cC5sZW5ndGgsbT1pYShlKSxfPWlhKGUpLGcsYixULE8sRSx3PVtdO3cubGVuZ3RoPW8ubGVuZ3RoLzM7bGV0IEM9W107Zm9yKEMubGVuZ3RoPW8ubGVuZ3RoLzMsRT0wO0U8dy5sZW5ndGg7KytFKXdbRV09LTEsQ1tFXT0tMTtsZXQgTT1sLmxlbmd0aDtmb3IoRT0wO0U8TTtFKz0zKXtsZXQgTj1sW0VdLEY9bFtFKzFdLEk9bFtFKzJdLHY9YS5mcm9tQXJyYXkobyxOKjMpLEI9YS5mcm9tQXJyYXkobyxGKjMpLEE9YS5mcm9tQXJyYXkobyxJKjMpLFM9ZU0odixCLEEpO2lmKGgoUykmJlMucG9zaXRpb25zLmxlbmd0aD4zKXtsZXQgeD1TLnBvc2l0aW9ucyxEPVMuaW5kaWNlcyx6PUQubGVuZ3RoO2ZvcihsZXQgaj0wO2o8ejsrK2ope2xldCBrPURbal0scT14W2tdO3EueTwwPyhnPV8uYXR0cmlidXRlcyxiPV8uaW5kaWNlcyxUPXcpOihnPW0uYXR0cmlidXRlcyxiPW0uaW5kaWNlcyxUPUMpLE89aWkoZyxiLFQsbCxrPDM/RStrOi0xLHEpLGpwKE4sRixJLHEsbyxyLHMsaSxmLHUsYyxnLHAsZCxuLE8pfX1lbHNlIGgoUykmJih2PVMucG9zaXRpb25zWzBdLEI9Uy5wb3NpdGlvbnNbMV0sQT1TLnBvc2l0aW9uc1syXSksdi55PDA/KGc9Xy5hdHRyaWJ1dGVzLGI9Xy5pbmRpY2VzLFQ9dyk6KGc9bS5hdHRyaWJ1dGVzLGI9bS5pbmRpY2VzLFQ9QyksTz1paShnLGIsVCxsLEUsdiksanAoTixGLEksdixvLHIscyxpLGYsdSxjLGcscCxkLG4sTyksTz1paShnLGIsVCxsLEUrMSxCKSxqcChOLEYsSSxCLG8scixzLGksZix1LGMsZyxwLGQsbixPKSxPPWlpKGcsYixULGwsRSsyLEEpLGpwKE4sRixJLEEsbyxyLHMsaSxmLHUsYyxnLHAsZCxuLE8pfVFoKHQsXyxtKX1mdW5jdGlvbiByYSh0LGUsbixvLHIsaSxzKXtpZighaChzKSlyZXR1cm47bGV0IGY9YS5mcm9tQXJyYXkobyx0KjMsRWYpO2EuZXF1YWxzRXBzaWxvbihmLG4sUC5FUFNJTE9OMTApP2kuYXBwbHlPZmZzZXQudmFsdWVzW3JdPXNbdF06aS5hcHBseU9mZnNldC52YWx1ZXNbcl09c1tlXX1mdW5jdGlvbiBXYih0KXtsZXQgZT10Lmdlb21ldHJ5LG49ZS5hdHRyaWJ1dGVzLG89bi5wb3NpdGlvbi52YWx1ZXMscj1oKG4uYXBwbHlPZmZzZXQpP24uYXBwbHlPZmZzZXQudmFsdWVzOnZvaWQgMCxpPWUuaW5kaWNlcyxzPWlhKGUpLGY9aWEoZSksdSxjPWkubGVuZ3RoLGw9W107bC5sZW5ndGg9by5sZW5ndGgvMztsZXQgcD1bXTtmb3IocC5sZW5ndGg9by5sZW5ndGgvMyx1PTA7dTxsLmxlbmd0aDsrK3UpbFt1XT0tMSxwW3VdPS0xO2Zvcih1PTA7dTxjO3UrPTIpe2xldCBkPWlbdV0sbT1pW3UrMV0sXz1hLmZyb21BcnJheShvLGQqMyxFZiksZz1hLmZyb21BcnJheShvLG0qMyxZaCksYjtNYXRoLmFicyhfLnkpPFAuRVBTSUxPTjYmJihfLnk8MD9fLnk9LVAuRVBTSUxPTjY6Xy55PVAuRVBTSUxPTjYpLE1hdGguYWJzKGcueSk8UC5FUFNJTE9ONiYmKGcueTwwP2cueT0tUC5FUFNJTE9ONjpnLnk9UC5FUFNJTE9ONik7bGV0IFQ9cy5hdHRyaWJ1dGVzLE89cy5pbmRpY2VzLEU9cCx3PWYuYXR0cmlidXRlcyxDPWYuaW5kaWNlcyxNPWwsTj1oby5saW5lU2VnbWVudFBsYW5lKF8sZyxRYiwkaCk7aWYoaChOKSl7bGV0IEY9YS5tdWx0aXBseUJ5U2NhbGFyKGEuVU5JVF9ZLDUqUC5FUFNJTE9OOSxjTSk7Xy55PDAmJihhLm5lZ2F0ZShGLEYpLFQ9Zi5hdHRyaWJ1dGVzLE89Zi5pbmRpY2VzLEU9bCx3PXMuYXR0cmlidXRlcyxDPXMuaW5kaWNlcyxNPXApO2xldCBJPWEuYWRkKE4sRixhTSk7Yj1paShULE8sRSxpLHUsXykscmEoZCxtLF8sbyxiLFQsciksYj1paShULE8sRSxpLC0xLEkpLHJhKGQsbSxJLG8sYixULHIpLGEubmVnYXRlKEYsRiksYS5hZGQoTixGLEkpLGI9aWkodyxDLE0saSwtMSxJKSxyYShkLG0sSSxvLGIsdyxyKSxiPWlpKHcsQyxNLGksdSsxLGcpLHJhKGQsbSxnLG8sYix3LHIpfWVsc2V7bGV0IEYsSSx2O18ueTwwPyhGPWYuYXR0cmlidXRlcyxJPWYuaW5kaWNlcyx2PWwpOihGPXMuYXR0cmlidXRlcyxJPXMuaW5kaWNlcyx2PXApLGI9aWkoRixJLHYsaSx1LF8pLHJhKGQsbSxfLG8sYixGLHIpLGI9aWkoRixJLHYsaSx1KzEsZykscmEoZCxtLGcsbyxiLEYscil9fVFoKHQsZixzKX1mdW5jdGlvbiAkYih0KXtsZXQgZT10LmF0dHJpYnV0ZXMsbj1lLnBvc2l0aW9uLnZhbHVlcyxvPWUucHJldlBvc2l0aW9uLnZhbHVlcyxyPWUubmV4dFBvc2l0aW9uLnZhbHVlcyxpPW4ubGVuZ3RoO2ZvcihsZXQgcz0wO3M8aTtzKz0zKXtsZXQgZj1hLnVucGFjayhuLHMsSmIpO2lmKGYueD4wKWNvbnRpbnVlO2xldCB1PWEudW5wYWNrKG8scyx0VCk7KGYueTwwJiZ1Lnk+MHx8Zi55PjAmJnUueTwwKSYmKHMtMz4wPyhvW3NdPW5bcy0zXSxvW3MrMV09bltzLTJdLG9bcysyXT1uW3MtMV0pOmEucGFjayhmLG8scykpO2xldCBjPWEudW5wYWNrKHIscyxaaCk7KGYueTwwJiZjLnk+MHx8Zi55PjAmJmMueTwwKSYmKHMrMzxpPyhyW3NdPW5bcyszXSxyW3MrMV09bltzKzRdLHJbcysyXT1uW3MrNV0pOmEucGFjayhmLHIscykpfX1mdW5jdGlvbiBtTSh0KXtsZXQgZT10Lmdlb21ldHJ5LG49ZS5hdHRyaWJ1dGVzLG89bi5wb3NpdGlvbi52YWx1ZXMscj1uLnByZXZQb3NpdGlvbi52YWx1ZXMsaT1uLm5leHRQb3NpdGlvbi52YWx1ZXMscz1uLmV4cGFuZEFuZFdpZHRoLnZhbHVlcyxmPWgobi5zdCk/bi5zdC52YWx1ZXM6dm9pZCAwLHU9aChuLmNvbG9yKT9uLmNvbG9yLnZhbHVlczp2b2lkIDAsYz1pYShlKSxsPWlhKGUpLHAsZCxtLF89ITEsZz1vLmxlbmd0aC8zO2ZvcihwPTA7cDxnO3ArPTQpe2xldCBiPXAsVD1wKzIsTz1hLmZyb21BcnJheShvLGIqMyxKYiksRT1hLmZyb21BcnJheShvLFQqMyx0VCk7aWYoTWF0aC5hYnMoTy55KTxIcClmb3IoTy55PUhwKihFLnk8MD8tMToxKSxvW3AqMysxXT1PLnksb1socCsxKSozKzFdPU8ueSxkPWIqMztkPGIqMys0KjM7ZCs9MylyW2RdPW9bcCozXSxyW2QrMV09b1twKjMrMV0scltkKzJdPW9bcCozKzJdO2lmKE1hdGguYWJzKEUueSk8SHApZm9yKEUueT1IcCooTy55PDA/LTE6MSksb1socCsyKSozKzFdPUUueSxvWyhwKzMpKjMrMV09RS55LGQ9YiozO2Q8YiozKzQqMztkKz0zKWlbZF09b1socCsyKSozXSxpW2QrMV09b1socCsyKSozKzFdLGlbZCsyXT1vWyhwKzIpKjMrMl07bGV0IHc9Yy5hdHRyaWJ1dGVzLEM9Yy5pbmRpY2VzLE09bC5hdHRyaWJ1dGVzLE49bC5pbmRpY2VzLEY9aG8ubGluZVNlZ21lbnRQbGFuZShPLEUsUWIsdU0pO2lmKGgoRikpe189ITA7bGV0IEk9YS5tdWx0aXBseUJ5U2NhbGFyKGEuVU5JVF9ZLGRNLGxNKTtPLnk8MCYmKGEubmVnYXRlKEksSSksdz1sLmF0dHJpYnV0ZXMsQz1sLmluZGljZXMsTT1jLmF0dHJpYnV0ZXMsTj1jLmluZGljZXMpO2xldCB2PWEuYWRkKEYsSSxwTSk7dy5wb3NpdGlvbi52YWx1ZXMucHVzaChPLngsTy55LE8ueixPLngsTy55LE8ueiksdy5wb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksdy5wb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksdy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2gocltiKjNdLHJbYiozKzFdLHJbYiozKzJdKSx3LnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChyW2IqMyszXSxyW2IqMys0XSxyW2IqMys1XSksdy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goTy54LE8ueSxPLnosTy54LE8ueSxPLnopLHcubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSx3Lm5leHRQb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksdy5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2godi54LHYueSx2LnopLHcubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxhLm5lZ2F0ZShJLEkpLGEuYWRkKEYsSSx2KSxNLnBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxNLnBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxNLnBvc2l0aW9uLnZhbHVlcy5wdXNoKEUueCxFLnksRS56LEUueCxFLnksRS56KSxNLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksTS5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2godi54LHYueSx2LnopLE0ucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxNLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksTS5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goRS54LEUueSxFLnosRS54LEUueSxFLnopLE0ubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKGlbVCozXSxpW1QqMysxXSxpW1QqMysyXSksTS5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goaVtUKjMrM10saVtUKjMrNF0saVtUKjMrNV0pO2xldCBCPUouZnJvbUFycmF5KHMsYioyLFhiKSxBPU1hdGguYWJzKEIueSk7dy5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSxBLDEsQSksdy5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSwtQSwxLC1BKSxNLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKC0xLEEsMSxBKSxNLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKC0xLC1BLDEsLUEpO2xldCBTPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KEYsTyxaaCkpO2lmKFMvPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KEUsTyxaaCkpLGgodSkpe2xldCB4PW1lLmZyb21BcnJheSh1LGIqNCxZYiksRD1tZS5mcm9tQXJyYXkodSxUKjQsWWIpLHo9UC5sZXJwKHgueCxELngsUyksaj1QLmxlcnAoeC55LEQueSxTKSxrPVAubGVycCh4LnosRC56LFMpLHE9UC5sZXJwKHgudyxELncsUyk7Zm9yKGQ9Yio0O2Q8Yio0KzIqNDsrK2Qpdy5jb2xvci52YWx1ZXMucHVzaCh1W2RdKTtmb3Iody5jb2xvci52YWx1ZXMucHVzaCh6LGosayxxKSx3LmNvbG9yLnZhbHVlcy5wdXNoKHosaixrLHEpLE0uY29sb3IudmFsdWVzLnB1c2goeixqLGsscSksTS5jb2xvci52YWx1ZXMucHVzaCh6LGosayxxKSxkPVQqNDtkPFQqNCsyKjQ7KytkKU0uY29sb3IudmFsdWVzLnB1c2godVtkXSl9aWYoaChmKSl7bGV0IHg9Si5mcm9tQXJyYXkoZixiKjIsWGIpLEQ9Si5mcm9tQXJyYXkoZiwocCszKSoyLGZNKSx6PVAubGVycCh4LngsRC54LFMpO2ZvcihkPWIqMjtkPGIqMisyKjI7KytkKXcuc3QudmFsdWVzLnB1c2goZltkXSk7Zm9yKHcuc3QudmFsdWVzLnB1c2goeix4LnkpLHcuc3QudmFsdWVzLnB1c2goeixELnkpLE0uc3QudmFsdWVzLnB1c2goeix4LnkpLE0uc3QudmFsdWVzLnB1c2goeixELnkpLGQ9VCoyO2Q8VCoyKzIqMjsrK2QpTS5zdC52YWx1ZXMucHVzaChmW2RdKX1tPXcucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLTQsQy5wdXNoKG0sbSsyLG0rMSksQy5wdXNoKG0rMSxtKzIsbSszKSxtPU0ucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLTQsTi5wdXNoKG0sbSsyLG0rMSksTi5wdXNoKG0rMSxtKzIsbSszKX1lbHNle2xldCBJLHY7Zm9yKE8ueTwwPyhJPWwuYXR0cmlidXRlcyx2PWwuaW5kaWNlcyk6KEk9Yy5hdHRyaWJ1dGVzLHY9Yy5pbmRpY2VzKSxJLnBvc2l0aW9uLnZhbHVlcy5wdXNoKE8ueCxPLnksTy56KSxJLnBvc2l0aW9uLnZhbHVlcy5wdXNoKE8ueCxPLnksTy56KSxJLnBvc2l0aW9uLnZhbHVlcy5wdXNoKEUueCxFLnksRS56KSxJLnBvc2l0aW9uLnZhbHVlcy5wdXNoKEUueCxFLnksRS56KSxkPXAqMztkPHAqMys0KjM7KytkKUkucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKHJbZF0pLEkubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKGlbZF0pO2ZvcihkPXAqMjtkPHAqMis0KjI7KytkKUkuZXhwYW5kQW5kV2lkdGgudmFsdWVzLnB1c2goc1tkXSksaChmKSYmSS5zdC52YWx1ZXMucHVzaChmW2RdKTtpZihoKHUpKWZvcihkPXAqNDtkPHAqNCs0KjQ7KytkKUkuY29sb3IudmFsdWVzLnB1c2godVtkXSk7bT1JLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LHYucHVzaChtLG0rMixtKzEpLHYucHVzaChtKzEsbSsyLG0rMyl9fV8mJigkYihsKSwkYihjKSksUWgodCxsLGMpfXZhciB2byxHYix6UCxIaCxrcixHcCxWcCxIUCxBcix3ZixuYSxvYSxxUCxWYixLUCxPZixVcix6YixqYix6cCxIYixlYyxuYyxvYyxyYyxYaCxuTSxxcCxaYixvTSxFZixZaCwkaCxyTSxzTSxRYixjTSxhTSxYYixmTSxKYix0VCxaaCx1TSxsTSxwTSxZYixkTSxIcCxrZSxzaT0kKCgpPT57YXMoKTtPYigpO3ZlKCk7VWUoKTtMdCgpO2hyKCk7SWUoKTtEZSgpO2F0KCk7anQoKTtCaCgpO1NpKCk7WGUoKTtZZSgpO3ZwKCk7JGUoKTtHcygpO3RjKCk7S3QoKTtCbigpO1VuKCk7ZnMoKTt0bigpO1ViKCk7dm89e307dm8udG9XaXJlZnJhbWU9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImdlb21ldHJ5IGlzIHJlcXVpcmVkLiIpO2xldCBlPXQuaW5kaWNlcztpZihoKGUpKXtzd2l0Y2godC5wcmltaXRpdmVUeXBlKXtjYXNlIER0LlRSSUFOR0xFUzp0LmluZGljZXM9VVAoZSk7YnJlYWs7Y2FzZSBEdC5UUklBTkdMRV9TVFJJUDp0LmluZGljZXM9a1AoZSk7YnJlYWs7Y2FzZSBEdC5UUklBTkdMRV9GQU46dC5pbmRpY2VzPUdQKGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEwoImdlb21ldHJ5LnByaW1pdGl2ZVR5cGUgbXVzdCBiZSBUUklBTkdMRVMsIFRSSUFOR0xFX1NUUklQLCBvciBUUklBTkdMRV9GQU4uIil9dC5wcmltaXRpdmVUeXBlPUR0LkxJTkVTfXJldHVybiB0fTt2by5jcmVhdGVMaW5lU2VnbWVudHNGb3JWZWN0b3JzPWZ1bmN0aW9uKHQsZSxuKXtpZihlPWU/PyJub3JtYWwiLCFoKHQpKXRocm93IG5ldyBMKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtpZighaCh0LmF0dHJpYnV0ZXMucG9zaXRpb24pKXRocm93IG5ldyBMKCJnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHQuYXR0cmlidXRlc1tlXSkpdGhyb3cgbmV3IEwoYGdlb21ldHJ5LmF0dHJpYnV0ZXMgbXVzdCBoYXZlIGFuIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF0dHJpYnV0ZU5hbWUgcGFyYW1ldGVyLCAke2V9LmApO249bj8/MWU0O2xldCBvPXQuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscj10LmF0dHJpYnV0ZXNbZV0udmFsdWVzLGk9by5sZW5ndGgscz1uZXcgRmxvYXQ2NEFycmF5KDIqaSksZj0wO2ZvcihsZXQgbD0wO2w8aTtsKz0zKXNbZisrXT1vW2xdLHNbZisrXT1vW2wrMV0sc1tmKytdPW9bbCsyXSxzW2YrK109b1tsXStyW2xdKm4sc1tmKytdPW9bbCsxXStyW2wrMV0qbixzW2YrK109b1tsKzJdK3JbbCsyXSpuO2xldCB1LGM9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gaChjKSYmKHU9bmV3IGd0KGMuY2VudGVyLGMucmFkaXVzK24pKSxuZXcgQnQoe2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6c30pfSxwcmltaXRpdmVUeXBlOkR0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOnV9KX07dm8uY3JlYXRlQXR0cmlidXRlTG9jYXRpb25zPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtsZXQgZT1bInBvc2l0aW9uIiwicG9zaXRpb25IaWdoIiwicG9zaXRpb25Mb3ciLCJwb3NpdGlvbjNESGlnaCIsInBvc2l0aW9uM0RMb3ciLCJwb3NpdGlvbjJESGlnaCIsInBvc2l0aW9uMkRMb3ciLCJwaWNrQ29sb3IiLCJub3JtYWwiLCJzdCIsInRhbmdlbnQiLCJiaXRhbmdlbnQiLCJleHRydWRlRGlyZWN0aW9uIiwiY29tcHJlc3NlZEF0dHJpYnV0ZXMiXSxuPXQuYXR0cmlidXRlcyxvPXt9LHI9MCxpLHM9ZS5sZW5ndGg7Zm9yKGk9MDtpPHM7KytpKXtsZXQgZj1lW2ldO2gobltmXSkmJihvW2ZdPXIrKyl9Zm9yKGxldCBmIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShmKSYmIWgob1tmXSkmJihvW2ZdPXIrKyk7cmV0dXJuIG99O3ZvLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZT1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgTCgiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7bGV0IGU9QnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCksbj10LmluZGljZXM7aWYoaChuKSl7bGV0IG89bmV3IEludDMyQXJyYXkoZSk7Zm9yKGxldCBkPTA7ZDxlO2QrKylvW2RdPS0xO2xldCByPW4saT1yLmxlbmd0aCxzPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoZSxpKSxmPTAsdT0wLGM9MCxsO2Zvcig7ZjxpOylsPW9bcltmXV0sbCE9PS0xP3NbdV09bDoobD1yW2ZdLG9bbF09YyxzW3VdPWMsKytjKSwrK2YsKyt1O3QuaW5kaWNlcz1zO2xldCBwPXQuYXR0cmlidXRlcztmb3IobGV0IGQgaW4gcClpZihwLmhhc093blByb3BlcnR5KGQpJiZoKHBbZF0pJiZoKHBbZF0udmFsdWVzKSl7bGV0IG09cFtkXSxfPW0udmFsdWVzLGc9MCxiPW0uY29tcG9uZW50c1BlckF0dHJpYnV0ZSxUPWV0LmNyZWF0ZVR5cGVkQXJyYXkobS5jb21wb25lbnREYXRhdHlwZSxjKmIpO2Zvcig7ZzxlOyl7bGV0IE89b1tnXTtpZihPIT09LTEpZm9yKGxldCBFPTA7RTxiO0UrKylUW2IqTytFXT1fW2IqZytFXTsrK2d9bS52YWx1ZXM9VH19cmV0dXJuIHR9O3ZvLnJlb3JkZXJGb3JQb3N0VmVydGV4Q2FjaGU9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7bGV0IG49dC5pbmRpY2VzO2lmKHQucHJpbWl0aXZlVHlwZT09PUR0LlRSSUFOR0xFUyYmaChuKSl7bGV0IG89bi5sZW5ndGgscj0wO2ZvcihsZXQgaT0wO2k8bztpKyspbltpXT5yJiYocj1uW2ldKTt0LmluZGljZXM9QmIudGlwc2lmeSh7aW5kaWNlczpuLG1heGltdW1JbmRleDpyLGNhY2hlU2l6ZTplfSl9cmV0dXJuIHR9O3ZvLmZpdFRvVW5zaWduZWRTaG9ydEluZGljZXM9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImdlb21ldHJ5IGlzIHJlcXVpcmVkLiIpO2lmKGgodC5pbmRpY2VzKSYmdC5wcmltaXRpdmVUeXBlIT09RHQuVFJJQU5HTEVTJiZ0LnByaW1pdGl2ZVR5cGUhPT1EdC5MSU5FUyYmdC5wcmltaXRpdmVUeXBlIT09RHQuUE9JTlRTKXRocm93IG5ldyBMKCJnZW9tZXRyeS5wcmltaXRpdmVUeXBlIG11c3QgZXF1YWwgdG8gUHJpbWl0aXZlVHlwZS5UUklBTkdMRVMsIFByaW1pdGl2ZVR5cGUuTElORVMsIG9yIFByaW1pdGl2ZVR5cGUuUE9JTlRTLiIpO2xldCBlPVtdLG49QnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7aWYoaCh0LmluZGljZXMpJiZuPj1QLlNJWFRZX0ZPVVJfS0lMT0JZVEVTKXtsZXQgbz1bXSxyPVtdLGk9MCxzPWtiKHQuYXR0cmlidXRlcyksZj10LmluZGljZXMsdT1mLmxlbmd0aCxjO3QucHJpbWl0aXZlVHlwZT09PUR0LlRSSUFOR0xFUz9jPTM6dC5wcmltaXRpdmVUeXBlPT09RHQuTElORVM/Yz0yOnQucHJpbWl0aXZlVHlwZT09PUR0LlBPSU5UUyYmKGM9MSk7Zm9yKGxldCBsPTA7bDx1O2wrPWMpe2ZvcihsZXQgcD0wO3A8YzsrK3Ape2xldCBkPWZbbCtwXSxtPW9bZF07aChtKXx8KG09aSsrLG9bZF09bSxWUChzLHQuYXR0cmlidXRlcyxkKSksci5wdXNoKG0pfWkrYz49UC5TSVhUWV9GT1VSX0tJTE9CWVRFUyYmKGUucHVzaChuZXcgQnQoe2F0dHJpYnV0ZXM6cyxpbmRpY2VzOnIscHJpbWl0aXZlVHlwZTp0LnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6dC5ib3VuZGluZ1NwaGVyZSxib3VuZGluZ1NwaGVyZUNWOnQuYm91bmRpbmdTcGhlcmVDVn0pKSxvPVtdLHI9W10saT0wLHM9a2IodC5hdHRyaWJ1dGVzKSl9ci5sZW5ndGghPT0wJiZlLnB1c2gobmV3IEJ0KHthdHRyaWJ1dGVzOnMsaW5kaWNlczpyLHByaW1pdGl2ZVR5cGU6dC5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOnQuYm91bmRpbmdTcGhlcmUsYm91bmRpbmdTcGhlcmVDVjp0LmJvdW5kaW5nU3BoZXJlQ1Z9KSl9ZWxzZSBlLnB1c2godCk7cmV0dXJuIGV9O0diPW5ldyBhLHpQPW5ldyBzdDt2by5wcm9qZWN0VG8yRD1mdW5jdGlvbih0LGUsbixvLHIpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgiYXR0cmlidXRlTmFtZSBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgTCgiYXR0cmlidXRlTmFtZTNEIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBMKCJhdHRyaWJ1dGVOYW1lMkQgaXMgcmVxdWlyZWQuIik7aWYoIWgodC5hdHRyaWJ1dGVzW2VdKSl0aHJvdyBuZXcgTChgZ2VvbWV0cnkgbXVzdCBoYXZlIGF0dHJpYnV0ZSBtYXRjaGluZyB0aGUgYXR0cmlidXRlTmFtZSBhcmd1bWVudDogJHtlfS5gKTtpZih0LmF0dHJpYnV0ZXNbZV0uY29tcG9uZW50RGF0YXR5cGUhPT1ldC5ET1VCTEUpdGhyb3cgbmV3IEwoIlRoZSBhdHRyaWJ1dGUgY29tcG9uZW50RGF0YXR5cGUgbXVzdCBiZSBDb21wb25lbnREYXRhdHlwZS5ET1VCTEUuIik7bGV0IGk9dC5hdHRyaWJ1dGVzW2VdO3I9aChyKT9yOm5ldyBKbjtsZXQgcz1yLmVsbGlwc29pZCxmPWkudmFsdWVzLHU9bmV3IEZsb2F0NjRBcnJheShmLmxlbmd0aCksYz0wO2ZvcihsZXQgbD0wO2w8Zi5sZW5ndGg7bCs9Myl7bGV0IHA9YS5mcm9tQXJyYXkoZixsLEdiKSxkPXMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocCx6UCk7aWYoIWgoZCkpdGhyb3cgbmV3IEwoYENvdWxkIG5vdCBwcm9qZWN0IHBvaW50ICgke3AueH0sICR7cC55fSwgJHtwLnp9KSB0byAyRC5gKTtsZXQgbT1yLnByb2plY3QoZCxHYik7dVtjKytdPW0ueCx1W2MrK109bS55LHVbYysrXT1tLnp9cmV0dXJuIHQuYXR0cmlidXRlc1tuXT1pLHQuYXR0cmlidXRlc1tvXT1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnV9KSxkZWxldGUgdC5hdHRyaWJ1dGVzW2VdLHR9O0hoPXtoaWdoOjAsbG93OjB9O3ZvLmVuY29kZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoImF0dHJpYnV0ZU5hbWUgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEwoImF0dHJpYnV0ZUhpZ2hOYW1lIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBMKCJhdHRyaWJ1dGVMb3dOYW1lIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHQuYXR0cmlidXRlc1tlXSkpdGhyb3cgbmV3IEwoYGdlb21ldHJ5IG11c3QgaGF2ZSBhdHRyaWJ1dGUgbWF0Y2hpbmcgdGhlIGF0dHJpYnV0ZU5hbWUgYXJndW1lbnQ6ICR7ZX0uYCk7aWYodC5hdHRyaWJ1dGVzW2VdLmNvbXBvbmVudERhdGF0eXBlIT09ZXQuRE9VQkxFKXRocm93IG5ldyBMKCJUaGUgYXR0cmlidXRlIGNvbXBvbmVudERhdGF0eXBlIG11c3QgYmUgQ29tcG9uZW50RGF0YXR5cGUuRE9VQkxFLiIpO2xldCByPXQuYXR0cmlidXRlc1tlXSxpPXIudmFsdWVzLHM9aS5sZW5ndGgsZj1uZXcgRmxvYXQzMkFycmF5KHMpLHU9bmV3IEZsb2F0MzJBcnJheShzKTtmb3IobGV0IGw9MDtsPHM7KytsKVpzLmVuY29kZShpW2xdLEhoKSxmW2xdPUhoLmhpZ2gsdVtsXT1IaC5sb3c7bGV0IGM9ci5jb21wb25lbnRzUGVyQXR0cmlidXRlO3JldHVybiB0LmF0dHJpYnV0ZXNbbl09bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOmMsdmFsdWVzOmZ9KSx0LmF0dHJpYnV0ZXNbb109bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOmMsdmFsdWVzOnV9KSxkZWxldGUgdC5hdHRyaWJ1dGVzW2VdLHR9O2tyPW5ldyBhO0dwPW5ldyBpdCxWcD1uZXcgWjt2by50cmFuc2Zvcm1Ub1dvcmxkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImluc3RhbmNlIGlzIHJlcXVpcmVkLiIpO2xldCBlPXQubW9kZWxNYXRyaXg7aWYoaXQuZXF1YWxzKGUsaXQuSURFTlRJVFkpKXJldHVybiB0O2xldCBuPXQuZ2VvbWV0cnkuYXR0cmlidXRlcztxaChlLG4ucG9zaXRpb24pLHFoKGUsbi5wcmV2UG9zaXRpb24pLHFoKGUsbi5uZXh0UG9zaXRpb24pLChoKG4ubm9ybWFsKXx8aChuLnRhbmdlbnQpfHxoKG4uYml0YW5nZW50KSkmJihpdC5pbnZlcnNlKGUsR3ApLGl0LnRyYW5zcG9zZShHcCxHcCksaXQuZ2V0TWF0cml4MyhHcCxWcCksS2goVnAsbi5ub3JtYWwpLEtoKFZwLG4udGFuZ2VudCksS2goVnAsbi5iaXRhbmdlbnQpKTtsZXQgbz10Lmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlO3JldHVybiBoKG8pJiYodC5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZT1ndC50cmFuc2Zvcm0obyxlLG8pKSx0Lm1vZGVsTWF0cml4PWl0LmNsb25lKGl0LklERU5USVRZKSx0fTtIUD1uZXcgYTt2by5jb21iaW5lSW5zdGFuY2VzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpfHx0Lmxlbmd0aDwxKXRocm93IG5ldyBMKCJpbnN0YW5jZXMgaXMgcmVxdWlyZWQgYW5kIG11c3QgaGF2ZSBsZW5ndGggZ3JlYXRlciB0aGFuIHplcm8uIik7bGV0IGU9W10sbj1bXSxvPXQubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bzsrK2kpe2xldCBzPXRbaV07aChzLmdlb21ldHJ5KT9lLnB1c2gocyk6aChzLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZoKHMuZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJm4ucHVzaChzKX1sZXQgcj1bXTtyZXR1cm4gZS5sZW5ndGg+MCYmci5wdXNoKFdoKGUsImdlb21ldHJ5IikpLG4ubGVuZ3RoPjAmJihyLnB1c2goV2gobiwid2VzdEhlbWlzcGhlcmVHZW9tZXRyeSIpKSxyLnB1c2goV2gobiwiZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSIpKSkscn07QXI9bmV3IGEsd2Y9bmV3IGEsbmE9bmV3IGEsb2E9bmV3IGE7dm8uY29tcHV0ZU5vcm1hbD1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgTCgiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7aWYoIWgodC5hdHRyaWJ1dGVzLnBvc2l0aW9uKXx8IWgodC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcykpdGhyb3cgbmV3IEwoImdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHQuaW5kaWNlcykpdGhyb3cgbmV3IEwoImdlb21ldHJ5LmluZGljZXMgaXMgcmVxdWlyZWQuIik7aWYodC5pbmRpY2VzLmxlbmd0aDwyfHx0LmluZGljZXMubGVuZ3RoJTMhPT0wKXRocm93IG5ldyBMKCJnZW9tZXRyeS5pbmRpY2VzIGxlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBiZSBhIG11bHRpcGxlIG9mIDMuIik7aWYodC5wcmltaXRpdmVUeXBlIT09RHQuVFJJQU5HTEVTKXRocm93IG5ldyBMKCJnZW9tZXRyeS5wcmltaXRpdmVUeXBlIG11c3QgYmUgUHJpbWl0aXZlVHlwZS5UUklBTkdMRVMuIik7bGV0IGU9dC5pbmRpY2VzLG49dC5hdHRyaWJ1dGVzLG89bi5wb3NpdGlvbi52YWx1ZXMscj1uLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxpPWUubGVuZ3RoLHM9bmV3IEFycmF5KHIpLGY9bmV3IEFycmF5KGkvMyksdT1uZXcgQXJyYXkoaSksYztmb3IoYz0wO2M8cjtjKyspc1tjXT17aW5kZXhPZmZzZXQ6MCxjb3VudDowLGN1cnJlbnRDb3VudDowfTtsZXQgbD0wO2ZvcihjPTA7YzxpO2MrPTMpe2xldCBfPWVbY10sZz1lW2MrMV0sYj1lW2MrMl0sVD1fKjMsTz1nKjMsRT1iKjM7d2YueD1vW1RdLHdmLnk9b1tUKzFdLHdmLno9b1tUKzJdLG5hLng9b1tPXSxuYS55PW9bTysxXSxuYS56PW9bTysyXSxvYS54PW9bRV0sb2EueT1vW0UrMV0sb2Euej1vW0UrMl0sc1tfXS5jb3VudCsrLHNbZ10uY291bnQrKyxzW2JdLmNvdW50KyssYS5zdWJ0cmFjdChuYSx3ZixuYSksYS5zdWJ0cmFjdChvYSx3ZixvYSksZltsXT1hLmNyb3NzKG5hLG9hLG5ldyBhKSxsKyt9bGV0IHA9MDtmb3IoYz0wO2M8cjtjKyspc1tjXS5pbmRleE9mZnNldCs9cCxwKz1zW2NdLmNvdW50O2w9MDtsZXQgZDtmb3IoYz0wO2M8aTtjKz0zKXtkPXNbZVtjXV07bGV0IF89ZC5pbmRleE9mZnNldCtkLmN1cnJlbnRDb3VudDt1W19dPWwsZC5jdXJyZW50Q291bnQrKyxkPXNbZVtjKzFdXSxfPWQuaW5kZXhPZmZzZXQrZC5jdXJyZW50Q291bnQsdVtfXT1sLGQuY3VycmVudENvdW50KyssZD1zW2VbYysyXV0sXz1kLmluZGV4T2Zmc2V0K2QuY3VycmVudENvdW50LHVbX109bCxkLmN1cnJlbnRDb3VudCsrLGwrK31sZXQgbT1uZXcgRmxvYXQzMkFycmF5KHIqMyk7Zm9yKGM9MDtjPHI7YysrKXtsZXQgXz1jKjM7aWYoZD1zW2NdLGEuY2xvbmUoYS5aRVJPLEFyKSxkLmNvdW50PjApe2ZvcihsPTA7bDxkLmNvdW50O2wrKylhLmFkZChBcixmW3VbZC5pbmRleE9mZnNldCtsXV0sQXIpO2EuZXF1YWxzRXBzaWxvbihhLlpFUk8sQXIsUC5FUFNJTE9OMTApJiZhLmNsb25lKGZbdVtkLmluZGV4T2Zmc2V0XV0sQXIpfWEuZXF1YWxzRXBzaWxvbihhLlpFUk8sQXIsUC5FUFNJTE9OMTApJiYoQXIuej0xKSxhLm5vcm1hbGl6ZShBcixBciksbVtfXT1Bci54LG1bXysxXT1Bci55LG1bXysyXT1Bci56fXJldHVybiB0LmF0dHJpYnV0ZXMubm9ybWFsPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczptfSksdH07cVA9bmV3IGEsVmI9bmV3IGEsS1A9bmV3IGE7dm8uY29tcHV0ZVRhbmdlbnRBbmRCaXRhbmdlbnQ9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImdlb21ldHJ5IGlzIHJlcXVpcmVkLiIpO2xldCBlPXQuYXR0cmlidXRlcyxuPXQuaW5kaWNlcztpZighaChlLnBvc2l0aW9uKXx8IWgoZS5wb3NpdGlvbi52YWx1ZXMpKXRocm93IG5ldyBMKCJnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyBpcyByZXF1aXJlZC4iKTtpZighaChlLm5vcm1hbCl8fCFoKGUubm9ybWFsLnZhbHVlcykpdGhyb3cgbmV3IEwoImdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcyBpcyByZXF1aXJlZC4iKTtpZighaChlLnN0KXx8IWgoZS5zdC52YWx1ZXMpKXRocm93IG5ldyBMKCJnZW9tZXRyeS5hdHRyaWJ1dGVzLnN0LnZhbHVlcyBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgTCgiZ2VvbWV0cnkuaW5kaWNlcyBpcyByZXF1aXJlZC4iKTtpZihuLmxlbmd0aDwyfHxuLmxlbmd0aCUzIT09MCl0aHJvdyBuZXcgTCgiZ2VvbWV0cnkuaW5kaWNlcyBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBhbmQgYmUgYSBtdWx0aXBsZSBvZiAzLiIpO2lmKHQucHJpbWl0aXZlVHlwZSE9PUR0LlRSSUFOR0xFUyl0aHJvdyBuZXcgTCgiZ2VvbWV0cnkucHJpbWl0aXZlVHlwZSBtdXN0IGJlIFByaW1pdGl2ZVR5cGUuVFJJQU5HTEVTLiIpO2xldCBvPXQuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscj10LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcyxpPXQuYXR0cmlidXRlcy5zdC52YWx1ZXMscz10LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLGY9bi5sZW5ndGgsdT1uZXcgQXJyYXkocyozKSxjO2ZvcihjPTA7Yzx1Lmxlbmd0aDtjKyspdVtjXT0wO2xldCBsLHAsZDtmb3IoYz0wO2M8ZjtjKz0zKXtsZXQgZz1uW2NdLGI9bltjKzFdLFQ9bltjKzJdO2w9ZyozLHA9YiozLGQ9VCozO2xldCBPPWcqMixFPWIqMix3PVQqMixDPW9bbF0sTT1vW2wrMV0sTj1vW2wrMl0sRj1pW09dLEk9aVtPKzFdLHY9aVtFKzFdLUksQj1pW3crMV0tSSxBPTEvKChpW0VdLUYpKkItKGlbd10tRikqdiksUz0oQioob1twXS1DKS12KihvW2RdLUMpKSpBLHg9KEIqKG9bcCsxXS1NKS12KihvW2QrMV0tTSkpKkEsRD0oQioob1twKzJdLU4pLXYqKG9bZCsyXS1OKSkqQTt1W2xdKz1TLHVbbCsxXSs9eCx1W2wrMl0rPUQsdVtwXSs9Uyx1W3ArMV0rPXgsdVtwKzJdKz1ELHVbZF0rPVMsdVtkKzFdKz14LHVbZCsyXSs9RH1sZXQgbT1uZXcgRmxvYXQzMkFycmF5KHMqMyksXz1uZXcgRmxvYXQzMkFycmF5KHMqMyk7Zm9yKGM9MDtjPHM7YysrKXtsPWMqMyxwPWwrMSxkPWwrMjtsZXQgZz1hLmZyb21BcnJheShyLGwscVApLGI9YS5mcm9tQXJyYXkodSxsLEtQKSxUPWEuZG90KGcsYik7YS5tdWx0aXBseUJ5U2NhbGFyKGcsVCxWYiksYS5ub3JtYWxpemUoYS5zdWJ0cmFjdChiLFZiLGIpLGIpLG1bbF09Yi54LG1bcF09Yi55LG1bZF09Yi56LGEubm9ybWFsaXplKGEuY3Jvc3MoZyxiLGIpLGIpLF9bbF09Yi54LF9bcF09Yi55LF9bZF09Yi56fXJldHVybiB0LmF0dHJpYnV0ZXMudGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pLHQuYXR0cmlidXRlcy5iaXRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOl99KSx0fTtPZj1uZXcgSixVcj1uZXcgYSx6Yj1uZXcgYSxqYj1uZXcgYSx6cD1uZXcgSjt2by5jb21wcmVzc1ZlcnRpY2VzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtsZXQgZT10LmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbixuLG87aWYoaChlKSl7bGV0IE09ZS52YWx1ZXM7bz1NLmxlbmd0aC8zO2xldCBOPW5ldyBGbG9hdDMyQXJyYXkobyoyKSxGPTA7Zm9yKG49MDtuPG87KytuKXtpZihhLmZyb21BcnJheShNLG4qMyxVciksYS5lcXVhbHMoVXIsYS5aRVJPKSl7Ris9Mjtjb250aW51ZX16cD1ubi5vY3RFbmNvZGVJblJhbmdlKFVyLDY1NTM1LHpwKSxOW0YrK109enAueCxOW0YrK109enAueX1yZXR1cm4gdC5hdHRyaWJ1dGVzLmNvbXByZXNzZWRBdHRyaWJ1dGVzPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpOfSksZGVsZXRlIHQuYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uLHR9bGV0IHI9dC5hdHRyaWJ1dGVzLm5vcm1hbCxpPXQuYXR0cmlidXRlcy5zdCxzPWgociksZj1oKGkpO2lmKCFzJiYhZilyZXR1cm4gdDtsZXQgdT10LmF0dHJpYnV0ZXMudGFuZ2VudCxjPXQuYXR0cmlidXRlcy5iaXRhbmdlbnQsbD1oKHUpLHA9aChjKSxkLG0sXyxnO3MmJihkPXIudmFsdWVzKSxmJiYobT1pLnZhbHVlcyksbCYmKF89dS52YWx1ZXMpLHAmJihnPWMudmFsdWVzKSxvPShzP2QubGVuZ3RoOm0ubGVuZ3RoKS8ocz8zOjIpO2xldCBPPW8sRT1mJiZzPzI6MTtFKz1sfHxwPzE6MCxPKj1FO2xldCB3PW5ldyBGbG9hdDMyQXJyYXkoTyksQz0wO2ZvcihuPTA7bjxvOysrbil7ZiYmKEouZnJvbUFycmF5KG0sbioyLE9mKSx3W0MrK109bm4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoT2YpKTtsZXQgTT1uKjM7cyYmaChfKSYmaChnKT8oYS5mcm9tQXJyYXkoZCxNLFVyKSxhLmZyb21BcnJheShfLE0semIpLGEuZnJvbUFycmF5KGcsTSxqYiksbm4ub2N0UGFjayhVcix6YixqYixPZiksd1tDKytdPU9mLngsd1tDKytdPU9mLnkpOihzJiYoYS5mcm9tQXJyYXkoZCxNLFVyKSx3W0MrK109bm4ub2N0RW5jb2RlRmxvYXQoVXIpKSxsJiYoYS5mcm9tQXJyYXkoXyxNLFVyKSx3W0MrK109bm4ub2N0RW5jb2RlRmxvYXQoVXIpKSxwJiYoYS5mcm9tQXJyYXkoZyxNLFVyKSx3W0MrK109bm4ub2N0RW5jb2RlRmxvYXQoVXIpKSl9cmV0dXJuIHQuYXR0cmlidXRlcy5jb21wcmVzc2VkQXR0cmlidXRlcz1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6RSx2YWx1ZXM6d30pLHMmJmRlbGV0ZSB0LmF0dHJpYnV0ZXMubm9ybWFsLGYmJmRlbGV0ZSB0LmF0dHJpYnV0ZXMuc3QscCYmZGVsZXRlIHQuYXR0cmlidXRlcy5iaXRhbmdlbnQsbCYmZGVsZXRlIHQuYXR0cmlidXRlcy50YW5nZW50LHR9O0hiPW5ldyBhO2VjPW5ldyBhLG5jPW5ldyBhLG9jPW5ldyBhLHJjPW5ldyBhLFhoPXtwb3NpdGlvbnM6bmV3IEFycmF5KDcpLGluZGljZXM6bmV3IEFycmF5KDMqMyl9O25NPUpoKG1lLDQpLHFwPUpoKGEsMyksWmI9SmgoSiwyKSxvTT1mdW5jdGlvbih0LGUsbixvLHIsaSxzKXtsZXQgZj1yW3RdKm8ueCx1PXJbZV0qby55LGM9cltuXSpvLno7aVtzXT1mK3UrYz5QLkVQU0lMT042PzE6MH0sRWY9bmV3IGEsWWg9bmV3IGEsJGg9bmV3IGEsck09bmV3IGE7c009e3Bvc2l0aW9uOiEwLG5vcm1hbDohMCxiaXRhbmdlbnQ6ITAsdGFuZ2VudDohMCxzdDohMCxleHRydWRlRGlyZWN0aW9uOiEwLGFwcGx5T2Zmc2V0OiEwfTtRYj1vbi5mcm9tUG9pbnROb3JtYWwoYS5aRVJPLGEuVU5JVF9ZKSxjTT1uZXcgYSxhTT1uZXcgYTtYYj1uZXcgSixmTT1uZXcgSixKYj1uZXcgYSx0VD1uZXcgYSxaaD1uZXcgYSx1TT1uZXcgYSxsTT1uZXcgYSxwTT1uZXcgYSxZYj1uZXcgbWU7ZE09NSpQLkVQU0lMT045LEhwPVAuRVBTSUxPTjY7dm8uc3BsaXRMb25naXR1ZGU9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImluc3RhbmNlIGlzIHJlcXVpcmVkLiIpO2xldCBlPXQuZ2VvbWV0cnksbj1lLmJvdW5kaW5nU3BoZXJlO2lmKGgobikmJihuLmNlbnRlci54LW4ucmFkaXVzPjB8fGd0LmludGVyc2VjdFBsYW5lKG4sb24uT1JJR0lOX1pYX1BMQU5FKSE9PVNuLklOVEVSU0VDVElORykpcmV0dXJuIHQ7aWYoZS5nZW9tZXRyeVR5cGUhPT1NaS5OT05FKXN3aXRjaChlLmdlb21ldHJ5VHlwZSl7Y2FzZSBNaS5QT0xZTElORVM6bU0odCk7YnJlYWs7Y2FzZSBNaS5UUklBTkdMRVM6S2IodCk7YnJlYWs7Y2FzZSBNaS5MSU5FUzpXYih0KTticmVha31lbHNlIEpQKGUpLGUucHJpbWl0aXZlVHlwZT09PUR0LlRSSUFOR0xFUz9LYih0KTplLnByaW1pdGl2ZVR5cGU9PT1EdC5MSU5FUyYmV2IodCk7cmV0dXJuIHR9O2tlPXZvfSk7ZnVuY3Rpb24gUmYodCxlLG4pe3Q9dD8/MCxlPWU/PzAsbj1uPz8wLHRoaXMudmFsdWU9bmV3IEZsb2F0MzJBcnJheShbdCxlLG5dKX12YXIgZVQsblQ9JCgoKT0+e1d0KCk7RGUoKTthdCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJmLnByb3RvdHlwZSx7Y29tcG9uZW50RGF0YXR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBldC5GTE9BVH19LGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6e2dldDpmdW5jdGlvbigpe3JldHVybiAzfX0sbm9ybWFsaXplOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19fSk7UmYuZnJvbUNhcnRlc2lhbjM9ZnVuY3Rpb24odCl7cmV0dXJuIHkuZGVmaW5lZCgib2Zmc2V0Iix0KSxuZXcgUmYodC54LHQueSx0LnopfTtSZi50b1ZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgib2Zmc2V0Iix0KSxoKGUpfHwoZT1uZXcgRmxvYXQzMkFycmF5KFt0LngsdC55LHQuel0pKSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlfTtlVD1SZn0pO2Z1bmN0aW9uICRvKHQpe3RoaXMuX2VsbGlwc29pZD10Pz9ZLldHUzg0LHRoaXMuX3NlbWltYWpvckF4aXM9dGhpcy5fZWxsaXBzb2lkLm1heGltdW1SYWRpdXMsdGhpcy5fb25lT3ZlclNlbWltYWpvckF4aXM9MS90aGlzLl9zZW1pbWFqb3JBeGlzfXZhciBubyxpYz0kKCgpPT57THQoKTtJZSgpO2F0KCk7anQoKTskdCgpO0t0KCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoJG8ucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fX0pOyRvLm1lcmNhdG9yQW5nbGVUb0dlb2RldGljTGF0aXR1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuIFAuUElfT1ZFUl9UV08tMipNYXRoLmF0YW4oTWF0aC5leHAoLXQpKX07JG8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZT1mdW5jdGlvbih0KXt0PiRvLk1heGltdW1MYXRpdHVkZT90PSRvLk1heGltdW1MYXRpdHVkZTp0PC0kby5NYXhpbXVtTGF0aXR1ZGUmJih0PS0kby5NYXhpbXVtTGF0aXR1ZGUpO2xldCBlPU1hdGguc2luKHQpO3JldHVybiAuNSpNYXRoLmxvZygoMStlKS8oMS1lKSl9OyRvLk1heGltdW1MYXRpdHVkZT0kby5tZXJjYXRvckFuZ2xlVG9HZW9kZXRpY0xhdGl0dWRlKE1hdGguUEkpOyRvLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7bGV0IG49dGhpcy5fc2VtaW1ham9yQXhpcyxvPXQubG9uZ2l0dWRlKm4scj0kby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKHQubGF0aXR1ZGUpKm4saT10LmhlaWdodDtyZXR1cm4gaChlKT8oZS54PW8sZS55PXIsZS56PWksZSk6bmV3IGEobyxyLGkpfTskby5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImNhcnRlc2lhbiBpcyByZXF1aXJlZCIpO2xldCBuPXRoaXMuX29uZU92ZXJTZW1pbWFqb3JBeGlzLG89dC54Km4scj0kby5tZXJjYXRvckFuZ2xlVG9HZW9kZXRpY0xhdGl0dWRlKHQueSpuKSxpPXQuejtyZXR1cm4gaChlKT8oZS5sb25naXR1ZGU9byxlLmxhdGl0dWRlPXIsZS5oZWlnaHQ9aSxlKTpuZXcgc3QobyxyLGkpfTtubz0kb30pO2Z1bmN0aW9uIGhNKHQsZSxuKXtsZXQgbz0hbixyPXQubGVuZ3RoLGk7aWYoIW8mJnI+MSl7bGV0IHM9dFswXS5tb2RlbE1hdHJpeDtmb3IoaT0xO2k8cjsrK2kpaWYoIWl0LmVxdWFscyhzLHRbaV0ubW9kZWxNYXRyaXgpKXtvPSEwO2JyZWFrfX1pZihvKWZvcihpPTA7aTxyOysraSloKHRbaV0uZ2VvbWV0cnkpJiZrZS50cmFuc2Zvcm1Ub1dvcmxkQ29vcmRpbmF0ZXModFtpXSk7ZWxzZSBpdC5tdWx0aXBseVRyYW5zZm9ybWF0aW9uKGUsdFswXS5tb2RlbE1hdHJpeCxlKX1mdW5jdGlvbiB0MCh0LGUpe2xldCBuPXQuYXR0cmlidXRlcyxvPW4ucG9zaXRpb24scj1vLnZhbHVlcy5sZW5ndGgvby5jb21wb25lbnRzUGVyQXR0cmlidXRlO24uYmF0Y2hJZD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bmV3IEZsb2F0MzJBcnJheShyKX0pO2xldCBpPW4uYmF0Y2hJZC52YWx1ZXM7Zm9yKGxldCBzPTA7czxyOysrcylpW3NdPWV9ZnVuY3Rpb24gX00odCl7bGV0IGU9dC5sZW5ndGg7Zm9yKGxldCBuPTA7bjxlOysrbil7bGV0IG89dFtuXTtoKG8uZ2VvbWV0cnkpP3QwKG8uZ2VvbWV0cnksbik6aChvLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZoKG8uZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJih0MChvLndlc3RIZW1pc3BoZXJlR2VvbWV0cnksbiksdDAoby5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5LG4pKX19ZnVuY3Rpb24geU0odCl7bGV0IGU9dC5pbnN0YW5jZXMsbj10LnByb2plY3Rpb24sbz10LmVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQscj10LnNjZW5lM0RPbmx5LGk9dC52ZXJ0ZXhDYWNoZU9wdGltaXplLHM9dC5jb21wcmVzc1ZlcnRpY2VzLGY9dC5tb2RlbE1hdHJpeCx1LGMsbCxwPWUubGVuZ3RoO2Zvcih1PTA7dTxwOysrdSlpZihoKGVbdV0uZ2VvbWV0cnkpKXtsPWVbdV0uZ2VvbWV0cnkucHJpbWl0aXZlVHlwZTticmVha31mb3IodT0xO3U8cDsrK3UpaWYoaChlW3VdLmdlb21ldHJ5KSYmZVt1XS5nZW9tZXRyeS5wcmltaXRpdmVUeXBlIT09bCl0aHJvdyBuZXcgTCgiQWxsIGluc3RhbmNlIGdlb21ldHJpZXMgbXVzdCBoYXZlIHRoZSBzYW1lIHByaW1pdGl2ZVR5cGUuIik7aWYoaE0oZSxmLHIpLCFyKWZvcih1PTA7dTxwOysrdSloKGVbdV0uZ2VvbWV0cnkpJiZrZS5zcGxpdExvbmdpdHVkZShlW3VdKTtpZihfTShlKSxpKWZvcih1PTA7dTxwOysrdSl7bGV0IG09ZVt1XTtoKG0uZ2VvbWV0cnkpPyhrZS5yZW9yZGVyRm9yUG9zdFZlcnRleENhY2hlKG0uZ2VvbWV0cnkpLGtlLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZShtLmdlb21ldHJ5KSk6aChtLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZoKG0uZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJihrZS5yZW9yZGVyRm9yUG9zdFZlcnRleENhY2hlKG0ud2VzdEhlbWlzcGhlcmVHZW9tZXRyeSksa2UucmVvcmRlckZvclByZVZlcnRleENhY2hlKG0ud2VzdEhlbWlzcGhlcmVHZW9tZXRyeSksa2UucmVvcmRlckZvclBvc3RWZXJ0ZXhDYWNoZShtLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnkpLGtlLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZShtLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnkpKX1sZXQgZD1rZS5jb21iaW5lSW5zdGFuY2VzKGUpO2ZvcihwPWQubGVuZ3RoLHU9MDt1PHA7Kyt1KXtjPWRbdV07bGV0IG09Yy5hdHRyaWJ1dGVzO2lmKHIpZm9yKGxldCBfIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShfKSYmbVtfXS5jb21wb25lbnREYXRhdHlwZT09PWV0LkRPVUJMRSYma2UuZW5jb2RlQXR0cmlidXRlKGMsXyxgJHtffTNESGlnaGAsYCR7X30zRExvd2ApO2Vsc2UgZm9yKGxldCBfIGluIG0paWYobS5oYXNPd25Qcm9wZXJ0eShfKSYmbVtfXS5jb21wb25lbnREYXRhdHlwZT09PWV0LkRPVUJMRSl7bGV0IGc9YCR7X30zRGAsYj1gJHtffTJEYDtrZS5wcm9qZWN0VG8yRChjLF8sZyxiLG4pLGgoYy5ib3VuZGluZ1NwaGVyZSkmJl89PT0icG9zaXRpb24iJiYoYy5ib3VuZGluZ1NwaGVyZUNWPWd0LmZyb21WZXJ0aWNlcyhjLmF0dHJpYnV0ZXMucG9zaXRpb24yRC52YWx1ZXMpKSxrZS5lbmNvZGVBdHRyaWJ1dGUoYyxnLGAke2d9SGlnaGAsYCR7Z31Mb3dgKSxrZS5lbmNvZGVBdHRyaWJ1dGUoYyxiLGAke2J9SGlnaGAsYCR7Yn1Mb3dgKX1zJiZrZS5jb21wcmVzc1ZlcnRpY2VzKGMpfWlmKCFvKXtsZXQgbT1bXTtmb3IocD1kLmxlbmd0aCx1PTA7dTxwOysrdSljPWRbdV0sbT1tLmNvbmNhdChrZS5maXRUb1Vuc2lnbmVkU2hvcnRJbmRpY2VzKGMpKTtkPW19cmV0dXJuIGR9ZnVuY3Rpb24gZTAodCxlLG4sbyl7bGV0IHIsaSxzLGY9by5sZW5ndGgtMTtpZihmPj0wKXtsZXQgYz1vW2ZdO3I9Yy5vZmZzZXQrYy5jb3VudCxzPWMuaW5kZXgsaT1uW3NdLmluZGljZXMubGVuZ3RofWVsc2Ugcj0wLHM9MCxpPW5bc10uaW5kaWNlcy5sZW5ndGg7bGV0IHU9dC5sZW5ndGg7Zm9yKGxldCBjPTA7Yzx1OysrYyl7bGV0IHA9dFtjXVtlXTtpZighaChwKSljb250aW51ZTtsZXQgZD1wLmluZGljZXMubGVuZ3RoO3IrZD5pJiYocj0wLGk9blsrK3NdLmluZGljZXMubGVuZ3RoKSxvLnB1c2goe2luZGV4OnMsb2Zmc2V0OnIsY291bnQ6ZH0pLHIrPWR9fWZ1bmN0aW9uIGdNKHQsZSl7bGV0IG49W107cmV0dXJuIGUwKHQsImdlb21ldHJ5IixlLG4pLGUwKHQsIndlc3RIZW1pc3BoZXJlR2VvbWV0cnkiLGUsbiksZTAodCwiZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSIsZSxuKSxufWZ1bmN0aW9uIEFNKHQsZSl7bGV0IG49dC5hdHRyaWJ1dGVzO2ZvcihsZXQgbyBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkobykpe2xldCByPW5bb107aChyKSYmaChyLnZhbHVlcykmJmUucHVzaChyLnZhbHVlcy5idWZmZXIpfWgodC5pbmRpY2VzKSYmZS5wdXNoKHQuaW5kaWNlcy5idWZmZXIpfWZ1bmN0aW9uIGJNKHQsZSl7bGV0IG49dC5sZW5ndGg7Zm9yKGxldCBvPTA7bzxuOysrbylBTSh0W29dLGUpfWZ1bmN0aW9uIFRNKHQpe2xldCBlPTEsbj10Lmxlbmd0aDtmb3IobGV0IG89MDtvPG47bysrKXtsZXQgcj10W29dO2lmKCsrZSwhaChyKSljb250aW51ZTtsZXQgaT1yLmF0dHJpYnV0ZXM7ZSs9NysyKmd0LnBhY2tlZExlbmd0aCsoaChyLmluZGljZXMpP3IuaW5kaWNlcy5sZW5ndGg6MCk7Zm9yKGxldCBzIGluIGkpaWYoaS5oYXNPd25Qcm9wZXJ0eShzKSYmaChpW3NdKSl7bGV0IGY9aVtzXTtlKz01K2YudmFsdWVzLmxlbmd0aH19cmV0dXJuIGV9ZnVuY3Rpb24gd00odCxlKXtsZXQgbj10Lmxlbmd0aCxvPW5ldyBGbG9hdDY0QXJyYXkoMStuKjE5KSxyPTA7b1tyKytdPW47Zm9yKGxldCBpPTA7aTxuO2krKyl7bGV0IHM9dFtpXTtpZihpdC5wYWNrKHMubW9kZWxNYXRyaXgsbyxyKSxyKz1pdC5wYWNrZWRMZW5ndGgsaChzLmF0dHJpYnV0ZXMpJiZoKHMuYXR0cmlidXRlcy5vZmZzZXQpKXtsZXQgZj1zLmF0dHJpYnV0ZXMub2Zmc2V0LnZhbHVlO29bcl09ZlswXSxvW3IrMV09ZlsxXSxvW3IrMl09ZlsyXX1yKz0zfXJldHVybiBlLnB1c2goby5idWZmZXIpLG99ZnVuY3Rpb24gT00odCl7bGV0IGU9dCxuPW5ldyBBcnJheShlWzBdKSxvPTAscj0xO2Zvcig7cjxlLmxlbmd0aDspe2xldCBpPWl0LnVucGFjayhlLHIpLHM7cis9aXQucGFja2VkTGVuZ3RoLGgoZVtyXSkmJihzPXtvZmZzZXQ6bmV3IGVUKGVbcl0sZVtyKzFdLGVbcisyXSl9KSxyKz0zLG5bbysrXT17bW9kZWxNYXRyaXg6aSxhdHRyaWJ1dGVzOnN9fXJldHVybiBufWZ1bmN0aW9uIG9UKHQpe2xldCBlPXQubGVuZ3RoLG49MSsoZ3QucGFja2VkTGVuZ3RoKzEpKmUsbz1uZXcgRmxvYXQzMkFycmF5KG4pLHI9MDtvW3IrK109ZTtmb3IobGV0IGk9MDtpPGU7KytpKXtsZXQgcz10W2ldO2gocyk/KG9bcisrXT0xLGd0LnBhY2sodFtpXSxvLHIpKTpvW3IrK109MCxyKz1ndC5wYWNrZWRMZW5ndGh9cmV0dXJuIG99ZnVuY3Rpb24gclQodCl7bGV0IGU9bmV3IEFycmF5KHRbMF0pLG49MCxvPTE7Zm9yKDtvPHQubGVuZ3RoOyl0W28rK109PT0xJiYoZVtuXT1ndC51bnBhY2sodCxvKSksKytuLG8rPWd0LnBhY2tlZExlbmd0aDtyZXR1cm4gZX12YXIgSWksc2EsbjA9JCgoKT0+e3ZlKCk7RGUoKTthdCgpO2p0KCk7JHQoKTtTaSgpO1hlKCk7WWUoKTthbigpO3NpKCk7JGUoKTtVbigpO25UKCk7aWMoKTtJaT17fTtJaS5jb21iaW5lR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGUsbixvPXQuaW5zdGFuY2VzLHI9by5sZW5ndGgsaSxzLGY9ITE7cj4wJiYoZT15TSh0KSxlLmxlbmd0aD4wJiYobj1rZS5jcmVhdGVBdHRyaWJ1dGVMb2NhdGlvbnMoZVswXSksdC5jcmVhdGVQaWNrT2Zmc2V0cyYmKGk9Z00obyxlKSkpLGgob1swXS5hdHRyaWJ1dGVzKSYmaChvWzBdLmF0dHJpYnV0ZXMub2Zmc2V0KSYmKHM9bmV3IEFycmF5KHIpLGY9ITApKTtsZXQgdT1uZXcgQXJyYXkociksYz1uZXcgQXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl7bGV0IHA9b1tsXSxkPXAuZ2VvbWV0cnk7aChkKSYmKHVbbF09ZC5ib3VuZGluZ1NwaGVyZSxjW2xdPWQuYm91bmRpbmdTcGhlcmVDVixmJiYoc1tsXT1wLmdlb21ldHJ5Lm9mZnNldEF0dHJpYnV0ZSkpO2xldCBtPXAuZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSxfPXAud2VzdEhlbWlzcGhlcmVHZW9tZXRyeTtoKG0pJiZoKF8pJiYoaChtLmJvdW5kaW5nU3BoZXJlKSYmaChfLmJvdW5kaW5nU3BoZXJlKSYmKHVbbF09Z3QudW5pb24obS5ib3VuZGluZ1NwaGVyZSxfLmJvdW5kaW5nU3BoZXJlKSksaChtLmJvdW5kaW5nU3BoZXJlQ1YpJiZoKF8uYm91bmRpbmdTcGhlcmVDVikmJihjW2xdPWd0LnVuaW9uKG0uYm91bmRpbmdTcGhlcmVDVixfLmJvdW5kaW5nU3BoZXJlQ1YpKSl9cmV0dXJue2dlb21ldHJpZXM6ZSxtb2RlbE1hdHJpeDp0Lm1vZGVsTWF0cml4LGF0dHJpYnV0ZUxvY2F0aW9uczpuLHBpY2tPZmZzZXRzOmksb2Zmc2V0SW5zdGFuY2VFeHRlbmQ6cyxib3VuZGluZ1NwaGVyZXM6dSxib3VuZGluZ1NwaGVyZXNDVjpjfX07SWkucGFja0NyZWF0ZUdlb21ldHJ5UmVzdWx0cz1mdW5jdGlvbih0LGUpe2xldCBuPW5ldyBGbG9hdDY0QXJyYXkoVE0odCkpLG89W10scj17fSxpPXQubGVuZ3RoLHM9MDtuW3MrK109aTtmb3IobGV0IGY9MDtmPGk7ZisrKXtsZXQgdT10W2ZdLGM9aCh1KTtpZihuW3MrK109Yz8xOjAsIWMpY29udGludWU7bltzKytdPXUucHJpbWl0aXZlVHlwZSxuW3MrK109dS5nZW9tZXRyeVR5cGUsbltzKytdPXUub2Zmc2V0QXR0cmlidXRlPz8tMTtsZXQgbD1oKHUuYm91bmRpbmdTcGhlcmUpPzE6MDtuW3MrK109bCxsJiZndC5wYWNrKHUuYm91bmRpbmdTcGhlcmUsbixzKSxzKz1ndC5wYWNrZWRMZW5ndGg7bGV0IHA9aCh1LmJvdW5kaW5nU3BoZXJlQ1YpPzE6MDtuW3MrK109cCxwJiZndC5wYWNrKHUuYm91bmRpbmdTcGhlcmVDVixuLHMpLHMrPWd0LnBhY2tlZExlbmd0aDtsZXQgZD11LmF0dHJpYnV0ZXMsbT1bXTtmb3IobGV0IGcgaW4gZClkLmhhc093blByb3BlcnR5KGcpJiZoKGRbZ10pJiYobS5wdXNoKGcpLGgocltnXSl8fChyW2ddPW8ubGVuZ3RoLG8ucHVzaChnKSkpO25bcysrXT1tLmxlbmd0aDtmb3IobGV0IGc9MDtnPG0ubGVuZ3RoO2crKyl7bGV0IGI9bVtnXSxUPWRbYl07bltzKytdPXJbYl0sbltzKytdPVQuY29tcG9uZW50RGF0YXR5cGUsbltzKytdPVQuY29tcG9uZW50c1BlckF0dHJpYnV0ZSxuW3MrK109VC5ub3JtYWxpemU/MTowLG5bcysrXT1ULnZhbHVlcy5sZW5ndGgsbi5zZXQoVC52YWx1ZXMscykscys9VC52YWx1ZXMubGVuZ3RofWxldCBfPWgodS5pbmRpY2VzKT91LmluZGljZXMubGVuZ3RoOjA7bltzKytdPV8sXz4wJiYobi5zZXQodS5pbmRpY2VzLHMpLHMrPV8pfXJldHVybiBlLnB1c2gobi5idWZmZXIpLHtzdHJpbmdUYWJsZTpvLHBhY2tlZERhdGE6bn19O0lpLnVucGFja0NyZWF0ZUdlb21ldHJ5UmVzdWx0cz1mdW5jdGlvbih0KXtsZXQgZT10LnN0cmluZ1RhYmxlLG49dC5wYWNrZWREYXRhLG8scj1uZXcgQXJyYXkoblswXSksaT0wLHM9MTtmb3IoO3M8bi5sZW5ndGg7KXtpZighKG5bcysrXT09PTEpKXtyW2krK109dm9pZCAwO2NvbnRpbnVlfWxldCB1PW5bcysrXSxjPW5bcysrXSxsPW5bcysrXTtsPT09LTEmJihsPXZvaWQgMCk7bGV0IHAsZDtuW3MrK109PT0xJiYocD1ndC51bnBhY2sobixzKSkscys9Z3QucGFja2VkTGVuZ3RoLG5bcysrXT09PTEmJihkPWd0LnVucGFjayhuLHMpKSxzKz1ndC5wYWNrZWRMZW5ndGg7bGV0IGcsYixULE89bmV3IHJlLEU9bltzKytdO2ZvcihvPTA7bzxFO28rKyl7bGV0IEM9ZVtuW3MrK11dLE09bltzKytdO1Q9bltzKytdO2xldCBOPW5bcysrXSE9PTA7Zz1uW3MrK10sYj1ldC5jcmVhdGVUeXBlZEFycmF5KE0sZyk7Zm9yKGxldCBGPTA7RjxnO0YrKyliW0ZdPW5bcysrXTtPW0NdPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6TSxjb21wb25lbnRzUGVyQXR0cmlidXRlOlQsbm9ybWFsaXplOk4sdmFsdWVzOmJ9KX1sZXQgdztpZihnPW5bcysrXSxnPjApe2xldCBDPWIubGVuZ3RoL1Q7Zm9yKHc9RnQuY3JlYXRlVHlwZWRBcnJheShDLGcpLG89MDtvPGc7bysrKXdbb109bltzKytdfXJbaSsrXT1uZXcgQnQoe3ByaW1pdGl2ZVR5cGU6dSxnZW9tZXRyeVR5cGU6Yyxib3VuZGluZ1NwaGVyZTpwLGJvdW5kaW5nU3BoZXJlQ1Y6ZCxpbmRpY2VzOncsYXR0cmlidXRlczpPLG9mZnNldEF0dHJpYnV0ZTpsfSl9cmV0dXJuIHJ9O0lpLnBhY2tDb21iaW5lR2VvbWV0cnlQYXJhbWV0ZXJzPWZ1bmN0aW9uKHQsZSl7bGV0IG49dC5jcmVhdGVHZW9tZXRyeVJlc3VsdHMsbz1uLmxlbmd0aDtmb3IobGV0IHI9MDtyPG87cisrKWUucHVzaChuW3JdLnBhY2tlZERhdGEuYnVmZmVyKTtyZXR1cm57Y3JlYXRlR2VvbWV0cnlSZXN1bHRzOnQuY3JlYXRlR2VvbWV0cnlSZXN1bHRzLHBhY2tlZEluc3RhbmNlczp3TSh0Lmluc3RhbmNlcyxlKSxlbGxpcHNvaWQ6dC5lbGxpcHNvaWQsaXNHZW9ncmFwaGljOnQucHJvamVjdGlvbiBpbnN0YW5jZW9mIEpuLGVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQ6dC5lbGVtZW50SW5kZXhVaW50U3VwcG9ydGVkLHNjZW5lM0RPbmx5OnQuc2NlbmUzRE9ubHksdmVydGV4Q2FjaGVPcHRpbWl6ZTp0LnZlcnRleENhY2hlT3B0aW1pemUsY29tcHJlc3NWZXJ0aWNlczp0LmNvbXByZXNzVmVydGljZXMsbW9kZWxNYXRyaXg6dC5tb2RlbE1hdHJpeCxjcmVhdGVQaWNrT2Zmc2V0czp0LmNyZWF0ZVBpY2tPZmZzZXRzfX07SWkudW5wYWNrQ29tYmluZUdlb21ldHJ5UGFyYW1ldGVycz1mdW5jdGlvbih0KXtsZXQgZT1PTSh0LnBhY2tlZEluc3RhbmNlcyksbj10LmNyZWF0ZUdlb21ldHJ5UmVzdWx0cyxvPW4ubGVuZ3RoLHI9MDtmb3IobGV0IGY9MDtmPG87ZisrKXtsZXQgdT1JaS51bnBhY2tDcmVhdGVHZW9tZXRyeVJlc3VsdHMobltmXSksYz11Lmxlbmd0aDtmb3IobGV0IGw9MDtsPGM7bCsrKXtsZXQgcD11W2xdLGQ9ZVtyXTtkLmdlb21ldHJ5PXAsKytyfX1sZXQgaT1ZLmNsb25lKHQuZWxsaXBzb2lkKSxzPXQuaXNHZW9ncmFwaGljP25ldyBKbihpKTpuZXcgbm8oaSk7cmV0dXJue2luc3RhbmNlczplLGVsbGlwc29pZDppLHByb2plY3Rpb246cyxlbGVtZW50SW5kZXhVaW50U3VwcG9ydGVkOnQuZWxlbWVudEluZGV4VWludFN1cHBvcnRlZCxzY2VuZTNET25seTp0LnNjZW5lM0RPbmx5LHZlcnRleENhY2hlT3B0aW1pemU6dC52ZXJ0ZXhDYWNoZU9wdGltaXplLGNvbXByZXNzVmVydGljZXM6dC5jb21wcmVzc1ZlcnRpY2VzLG1vZGVsTWF0cml4Oml0LmNsb25lKHQubW9kZWxNYXRyaXgpLGNyZWF0ZVBpY2tPZmZzZXRzOnQuY3JlYXRlUGlja09mZnNldHN9fTtJaS5wYWNrQ29tYmluZUdlb21ldHJ5UmVzdWx0cz1mdW5jdGlvbih0LGUpe2godC5nZW9tZXRyaWVzKSYmYk0odC5nZW9tZXRyaWVzLGUpO2xldCBuPW9UKHQuYm91bmRpbmdTcGhlcmVzKSxvPW9UKHQuYm91bmRpbmdTcGhlcmVzQ1YpO3JldHVybiBlLnB1c2gobi5idWZmZXIsby5idWZmZXIpLHtnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcyxhdHRyaWJ1dGVMb2NhdGlvbnM6dC5hdHRyaWJ1dGVMb2NhdGlvbnMsbW9kZWxNYXRyaXg6dC5tb2RlbE1hdHJpeCxwaWNrT2Zmc2V0czp0LnBpY2tPZmZzZXRzLG9mZnNldEluc3RhbmNlRXh0ZW5kOnQub2Zmc2V0SW5zdGFuY2VFeHRlbmQsYm91bmRpbmdTcGhlcmVzOm4sYm91bmRpbmdTcGhlcmVzQ1Y6b319O0lpLnVucGFja0NvbWJpbmVHZW9tZXRyeVJlc3VsdHM9ZnVuY3Rpb24odCl7cmV0dXJue2dlb21ldHJpZXM6dC5nZW9tZXRyaWVzLGF0dHJpYnV0ZUxvY2F0aW9uczp0LmF0dHJpYnV0ZUxvY2F0aW9ucyxtb2RlbE1hdHJpeDp0Lm1vZGVsTWF0cml4LHBpY2tPZmZzZXRzOnQucGlja09mZnNldHMsb2Zmc2V0SW5zdGFuY2VFeHRlbmQ6dC5vZmZzZXRJbnN0YW5jZUV4dGVuZCxib3VuZGluZ1NwaGVyZXM6clQodC5ib3VuZGluZ1NwaGVyZXMpLGJvdW5kaW5nU3BoZXJlc0NWOnJUKHQuYm91bmRpbmdTcGhlcmVzQ1YpfX07c2E9SWl9KTtmdW5jdGlvbiBFTSh0KXtsZXQgZSxuPXQubmFtZSxvPXQubWVzc2FnZTtoKG4pJiZoKG8pP2U9YCR7bn06ICR7b31gOmU9dC50b1N0cmluZygpO2xldCByPXQuc3RhY2s7cmV0dXJuIGgocikmJihlKz1gCiR7cn1gKSxlfXZhciBpVCxzVD0kKCgpPT57YXQoKTtpVD1FTX0pO3ZhciBvMD17fTtwZShvMCx7ZGVmYXVsdDooKT0+UWV9KTtmdW5jdGlvbiBSTSh0KXthc3luYyBmdW5jdGlvbiBlKHtkYXRhOm99KXtsZXQgcj1bXSxpPXtpZDpvLmlkLHJlc3VsdDp2b2lkIDAsZXJyb3I6dm9pZCAwfTtzZWxmLkNFU0lVTV9CQVNFX1VSTD1vLmJhc2VVcmw7dHJ5e2xldCBzPWF3YWl0IHQoby5wYXJhbWV0ZXJzLHIpO2kucmVzdWx0PXN9Y2F0Y2gocyl7cyBpbnN0YW5jZW9mIEVycm9yP2kuZXJyb3I9e25hbWU6cy5uYW1lLG1lc3NhZ2U6cy5tZXNzYWdlLHN0YWNrOnMuc3RhY2t9OmkuZXJyb3I9c31vLmNhblRyYW5zZmVyQXJyYXlCdWZmZXJ8fChyLmxlbmd0aD0wKTt0cnl7cG9zdE1lc3NhZ2UoaSxyKX1jYXRjaChzKXtpLnJlc3VsdD12b2lkIDAsaS5lcnJvcj1gcG9zdE1lc3NhZ2UgZmFpbGVkIHdpdGggZXJyb3I6ICR7aVQocyl9CiAgd2l0aCByZXNwb25zZU1lc3NhZ2U6ICR7SlNPTi5zdHJpbmdpZnkoaSl9YCxwb3N0TWVzc2FnZShpKX19ZnVuY3Rpb24gbihvKXtwb3N0TWVzc2FnZSh7aWQ6by5kYXRhPy5pZCxlcnJvcjpgcG9zdE1lc3NhZ2UgZmFpbGVkIHdpdGggZXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkobyl9YH0pfXJldHVybiBzZWxmLm9ubWVzc2FnZT1lLHNlbGYub25tZXNzYWdlZXJyb3I9bixzZWxmfXZhciBRZSxzbz0kKCgpPT57c1QoKTtRZT1STX0pO3ZhciByMD17fTtwZShyMCx7ZGVmYXVsdDooKT0+Q019KTtmdW5jdGlvbiBTTSh0LGUpe2xldCBuPXNhLnVucGFja0NvbWJpbmVHZW9tZXRyeVBhcmFtZXRlcnModCksbz1zYS5jb21iaW5lR2VvbWV0cnkobik7cmV0dXJuIHNhLnBhY2tDb21iaW5lR2VvbWV0cnlSZXN1bHRzKG8sZSl9dmFyIENNLGkwPSQoKCk9PntuMCgpO3NvKCk7Q009UWUoU00pfSk7dmFyIHhNLGFlLEZvPSQoKCk9Pnt4TT17Tk9ORTowLFRPUDoxLEFMTDoyfSxhZT1PYmplY3QuZnJlZXplKHhNKX0pO2Z1bmN0aW9uIFZuKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNULHRoaXMucG9zaXRpb249dC5wb3NpdGlvbj8/ITEsdGhpcy5ub3JtYWw9dC5ub3JtYWw/PyExLHRoaXMuc3Q9dC5zdD8/ITEsdGhpcy5iaXRhbmdlbnQ9dC5iaXRhbmdlbnQ/PyExLHRoaXMudGFuZ2VudD10LnRhbmdlbnQ/PyExLHRoaXMuY29sb3I9dC5jb2xvcj8/ITF9dmFyIHB0LFJvPSQoKCk9Pnt5ZSgpO2F0KCk7anQoKTtWbi5QT1NJVElPTl9PTkxZPU9iamVjdC5mcmVlemUobmV3IFZuKHtwb3NpdGlvbjohMH0pKTtWbi5QT1NJVElPTl9BTkRfTk9STUFMPU9iamVjdC5mcmVlemUobmV3IFZuKHtwb3NpdGlvbjohMCxub3JtYWw6ITB9KSk7Vm4uUE9TSVRJT05fTk9STUFMX0FORF9TVD1PYmplY3QuZnJlZXplKG5ldyBWbih7cG9zaXRpb246ITAsbm9ybWFsOiEwLHN0OiEwfSkpO1ZuLlBPU0lUSU9OX0FORF9TVD1PYmplY3QuZnJlZXplKG5ldyBWbih7cG9zaXRpb246ITAsc3Q6ITB9KSk7Vm4uUE9TSVRJT05fQU5EX0NPTE9SPU9iamVjdC5mcmVlemUobmV3IFZuKHtwb3NpdGlvbjohMCxjb2xvcjohMH0pKTtWbi5BTEw9T2JqZWN0LmZyZWV6ZShuZXcgVm4oe3Bvc2l0aW9uOiEwLG5vcm1hbDohMCxzdDohMCx0YW5nZW50OiEwLGJpdGFuZ2VudDohMH0pKTtWbi5ERUZBVUxUPVZuLlBPU0lUSU9OX05PUk1BTF9BTkRfU1Q7Vm4ucGFja2VkTGVuZ3RoPTY7Vm4ucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoInZhbHVlIGlzIHJlcXVpcmVkIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoImFycmF5IGlzIHJlcXVpcmVkIik7cmV0dXJuIG49bj8/MCxlW24rK109dC5wb3NpdGlvbj8xOjAsZVtuKytdPXQubm9ybWFsPzE6MCxlW24rK109dC5zdD8xOjAsZVtuKytdPXQudGFuZ2VudD8xOjAsZVtuKytdPXQuYml0YW5nZW50PzE6MCxlW25dPXQuY29sb3I/MTowLGV9O1ZuLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoImFycmF5IGlzIHJlcXVpcmVkIik7cmV0dXJuIGU9ZT8/MCxoKG4pfHwobj1uZXcgVm4pLG4ucG9zaXRpb249dFtlKytdPT09MSxuLm5vcm1hbD10W2UrK109PT0xLG4uc3Q9dFtlKytdPT09MSxuLnRhbmdlbnQ9dFtlKytdPT09MSxuLmJpdGFuZ2VudD10W2UrK109PT0xLG4uY29sb3I9dFtlXT09PTEsbn07Vm4uY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpfHwoZT1uZXcgVm4pLGUucG9zaXRpb249dC5wb3NpdGlvbixlLm5vcm1hbD10Lm5vcm1hbCxlLnN0PXQuc3QsZS50YW5nZW50PXQudGFuZ2VudCxlLmJpdGFuZ2VudD10LmJpdGFuZ2VudCxlLmNvbG9yPXQuY29sb3IsZX07cHQ9Vm59KTtmdW5jdGlvbiBycih0KXt0PXQ/P050LkVNUFRZX09CSkVDVDtsZXQgZT10Lm1pbmltdW0sbj10Lm1heGltdW07aWYoeS50eXBlT2Yub2JqZWN0KCJtaW4iLGUpLHkudHlwZU9mLm9iamVjdCgibWF4IixuKSxoKHQub2Zmc2V0QXR0cmlidXRlKSYmdC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApdGhyb3cgbmV3IEwoIkdlb21ldHJ5T2Zmc2V0QXR0cmlidXRlLlRPUCBpcyBub3QgYSBzdXBwb3J0ZWQgb3B0aW9ucy5vZmZzZXRBdHRyaWJ1dGUgZm9yIHRoaXMgZ2VvbWV0cnkuIik7bGV0IG89dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQ7dGhpcy5fbWluaW11bT1hLmNsb25lKGUpLHRoaXMuX21heGltdW09YS5jbG9uZShuKSx0aGlzLl92ZXJ0ZXhGb3JtYXQ9byx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQm94R2VvbWV0cnkifXZhciBQTSxhVCxmVCx1VCxjVCxzMCxTZixjMD0kKCgpPT57dmUoKTtMdCgpO1d0KCk7RGUoKTt5ZSgpO2F0KCk7anQoKTtYZSgpO1llKCk7YW4oKTtGbygpO3RuKCk7Um8oKTtQTT1uZXcgYTtyci5mcm9tRGltZW5zaW9ucz1mdW5jdGlvbih0KXt0PXQ/P050LkVNUFRZX09CSkVDVDtsZXQgZT10LmRpbWVuc2lvbnM7eS50eXBlT2Yub2JqZWN0KCJkaW1lbnNpb25zIixlKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZGltZW5zaW9ucy54IixlLngsMCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImRpbWVuc2lvbnMueSIsZS55LDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJkaW1lbnNpb25zLnoiLGUueiwwKTtsZXQgbj1hLm11bHRpcGx5QnlTY2FsYXIoZSwuNSxuZXcgYSk7cmV0dXJuIG5ldyBycih7bWluaW11bTphLm5lZ2F0ZShuLG5ldyBhKSxtYXhpbXVtOm4sdmVydGV4Rm9ybWF0OnQudmVydGV4Rm9ybWF0LG9mZnNldEF0dHJpYnV0ZTp0Lm9mZnNldEF0dHJpYnV0ZX0pfTtyci5mcm9tQXhpc0FsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJib3VuZGluZ0JveCIsdCksbmV3IHJyKHttaW5pbXVtOnQubWluaW11bSxtYXhpbXVtOnQubWF4aW11bX0pfTtyci5wYWNrZWRMZW5ndGg9MiphLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrMTtyci5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGEucGFjayh0Ll9taW5pbXVtLGUsbiksYS5wYWNrKHQuX21heGltdW0sZSxuK2EucGFja2VkTGVuZ3RoKSxwdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4rMiphLnBhY2tlZExlbmd0aCksZVtuKzIqYS5wYWNrZWRMZW5ndGgrcHQucGFja2VkTGVuZ3RoXT10Ll9vZmZzZXRBdHRyaWJ1dGU/Py0xLGV9O2FUPW5ldyBhLGZUPW5ldyBhLHVUPW5ldyBwdCxjVD17bWluaW11bTphVCxtYXhpbXVtOmZULHZlcnRleEZvcm1hdDp1VCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtyci51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1hLnVucGFjayh0LGUsYVQpLHI9YS51bnBhY2sodCxlK2EucGFja2VkTGVuZ3RoLGZUKSxpPXB0LnVucGFjayh0LGUrMiphLnBhY2tlZExlbmd0aCx1VCkscz10W2UrMiphLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGhdO3JldHVybiBoKG4pPyhuLl9taW5pbXVtPWEuY2xvbmUobyxuLl9taW5pbXVtKSxuLl9tYXhpbXVtPWEuY2xvbmUocixuLl9tYXhpbXVtKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX29mZnNldEF0dHJpYnV0ZT1zPT09LTE/dm9pZCAwOnMsbik6KGNULm9mZnNldEF0dHJpYnV0ZT1zPT09LTE/dm9pZCAwOnMsbmV3IHJyKGNUKSl9O3JyLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX21pbmltdW0sbj10Ll9tYXhpbXVtLG89dC5fdmVydGV4Rm9ybWF0O2lmKGEuZXF1YWxzKGUsbikpcmV0dXJuO2xldCByPW5ldyByZSxpLHM7aWYoby5wb3NpdGlvbiYmKG8uc3R8fG8ubm9ybWFsfHxvLnRhbmdlbnR8fG8uYml0YW5nZW50KSl7aWYoby5wb3NpdGlvbiYmKHM9bmV3IEZsb2F0NjRBcnJheSg2KjQqMyksc1swXT1lLngsc1sxXT1lLnksc1syXT1uLnosc1szXT1uLngsc1s0XT1lLnksc1s1XT1uLnosc1s2XT1uLngsc1s3XT1uLnksc1s4XT1uLnosc1s5XT1lLngsc1sxMF09bi55LHNbMTFdPW4ueixzWzEyXT1lLngsc1sxM109ZS55LHNbMTRdPWUueixzWzE1XT1uLngsc1sxNl09ZS55LHNbMTddPWUueixzWzE4XT1uLngsc1sxOV09bi55LHNbMjBdPWUueixzWzIxXT1lLngsc1syMl09bi55LHNbMjNdPWUueixzWzI0XT1uLngsc1syNV09ZS55LHNbMjZdPWUueixzWzI3XT1uLngsc1syOF09bi55LHNbMjldPWUueixzWzMwXT1uLngsc1szMV09bi55LHNbMzJdPW4ueixzWzMzXT1uLngsc1szNF09ZS55LHNbMzVdPW4ueixzWzM2XT1lLngsc1szN109ZS55LHNbMzhdPWUueixzWzM5XT1lLngsc1s0MF09bi55LHNbNDFdPWUueixzWzQyXT1lLngsc1s0M109bi55LHNbNDRdPW4ueixzWzQ1XT1lLngsc1s0Nl09ZS55LHNbNDddPW4ueixzWzQ4XT1lLngsc1s0OV09bi55LHNbNTBdPWUueixzWzUxXT1uLngsc1s1Ml09bi55LHNbNTNdPWUueixzWzU0XT1uLngsc1s1NV09bi55LHNbNTZdPW4ueixzWzU3XT1lLngsc1s1OF09bi55LHNbNTldPW4ueixzWzYwXT1lLngsc1s2MV09ZS55LHNbNjJdPWUueixzWzYzXT1uLngsc1s2NF09ZS55LHNbNjVdPWUueixzWzY2XT1uLngsc1s2N109ZS55LHNbNjhdPW4ueixzWzY5XT1lLngsc1s3MF09ZS55LHNbNzFdPW4ueixyLnBvc2l0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6c30pKSxvLm5vcm1hbCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg3Mik7Y1swXT0wLGNbMV09MCxjWzJdPTEsY1szXT0wLGNbNF09MCxjWzVdPTEsY1s2XT0wLGNbN109MCxjWzhdPTEsY1s5XT0wLGNbMTBdPTAsY1sxMV09MSxjWzEyXT0wLGNbMTNdPTAsY1sxNF09LTEsY1sxNV09MCxjWzE2XT0wLGNbMTddPS0xLGNbMThdPTAsY1sxOV09MCxjWzIwXT0tMSxjWzIxXT0wLGNbMjJdPTAsY1syM109LTEsY1syNF09MSxjWzI1XT0wLGNbMjZdPTAsY1syN109MSxjWzI4XT0wLGNbMjldPTAsY1szMF09MSxjWzMxXT0wLGNbMzJdPTAsY1szM109MSxjWzM0XT0wLGNbMzVdPTAsY1szNl09LTEsY1szN109MCxjWzM4XT0wLGNbMzldPS0xLGNbNDBdPTAsY1s0MV09MCxjWzQyXT0tMSxjWzQzXT0wLGNbNDRdPTAsY1s0NV09LTEsY1s0Nl09MCxjWzQ3XT0wLGNbNDhdPTAsY1s0OV09MSxjWzUwXT0wLGNbNTFdPTAsY1s1Ml09MSxjWzUzXT0wLGNbNTRdPTAsY1s1NV09MSxjWzU2XT0wLGNbNTddPTAsY1s1OF09MSxjWzU5XT0wLGNbNjBdPTAsY1s2MV09LTEsY1s2Ml09MCxjWzYzXT0wLGNbNjRdPS0xLGNbNjVdPTAsY1s2Nl09MCxjWzY3XT0tMSxjWzY4XT0wLGNbNjldPTAsY1s3MF09LTEsY1s3MV09MCxyLm5vcm1hbD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfWlmKG8uc3Qpe2xldCBjPW5ldyBGbG9hdDMyQXJyYXkoNDgpO2NbMF09MCxjWzFdPTAsY1syXT0xLGNbM109MCxjWzRdPTEsY1s1XT0xLGNbNl09MCxjWzddPTEsY1s4XT0xLGNbOV09MCxjWzEwXT0wLGNbMTFdPTAsY1sxMl09MCxjWzEzXT0xLGNbMTRdPTEsY1sxNV09MSxjWzE2XT0wLGNbMTddPTAsY1sxOF09MSxjWzE5XT0wLGNbMjBdPTEsY1syMV09MSxjWzIyXT0wLGNbMjNdPTEsY1syNF09MSxjWzI1XT0wLGNbMjZdPTAsY1syN109MCxjWzI4XT0wLGNbMjldPTEsY1szMF09MSxjWzMxXT0xLGNbMzJdPTEsY1szM109MCxjWzM0XT0wLGNbMzVdPTAsY1szNl09MCxjWzM3XT0xLGNbMzhdPTEsY1szOV09MSxjWzQwXT0wLGNbNDFdPTAsY1s0Ml09MSxjWzQzXT0wLGNbNDRdPTEsY1s0NV09MSxjWzQ2XT0wLGNbNDddPTEsci5zdD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6Y30pfWlmKG8udGFuZ2VudCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg3Mik7Y1swXT0xLGNbMV09MCxjWzJdPTAsY1szXT0xLGNbNF09MCxjWzVdPTAsY1s2XT0xLGNbN109MCxjWzhdPTAsY1s5XT0xLGNbMTBdPTAsY1sxMV09MCxjWzEyXT0tMSxjWzEzXT0wLGNbMTRdPTAsY1sxNV09LTEsY1sxNl09MCxjWzE3XT0wLGNbMThdPS0xLGNbMTldPTAsY1syMF09MCxjWzIxXT0tMSxjWzIyXT0wLGNbMjNdPTAsY1syNF09MCxjWzI1XT0xLGNbMjZdPTAsY1syN109MCxjWzI4XT0xLGNbMjldPTAsY1szMF09MCxjWzMxXT0xLGNbMzJdPTAsY1szM109MCxjWzM0XT0xLGNbMzVdPTAsY1szNl09MCxjWzM3XT0tMSxjWzM4XT0wLGNbMzldPTAsY1s0MF09LTEsY1s0MV09MCxjWzQyXT0wLGNbNDNdPS0xLGNbNDRdPTAsY1s0NV09MCxjWzQ2XT0tMSxjWzQ3XT0wLGNbNDhdPS0xLGNbNDldPTAsY1s1MF09MCxjWzUxXT0tMSxjWzUyXT0wLGNbNTNdPTAsY1s1NF09LTEsY1s1NV09MCxjWzU2XT0wLGNbNTddPS0xLGNbNThdPTAsY1s1OV09MCxjWzYwXT0xLGNbNjFdPTAsY1s2Ml09MCxjWzYzXT0xLGNbNjRdPTAsY1s2NV09MCxjWzY2XT0xLGNbNjddPTAsY1s2OF09MCxjWzY5XT0xLGNbNzBdPTAsY1s3MV09MCxyLnRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KX1pZihvLmJpdGFuZ2VudCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg3Mik7Y1swXT0wLGNbMV09MSxjWzJdPTAsY1szXT0wLGNbNF09MSxjWzVdPTAsY1s2XT0wLGNbN109MSxjWzhdPTAsY1s5XT0wLGNbMTBdPTEsY1sxMV09MCxjWzEyXT0wLGNbMTNdPTEsY1sxNF09MCxjWzE1XT0wLGNbMTZdPTEsY1sxN109MCxjWzE4XT0wLGNbMTldPTEsY1syMF09MCxjWzIxXT0wLGNbMjJdPTEsY1syM109MCxjWzI0XT0wLGNbMjVdPTAsY1syNl09MSxjWzI3XT0wLGNbMjhdPTAsY1syOV09MSxjWzMwXT0wLGNbMzFdPTAsY1szMl09MSxjWzMzXT0wLGNbMzRdPTAsY1szNV09MSxjWzM2XT0wLGNbMzddPTAsY1szOF09MSxjWzM5XT0wLGNbNDBdPTAsY1s0MV09MSxjWzQyXT0wLGNbNDNdPTAsY1s0NF09MSxjWzQ1XT0wLGNbNDZdPTAsY1s0N109MSxjWzQ4XT0wLGNbNDldPTAsY1s1MF09MSxjWzUxXT0wLGNbNTJdPTAsY1s1M109MSxjWzU0XT0wLGNbNTVdPTAsY1s1Nl09MSxjWzU3XT0wLGNbNThdPTAsY1s1OV09MSxjWzYwXT0wLGNbNjFdPTAsY1s2Ml09MSxjWzYzXT0wLGNbNjRdPTAsY1s2NV09MSxjWzY2XT0wLGNbNjddPTAsY1s2OF09MSxjWzY5XT0wLGNbNzBdPTAsY1s3MV09MSxyLmJpdGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfWk9bmV3IFVpbnQxNkFycmF5KDYqMiozKSxpWzBdPTAsaVsxXT0xLGlbMl09MixpWzNdPTAsaVs0XT0yLGlbNV09MyxpWzZdPTYsaVs3XT01LGlbOF09NCxpWzldPTcsaVsxMF09NixpWzExXT00LGlbMTJdPTgsaVsxM109OSxpWzE0XT0xMCxpWzE1XT04LGlbMTZdPTEwLGlbMTddPTExLGlbMThdPTE0LGlbMTldPTEzLGlbMjBdPTEyLGlbMjFdPTE1LGlbMjJdPTE0LGlbMjNdPTEyLGlbMjRdPTE4LGlbMjVdPTE3LGlbMjZdPTE2LGlbMjddPTE5LGlbMjhdPTE4LGlbMjldPTE2LGlbMzBdPTIwLGlbMzFdPTIxLGlbMzJdPTIyLGlbMzNdPTIwLGlbMzRdPTIyLGlbMzVdPTIzfWVsc2Ugcz1uZXcgRmxvYXQ2NEFycmF5KDgqMyksc1swXT1lLngsc1sxXT1lLnksc1syXT1lLnosc1szXT1uLngsc1s0XT1lLnksc1s1XT1lLnosc1s2XT1uLngsc1s3XT1uLnksc1s4XT1lLnosc1s5XT1lLngsc1sxMF09bi55LHNbMTFdPWUueixzWzEyXT1lLngsc1sxM109ZS55LHNbMTRdPW4ueixzWzE1XT1uLngsc1sxNl09ZS55LHNbMTddPW4ueixzWzE4XT1uLngsc1sxOV09bi55LHNbMjBdPW4ueixzWzIxXT1lLngsc1syMl09bi55LHNbMjNdPW4ueixyLnBvc2l0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6c30pLGk9bmV3IFVpbnQxNkFycmF5KDYqMiozKSxpWzBdPTQsaVsxXT01LGlbMl09NixpWzNdPTQsaVs0XT02LGlbNV09NyxpWzZdPTEsaVs3XT0wLGlbOF09MyxpWzldPTEsaVsxMF09MyxpWzExXT0yLGlbMTJdPTEsaVsxM109NixpWzE0XT01LGlbMTVdPTEsaVsxNl09MixpWzE3XT02LGlbMThdPTIsaVsxOV09MyxpWzIwXT03LGlbMjFdPTIsaVsyMl09NyxpWzIzXT02LGlbMjRdPTMsaVsyNV09MCxpWzI2XT00LGlbMjddPTMsaVsyOF09NCxpWzI5XT03LGlbMzBdPTAsaVszMV09MSxpWzMyXT01LGlbMzNdPTAsaVszNF09NSxpWzM1XT00O2xldCBmPWEuc3VidHJhY3QobixlLFBNKSx1PWEubWFnbml0dWRlKGYpKi41O2lmKGgodC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGM9cy5sZW5ndGgsbD10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxwPW5ldyBVaW50OEFycmF5KGMvMykuZmlsbChsKTtyLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnB9KX1yZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOnIsaW5kaWNlczppLHByaW1pdGl2ZVR5cGU6RHQuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOm5ldyBndChhLlpFUk8sdSksb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtyci5nZXRVbml0Qm94PWZ1bmN0aW9uKCl7cmV0dXJuIGgoczApfHwoczA9cnIuY3JlYXRlR2VvbWV0cnkocnIuZnJvbURpbWVuc2lvbnMoe2RpbWVuc2lvbnM6bmV3IGEoMSwxLDEpLHZlcnRleEZvcm1hdDpwdC5QT1NJVElPTl9PTkxZfSkpKSxzMH07U2Y9cnJ9KTt2YXIgYTA9e307cGUoYTAse2RlZmF1bHQ6KCk9Pk5NfSk7ZnVuY3Rpb24gTU0odCxlKXtyZXR1cm4gaChlKSYmKHQ9U2YudW5wYWNrKHQsZSkpLFNmLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBOTSxmMD0kKCgpPT57YzAoKTthdCgpO05NPU1NfSk7ZnVuY3Rpb24gY2kodCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5taW5pbXVtLG49dC5tYXhpbXVtO2lmKHkudHlwZU9mLm9iamVjdCgibWluIixlKSx5LnR5cGVPZi5vYmplY3QoIm1heCIsbiksaCh0Lm9mZnNldEF0dHJpYnV0ZSkmJnQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXRocm93IG5ldyBMKCJHZW9tZXRyeU9mZnNldEF0dHJpYnV0ZS5UT1AgaXMgbm90IGEgc3VwcG9ydGVkIG9wdGlvbnMub2Zmc2V0QXR0cmlidXRlIGZvciB0aGlzIGdlb21ldHJ5LiIpO3RoaXMuX21pbj1hLmNsb25lKGUpLHRoaXMuX21heD1hLmNsb25lKG4pLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVCb3hPdXRsaW5lR2VvbWV0cnkifXZhciBJTSxwVCxkVCxsVCx1MCxtVD0kKCgpPT57dmUoKTtMdCgpO1d0KCk7RGUoKTt5ZSgpO2F0KCk7anQoKTtYZSgpO1llKCk7YW4oKTtGbygpO3RuKCk7SU09bmV3IGE7Y2kuZnJvbURpbWVuc2lvbnM9ZnVuY3Rpb24odCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5kaW1lbnNpb25zO3kudHlwZU9mLm9iamVjdCgiZGltZW5zaW9ucyIsZSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImRpbWVuc2lvbnMueCIsZS54LDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJkaW1lbnNpb25zLnkiLGUueSwwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZGltZW5zaW9ucy56IixlLnosMCk7bGV0IG49YS5tdWx0aXBseUJ5U2NhbGFyKGUsLjUsbmV3IGEpO3JldHVybiBuZXcgY2koe21pbmltdW06YS5uZWdhdGUobixuZXcgYSksbWF4aW11bTpuLG9mZnNldEF0dHJpYnV0ZTp0Lm9mZnNldEF0dHJpYnV0ZX0pfTtjaS5mcm9tQXhpc0FsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJib3VuZGluZEJveCIsdCksbmV3IGNpKHttaW5pbXVtOnQubWluaW11bSxtYXhpbXVtOnQubWF4aW11bX0pfTtjaS5wYWNrZWRMZW5ndGg9MiphLnBhY2tlZExlbmd0aCsxO2NpLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsYS5wYWNrKHQuX21pbixlLG4pLGEucGFjayh0Ll9tYXgsZSxuK2EucGFja2VkTGVuZ3RoKSxlW24rYS5wYWNrZWRMZW5ndGgqMl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtwVD1uZXcgYSxkVD1uZXcgYSxsVD17bWluaW11bTpwVCxtYXhpbXVtOmRULG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2NpLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wO2xldCBvPWEudW5wYWNrKHQsZSxwVCkscj1hLnVucGFjayh0LGUrYS5wYWNrZWRMZW5ndGgsZFQpLGk9dFtlK2EucGFja2VkTGVuZ3RoKjJdO3JldHVybiBoKG4pPyhuLl9taW49YS5jbG9uZShvLG4uX21pbiksbi5fbWF4PWEuY2xvbmUocixuLl9tYXgpLG4uX29mZnNldEF0dHJpYnV0ZT1pPT09LTE/dm9pZCAwOmksbik6KGxULm9mZnNldEF0dHJpYnV0ZT1pPT09LTE/dm9pZCAwOmksbmV3IGNpKGxUKSl9O2NpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX21pbixuPXQuX21heDtpZihhLmVxdWFscyhlLG4pKXJldHVybjtsZXQgbz1uZXcgcmUscj1uZXcgVWludDE2QXJyYXkoMTIqMiksaT1uZXcgRmxvYXQ2NEFycmF5KDgqMyk7aVswXT1lLngsaVsxXT1lLnksaVsyXT1lLnosaVszXT1uLngsaVs0XT1lLnksaVs1XT1lLnosaVs2XT1uLngsaVs3XT1uLnksaVs4XT1lLnosaVs5XT1lLngsaVsxMF09bi55LGlbMTFdPWUueixpWzEyXT1lLngsaVsxM109ZS55LGlbMTRdPW4ueixpWzE1XT1uLngsaVsxNl09ZS55LGlbMTddPW4ueixpWzE4XT1uLngsaVsxOV09bi55LGlbMjBdPW4ueixpWzIxXT1lLngsaVsyMl09bi55LGlbMjNdPW4ueixvLnBvc2l0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aX0pLHJbMF09NCxyWzFdPTUsclsyXT01LHJbM109NixyWzRdPTYscls1XT03LHJbNl09NyxyWzddPTQscls4XT0wLHJbOV09MSxyWzEwXT0xLHJbMTFdPTIsclsxMl09MixyWzEzXT0zLHJbMTRdPTMsclsxNV09MCxyWzE2XT0wLHJbMTddPTQsclsxOF09MSxyWzE5XT01LHJbMjBdPTIsclsyMV09NixyWzIyXT0zLHJbMjNdPTc7bGV0IHM9YS5zdWJ0cmFjdChuLGUsSU0pLGY9YS5tYWduaXR1ZGUocykqLjU7aWYoaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdT1pLmxlbmd0aCxjPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLGw9bmV3IFVpbnQ4QXJyYXkodS8zKS5maWxsKGMpO28uYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bH0pfXJldHVybiBuZXcgQnQoe2F0dHJpYnV0ZXM6byxpbmRpY2VzOnIscHJpbWl0aXZlVHlwZTpEdC5MSU5FUyxib3VuZGluZ1NwaGVyZTpuZXcgZ3QoYS5aRVJPLGYpLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07dTA9Y2l9KTt2YXIgbDA9e307cGUobDAse2RlZmF1bHQ6KCk9PkZNfSk7ZnVuY3Rpb24gdk0odCxlKXtyZXR1cm4gaChlKSYmKHQ9dTAudW5wYWNrKHQsZSkpLHUwLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBGTSxwMD0kKCgpPT57bVQoKTthdCgpO0ZNPXZNfSk7ZnVuY3Rpb24gY2EodCxlLG4sbyxyLGkscyxmLHUsYyl7bGV0IGw9dCtlO2EubXVsdGlwbHlCeVNjYWxhcihvLE1hdGguY29zKGwpLFdwKSxhLm11bHRpcGx5QnlTY2FsYXIobixNYXRoLnNpbihsKSxoVCksYS5hZGQoV3AsaFQsV3ApO2xldCBwPU1hdGguY29zKHQpO3A9cCpwO2xldCBkPU1hdGguc2luKHQpO2Q9ZCpkO2xldCBfPWkvTWF0aC5zcXJ0KHMqcCtyKmQpL2Y7cmV0dXJuIHRlLmZyb21BeGlzQW5nbGUoV3AsXyxfVCksWi5mcm9tUXVhdGVybmlvbihfVCx5VCksWi5tdWx0aXBseUJ5VmVjdG9yKHlULHUsYyksYS5ub3JtYWxpemUoYyxjKSxhLm11bHRpcGx5QnlTY2FsYXIoYyxmLGMpLGN9dmFyIG0wLFdwLGhULF9ULHlULGdULEFULGQwLExNLERNLEJNLFVNLEdyLGgwPSQoKCk9PntMdCgpO0t0KCk7Qm4oKTtLbygpO20wPXt9LFdwPW5ldyBhLGhUPW5ldyBhLF9UPW5ldyB0ZSx5VD1uZXcgWjtnVD1uZXcgYSxBVD1uZXcgYSxkMD1uZXcgYSxMTT1uZXcgYTttMC5yYWlzZVBvc2l0aW9uc1RvSGVpZ2h0PWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1lLmVsbGlwc29pZCxyPWUuaGVpZ2h0LGk9ZS5leHRydWRlZEhlaWdodCxzPW4/dC5sZW5ndGgvMyoyOnQubGVuZ3RoLzMsZj1uZXcgRmxvYXQ2NEFycmF5KHMqMyksdT10Lmxlbmd0aCxjPW4/dTowO2ZvcihsZXQgbD0wO2w8dTtsKz0zKXtsZXQgcD1sKzEsZD1sKzIsbT1hLmZyb21BcnJheSh0LGwsZ1QpO28uc2NhbGVUb0dlb2RldGljU3VyZmFjZShtLG0pO2xldCBfPWEuY2xvbmUobSxBVCksZz1vLmdlb2RldGljU3VyZmFjZU5vcm1hbChtLExNKSxiPWEubXVsdGlwbHlCeVNjYWxhcihnLHIsZDApO2EuYWRkKG0sYixtKSxuJiYoYS5tdWx0aXBseUJ5U2NhbGFyKGcsaSxiKSxhLmFkZChfLGIsXyksZltsK2NdPV8ueCxmW3ArY109Xy55LGZbZCtjXT1fLnopLGZbbF09bS54LGZbcF09bS55LGZbZF09bS56fXJldHVybiBmfTtETT1uZXcgYSxCTT1uZXcgYSxVTT1uZXcgYTttMC5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucz1mdW5jdGlvbih0LGUsbil7bGV0IG89dC5zZW1pTWlub3JBeGlzLHI9dC5zZW1pTWFqb3JBeGlzLGk9dC5yb3RhdGlvbixzPXQuY2VudGVyLGY9dC5ncmFudWxhcml0eSo4LHU9bypvLGM9cipyLGw9cipvLHA9YS5tYWduaXR1ZGUocyksZD1hLm5vcm1hbGl6ZShzLERNKSxtPWEuY3Jvc3MoYS5VTklUX1oscyxCTSk7bT1hLm5vcm1hbGl6ZShtLG0pO2xldCBfPWEuY3Jvc3MoZCxtLFVNKSxnPTErTWF0aC5jZWlsKFAuUElfT1ZFUl9UV08vZiksYj1QLlBJX09WRVJfVFdPLyhnLTEpLFQ9UC5QSV9PVkVSX1RXTy1nKmI7VDwwJiYoZy09TWF0aC5jZWlsKE1hdGguYWJzKFQpL2IpKTtsZXQgTz0yKihnKihnKzIpKSxFPWU/bmV3IEFycmF5KE8qMyk6dm9pZCAwLHc9MCxDPWdULE09QVQsTj1nKjQqMyxGPU4tMSxJPTAsdj1uP25ldyBBcnJheShOKTp2b2lkIDAsQixBLFMseCxEO2ZvcihUPVAuUElfT1ZFUl9UV08sQz1jYShULGksXyxtLHUsbCxjLHAsZCxDKSxlJiYoRVt3KytdPUMueCxFW3crK109Qy55LEVbdysrXT1DLnopLG4mJih2W0YtLV09Qy56LHZbRi0tXT1DLnksdltGLS1dPUMueCksVD1QLlBJX09WRVJfVFdPLWIsQj0xO0I8ZysxOysrQil7aWYoQz1jYShULGksXyxtLHUsbCxjLHAsZCxDKSxNPWNhKE1hdGguUEktVCxpLF8sbSx1LGwsYyxwLGQsTSksZSl7Zm9yKEVbdysrXT1DLngsRVt3KytdPUMueSxFW3crK109Qy56LFM9MipCKzIsQT0xO0E8Uy0xOysrQSl4PUEvKFMtMSksRD1hLmxlcnAoQyxNLHgsZDApLEVbdysrXT1ELngsRVt3KytdPUQueSxFW3crK109RC56O0VbdysrXT1NLngsRVt3KytdPU0ueSxFW3crK109TS56fW4mJih2W0YtLV09Qy56LHZbRi0tXT1DLnksdltGLS1dPUMueCx2W0krK109TS54LHZbSSsrXT1NLnksdltJKytdPU0ueiksVD1QLlBJX09WRVJfVFdPLShCKzEpKmJ9Zm9yKEI9ZztCPjE7LS1CKXtpZihUPVAuUElfT1ZFUl9UV08tKEItMSkqYixDPWNhKC1ULGksXyxtLHUsbCxjLHAsZCxDKSxNPWNhKFQrTWF0aC5QSSxpLF8sbSx1LGwsYyxwLGQsTSksZSl7Zm9yKEVbdysrXT1DLngsRVt3KytdPUMueSxFW3crK109Qy56LFM9MiooQi0xKSsyLEE9MTtBPFMtMTsrK0EpeD1BLyhTLTEpLEQ9YS5sZXJwKEMsTSx4LGQwKSxFW3crK109RC54LEVbdysrXT1ELnksRVt3KytdPUQuejtFW3crK109TS54LEVbdysrXT1NLnksRVt3KytdPU0uen1uJiYodltGLS1dPUMueix2W0YtLV09Qy55LHZbRi0tXT1DLngsdltJKytdPU0ueCx2W0krK109TS55LHZbSSsrXT1NLnopfVQ9UC5QSV9PVkVSX1RXTyxDPWNhKC1ULGksXyxtLHUsbCxjLHAsZCxDKTtsZXQgej17fTtyZXR1cm4gZSYmKEVbdysrXT1DLngsRVt3KytdPUMueSxFW3crK109Qy56LHoucG9zaXRpb25zPUUsei5udW1QdHM9ZyksbiYmKHZbRi0tXT1DLnosdltGLS1dPUMueSx2W0YtLV09Qy54LHoub3V0ZXJQb3NpdGlvbnM9diksen07R3I9bTB9KTtmdW5jdGlvbiBrTSh0KXtpZih0PXQ/P050LkVNUFRZX09CSkVDVCwhaCh0Lmdlb21ldHJ5KSl0aHJvdyBuZXcgTCgib3B0aW9ucy5nZW9tZXRyeSBpcyByZXF1aXJlZC4iKTt0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpcy5tb2RlbE1hdHJpeD1pdC5jbG9uZSh0Lm1vZGVsTWF0cml4Pz9pdC5JREVOVElUWSksdGhpcy5pZD10LmlkLHRoaXMucGlja1ByaW1pdGl2ZT10LnBpY2tQcmltaXRpdmUsdGhpcy5hdHRyaWJ1dGVzPXQuYXR0cmlidXRlcz8/e30sdGhpcy53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5PXZvaWQgMCx0aGlzLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnk9dm9pZCAwfXZhciBjbyxzYz0kKCgpPT57eWUoKTthdCgpO2p0KCk7VW4oKTtjbz1rTX0pO2Z1bmN0aW9uIHhUKHQsZSxuKXtsZXQgbz1lLnZlcnRleEZvcm1hdCxyPWUuY2VudGVyLGk9ZS5zZW1pTWFqb3JBeGlzLHM9ZS5zZW1pTWlub3JBeGlzLGY9ZS5lbGxpcHNvaWQsdT1lLnN0Um90YXRpb24sYz1uP3QubGVuZ3RoLzMqMjp0Lmxlbmd0aC8zLGw9ZS5zaGFkb3dWb2x1bWUscD1vLnN0P25ldyBGbG9hdDMyQXJyYXkoYyoyKTp2b2lkIDAsZD1vLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLG09by50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoYyozKTp2b2lkIDAsXz1vLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLGc9bD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLGI9MCxUPXdULE89T1QsRT1FVCx3PW5ldyBKbihmKSxDPXcucHJvamVjdChmLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHIsJHApLFJUKSxNPWYuc2NhbGVUb0dlb2RldGljU3VyZmFjZShyLGFhKTtmLmdlb2RldGljU3VyZmFjZU5vcm1hbChNLE0pO2xldCBOPVRULEY9R007aWYodSE9PTApe2xldCBEPXRlLmZyb21BeGlzQW5nbGUoTSx1LGcwKTtOPVouZnJvbVF1YXRlcm5pb24oRCxOKSxEPXRlLmZyb21BeGlzQW5nbGUoTSwtdSxnMCksRj1aLmZyb21RdWF0ZXJuaW9uKEQsRil9ZWxzZSBOPVouY2xvbmUoWi5JREVOVElUWSxOKSxGPVouY2xvbmUoWi5JREVOVElUWSxGKTtsZXQgST1KLmZyb21FbGVtZW50cyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFNUKSx2PUouZnJvbUVsZW1lbnRzKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksQ1QpLEI9dC5sZW5ndGgsQT1uP0I6MCxTPUEvMyoyO2ZvcihsZXQgRD0wO0Q8QjtEKz0zKXtsZXQgej1EKzEsaj1EKzIsaz1hLmZyb21BcnJheSh0LEQsYWEpO2lmKG8uc3Qpe2xldCBxPVoubXVsdGlwbHlCeVZlY3RvcihOLGssXzApLFc9dy5wcm9qZWN0KGYuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocSwkcCkseTApO2Euc3VidHJhY3QoVyxDLFcpLCRuLng9KFcueCtpKS8oMippKSwkbi55PShXLnkrcykvKDIqcyksSS54PU1hdGgubWluKCRuLngsSS54KSxJLnk9TWF0aC5taW4oJG4ueSxJLnkpLHYueD1NYXRoLm1heCgkbi54LHYueCksdi55PU1hdGgubWF4KCRuLnksdi55KSxuJiYocFtiK1NdPSRuLngscFtiKzErU109JG4ueSkscFtiKytdPSRuLngscFtiKytdPSRuLnl9KG8ubm9ybWFsfHxvLnRhbmdlbnR8fG8uYml0YW5nZW50fHxsKSYmKFQ9Zi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoayxUKSxsJiYoZ1tEK0FdPS1ULngsZ1t6K0FdPS1ULnksZ1tqK0FdPS1ULnopLChvLm5vcm1hbHx8by50YW5nZW50fHxvLmJpdGFuZ2VudCkmJigoby50YW5nZW50fHxvLmJpdGFuZ2VudCkmJihPPWEubm9ybWFsaXplKGEuY3Jvc3MoYS5VTklUX1osVCxPKSxPKSxaLm11bHRpcGx5QnlWZWN0b3IoRixPLE8pKSxvLm5vcm1hbCYmKGRbRF09VC54LGRbel09VC55LGRbal09VC56LG4mJihkW0QrQV09LVQueCxkW3orQV09LVQueSxkW2orQV09LVQueikpLG8udGFuZ2VudCYmKG1bRF09Ty54LG1bel09Ty55LG1bal09Ty56LG4mJihtW0QrQV09LU8ueCxtW3orQV09LU8ueSxtW2orQV09LU8ueikpLG8uYml0YW5nZW50JiYoRT1hLm5vcm1hbGl6ZShhLmNyb3NzKFQsTyxFKSxFKSxfW0RdPUUueCxfW3pdPUUueSxfW2pdPUUueixuJiYoX1tEK0FdPUUueCxfW3orQV09RS55LF9baitBXT1FLnopKSkpfWlmKG8uc3Qpe0I9cC5sZW5ndGg7Zm9yKGxldCBEPTA7RDxCO0QrPTIpcFtEXT0ocFtEXS1JLngpLyh2LngtSS54KSxwW0QrMV09KHBbRCsxXS1JLnkpLyh2LnktSS55KX1sZXQgeD1uZXcgcmU7aWYoby5wb3NpdGlvbil7bGV0IEQ9R3IucmFpc2VQb3NpdGlvbnNUb0hlaWdodCh0LGUsbik7eC5wb3NpdGlvbj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkR9KX1pZihvLnN0JiYoeC5zdD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6cH0pKSxvLm5vcm1hbCYmKHgubm9ybWFsPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpkfSkpLG8udGFuZ2VudCYmKHgudGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pKSxvLmJpdGFuZ2VudCYmKHguYml0YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpffSkpLGwmJih4LmV4dHJ1ZGVEaXJlY3Rpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmd9KSksbiYmaChlLm9mZnNldEF0dHJpYnV0ZSkpe2xldCBEPW5ldyBVaW50OEFycmF5KGMpO2lmKGUub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKUQ9RC5maWxsKDEsMCxjLzIpO2Vsc2V7bGV0IHo9ZS5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MTtEPUQuZmlsbCh6KX14LmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOkR9KX1yZXR1cm4geH1mdW5jdGlvbiBQVCh0KXtsZXQgZT1uZXcgQXJyYXkoMTIqKHQqKHQrMSkpLTYpLG49MCxvLHIsaSxzLGY7Zm9yKG89MCxpPTEscz0wO3M8MztzKyspZVtuKytdPWkrKyxlW24rK109byxlW24rK109aTtmb3Iocz0yO3M8dCsxOysrcyl7Zm9yKGk9cyoocysxKS0xLG89KHMtMSkqcy0xLGVbbisrXT1pKyssZVtuKytdPW8sZVtuKytdPWkscj0yKnMsZj0wO2Y8ci0xOysrZillW24rK109aSxlW24rK109bysrLGVbbisrXT1vLGVbbisrXT1pKyssZVtuKytdPW8sZVtuKytdPWk7ZVtuKytdPWkrKyxlW24rK109byxlW24rK109aX1mb3Iocj10KjIsKytpLCsrbyxzPTA7czxyLTE7KytzKWVbbisrXT1pLGVbbisrXT1vKyssZVtuKytdPW8sZVtuKytdPWkrKyxlW24rK109byxlW24rK109aTtmb3IoZVtuKytdPWksZVtuKytdPW8rKyxlW24rK109byxlW24rK109aSsrLGVbbisrXT1vKyssZVtuKytdPW8sKytvLHM9dC0xO3M+MTstLXMpe2ZvcihlW24rK109bysrLGVbbisrXT1vLGVbbisrXT1pLHI9MipzLGY9MDtmPHItMTsrK2YpZVtuKytdPWksZVtuKytdPW8rKyxlW24rK109byxlW24rK109aSsrLGVbbisrXT1vLGVbbisrXT1pO2VbbisrXT1vKyssZVtuKytdPW8rKyxlW24rK109aSsrfWZvcihzPTA7czwzO3MrKyllW24rK109bysrLGVbbisrXT1vLGVbbisrXT1pO3JldHVybiBlfWZ1bmN0aW9uIFZNKHQpe2xldCBlPXQuY2VudGVyO2NjPWEubXVsdGlwbHlCeVNjYWxhcih0LmVsbGlwc29pZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSxjYyksdC5oZWlnaHQsY2MpLGNjPWEuYWRkKGUsY2MsY2MpO2xldCBuPW5ldyBndChjYyx0LnNlbWlNYWpvckF4aXMpLG89R3IuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnModCwhMCwhMSkscj1vLnBvc2l0aW9ucyxpPW8ubnVtUHRzLHM9eFQocix0LCExKSxmPVBUKGkpO3JldHVybiBmPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoci5sZW5ndGgvMyxmKSx7Ym91bmRpbmdTcGhlcmU6bixhdHRyaWJ1dGVzOnMsaW5kaWNlczpmfX1mdW5jdGlvbiB6TSh0LGUpe2xldCBuPWUudmVydGV4Rm9ybWF0LG89ZS5jZW50ZXIscj1lLnNlbWlNYWpvckF4aXMsaT1lLnNlbWlNaW5vckF4aXMscz1lLmVsbGlwc29pZCxmPWUuaGVpZ2h0LHU9ZS5leHRydWRlZEhlaWdodCxjPWUuc3RSb3RhdGlvbixsPXQubGVuZ3RoLzMqMixwPW5ldyBGbG9hdDY0QXJyYXkobCozKSxkPW4uc3Q/bmV3IEZsb2F0MzJBcnJheShsKjIpOnZvaWQgMCxtPW4ubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkobCozKTp2b2lkIDAsXz1uLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShsKjMpOnZvaWQgMCxnPW4uYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkobCozKTp2b2lkIDAsYj1lLnNoYWRvd1ZvbHVtZSxUPWI/bmV3IEZsb2F0MzJBcnJheShsKjMpOnZvaWQgMCxPPTAsRT13VCx3PU9ULEM9RVQsTT1uZXcgSm4ocyksTj1NLnByb2plY3Qocy5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhvLCRwKSxSVCksRj1zLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UobyxhYSk7cy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoRixGKTtsZXQgST10ZS5mcm9tQXhpc0FuZ2xlKEYsYyxnMCksdj1aLmZyb21RdWF0ZXJuaW9uKEksVFQpLEI9Si5mcm9tRWxlbWVudHMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxTVCksQT1KLmZyb21FbGVtZW50cyhOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLENUKSxTPXQubGVuZ3RoLHg9Uy8zKjI7Zm9yKGxldCB6PTA7ejxTO3orPTMpe2xldCBqPXorMSxrPXorMixxPWEuZnJvbUFycmF5KHQseixhYSksVztpZihuLnN0KXtsZXQgbnQ9Wi5tdWx0aXBseUJ5VmVjdG9yKHYscSxfMCksY3Q9TS5wcm9qZWN0KHMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobnQsJHApLHkwKTthLnN1YnRyYWN0KGN0LE4sY3QpLCRuLng9KGN0LngrcikvKDIqciksJG4ueT0oY3QueStpKS8oMippKSxCLng9TWF0aC5taW4oJG4ueCxCLngpLEIueT1NYXRoLm1pbigkbi55LEIueSksQS54PU1hdGgubWF4KCRuLngsQS54KSxBLnk9TWF0aC5tYXgoJG4ueSxBLnkpLGRbTyt4XT0kbi54LGRbTysxK3hdPSRuLnksZFtPKytdPSRuLngsZFtPKytdPSRuLnl9cT1zLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UocSxxKSxXPWEuY2xvbmUocSxfMCksRT1zLmdlb2RldGljU3VyZmFjZU5vcm1hbChxLEUpLGImJihUW3orU109LUUueCxUW2orU109LUUueSxUW2srU109LUUueik7bGV0IFI9YS5tdWx0aXBseUJ5U2NhbGFyKEUsZixiVCk7aWYocT1hLmFkZChxLFIscSksUj1hLm11bHRpcGx5QnlTY2FsYXIoRSx1LFIpLFc9YS5hZGQoVyxSLFcpLG4ucG9zaXRpb24mJihwW3orU109Vy54LHBbaitTXT1XLnkscFtrK1NdPVcueixwW3pdPXEueCxwW2pdPXEueSxwW2tdPXEueiksbi5ub3JtYWx8fG4udGFuZ2VudHx8bi5iaXRhbmdlbnQpe0M9YS5jbG9uZShFLEMpO2xldCBudD1hLmZyb21BcnJheSh0LCh6KzMpJVMsYlQpO2Euc3VidHJhY3QobnQscSxudCk7bGV0IGN0PWEuc3VidHJhY3QoVyxxLHkwKTtFPWEubm9ybWFsaXplKGEuY3Jvc3MoY3QsbnQsRSksRSksbi5ub3JtYWwmJihtW3pdPUUueCxtW2pdPUUueSxtW2tdPUUueixtW3orU109RS54LG1baitTXT1FLnksbVtrK1NdPUUueiksbi50YW5nZW50JiYodz1hLm5vcm1hbGl6ZShhLmNyb3NzKEMsRSx3KSx3KSxfW3pdPXcueCxfW2pdPXcueSxfW2tdPXcueixfW3orU109dy54LF9beisxK1NdPXcueSxfW3orMitTXT13LnopLG4uYml0YW5nZW50JiYoZ1t6XT1DLngsZ1tqXT1DLnksZ1trXT1DLnosZ1t6K1NdPUMueCxnW2orU109Qy55LGdbaytTXT1DLnopfX1pZihuLnN0KXtTPWQubGVuZ3RoO2ZvcihsZXQgej0wO3o8Uzt6Kz0yKWRbel09KGRbel0tQi54KS8oQS54LUIueCksZFt6KzFdPShkW3orMV0tQi55KS8oQS55LUIueSl9bGV0IEQ9bmV3IHJlO2lmKG4ucG9zaXRpb24mJihELnBvc2l0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pKSxuLnN0JiYoRC5zdD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6ZH0pKSxuLm5vcm1hbCYmKEQubm9ybWFsPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczptfSkpLG4udGFuZ2VudCYmKEQudGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6X30pKSxuLmJpdGFuZ2VudCYmKEQuYml0YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpnfSkpLGImJihELmV4dHJ1ZGVEaXJlY3Rpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOlR9KSksaChlLm9mZnNldEF0dHJpYnV0ZSkpe2xldCB6PW5ldyBVaW50OEFycmF5KGwpO2lmKGUub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXo9ei5maWxsKDEsMCxsLzIpO2Vsc2V7bGV0IGo9ZS5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MTt6PXouZmlsbChqKX1ELmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnp9KX1yZXR1cm4gRH1mdW5jdGlvbiBqTSh0KXtsZXQgZT10Lmxlbmd0aC8zLG49RnQuY3JlYXRlVHlwZWRBcnJheShlLGUqNiksbz0wO2ZvcihsZXQgcj0wO3I8ZTtyKyspe2xldCBpPXIscz1yK2UsZj0oaSsxKSVlLHU9ZitlO25bbysrXT1pLG5bbysrXT1zLG5bbysrXT1mLG5bbysrXT1mLG5bbysrXT1zLG5bbysrXT11fXJldHVybiBufWZ1bmN0aW9uIEhNKHQpe2xldCBlPXQuY2VudGVyLG49dC5lbGxpcHNvaWQsbz10LnNlbWlNYWpvckF4aXMscj1hLm11bHRpcGx5QnlTY2FsYXIobi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSxhYSksdC5oZWlnaHQsYWEpO1hwLmNlbnRlcj1hLmFkZChlLHIsWHAuY2VudGVyKSxYcC5yYWRpdXM9byxyPWEubXVsdGlwbHlCeVNjYWxhcihuLmdlb2RldGljU3VyZmFjZU5vcm1hbChlLHIpLHQuZXh0cnVkZWRIZWlnaHQsciksWXAuY2VudGVyPWEuYWRkKGUscixZcC5jZW50ZXIpLFlwLnJhZGl1cz1vO2xldCBpPUdyLmNvbXB1dGVFbGxpcHNlUG9zaXRpb25zKHQsITAsITApLHM9aS5wb3NpdGlvbnMsZj1pLm51bVB0cyx1PWkub3V0ZXJQb3NpdGlvbnMsYz1ndC51bmlvbihYcCxZcCksbD14VChzLHQsITApLHA9UFQoZiksZD1wLmxlbmd0aDtwLmxlbmd0aD1kKjI7bGV0IG09cy5sZW5ndGgvMztmb3IobGV0IHc9MDt3PGQ7dys9MylwW3crZF09cFt3KzJdK20scFt3KzErZF09cFt3KzFdK20scFt3KzIrZF09cFt3XSttO2xldCBfPUZ0LmNyZWF0ZVR5cGVkQXJyYXkobSoyLzMscCksZz1uZXcgQnQoe2F0dHJpYnV0ZXM6bCxpbmRpY2VzOl8scHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVN9KSxiPXpNKHUsdCk7cD1qTSh1KTtsZXQgVD1GdC5jcmVhdGVUeXBlZEFycmF5KHUubGVuZ3RoKjIvMyxwKSxPPW5ldyBCdCh7YXR0cmlidXRlczpiLGluZGljZXM6VCxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFU30pLEU9a2UuY29tYmluZUluc3RhbmNlcyhbbmV3IGNvKHtnZW9tZXRyeTpnfSksbmV3IGNvKHtnZW9tZXRyeTpPfSldKTtyZXR1cm57Ym91bmRpbmdTcGhlcmU6YyxhdHRyaWJ1dGVzOkVbMF0uYXR0cmlidXRlcyxpbmRpY2VzOkVbMF0uaW5kaWNlc319ZnVuY3Rpb24gTVQodCxlLG4sbyxyLGkscyl7bGV0IHU9R3IuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnMoe2NlbnRlcjp0LHNlbWlNYWpvckF4aXM6ZSxzZW1pTWlub3JBeGlzOm4scm90YXRpb246byxncmFudWxhcml0eTpyfSwhMSwhMCkub3V0ZXJQb3NpdGlvbnMsYz11Lmxlbmd0aC8zLGw9bmV3IEFycmF5KGMpO2ZvcihsZXQgZD0wO2Q8YzsrK2QpbFtkXT1hLmZyb21BcnJheSh1LGQqMyk7bGV0IHA9TXQuZnJvbUNhcnRlc2lhbkFycmF5KGwsaSxzKTtyZXR1cm4gcC53aWR0aD5QLlBJJiYocC5ub3J0aD1wLm5vcnRoPjA/UC5QSV9PVkVSX1RXTy1QLkVQU0lMT043OnAubm9ydGgscC5zb3V0aD1wLnNvdXRoPDA/UC5FUFNJTE9ONy1QLlBJX09WRVJfVFdPOnAuc291dGgscC5lYXN0PVAuUEkscC53ZXN0PS1QLlBJKSxwfWZ1bmN0aW9uIGZpKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBlPXQuY2VudGVyLG49dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCxvPXQuc2VtaU1ham9yQXhpcyxyPXQuc2VtaU1pbm9yQXhpcyxpPXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHM9dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQ7aWYoeS5kZWZpbmVkKCJvcHRpb25zLmNlbnRlciIsZSkseS50eXBlT2YubnVtYmVyKCJvcHRpb25zLnNlbWlNYWpvckF4aXMiLG8pLHkudHlwZU9mLm51bWJlcigib3B0aW9ucy5zZW1pTWlub3JBeGlzIixyKSxvPHIpdGhyb3cgbmV3IEwoInNlbWlNYWpvckF4aXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlbWlNaW5vckF4aXMuIik7aWYoaTw9MCl0aHJvdyBuZXcgTCgiZ3JhbnVsYXJpdHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtsZXQgZj10LmhlaWdodD8/MCx1PXQuZXh0cnVkZWRIZWlnaHQ/P2Y7dGhpcy5fY2VudGVyPWEuY2xvbmUoZSksdGhpcy5fc2VtaU1ham9yQXhpcz1vLHRoaXMuX3NlbWlNaW5vckF4aXM9cix0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShuKSx0aGlzLl9yb3RhdGlvbj10LnJvdGF0aW9uPz8wLHRoaXMuX3N0Um90YXRpb249dC5zdFJvdGF0aW9uPz8wLHRoaXMuX2hlaWdodD1NYXRoLm1heCh1LGYpLHRoaXMuX2dyYW51bGFyaXR5PWksdGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKHMpLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKHUsZiksdGhpcy5fc2hhZG93Vm9sdW1lPXQuc2hhZG93Vm9sdW1lPz8hMSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNlR2VvbWV0cnkiLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl9yZWN0YW5nbGU9dm9pZCAwLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9dm9pZCAwfWZ1bmN0aW9uIHFNKHQpe2xldCBlPS10Ll9zdFJvdGF0aW9uO2lmKGU9PT0wKXJldHVyblswLDAsMCwxLDEsMF07bGV0IG89R3IuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnMoe2NlbnRlcjp0Ll9jZW50ZXIsc2VtaU1ham9yQXhpczp0Ll9zZW1pTWFqb3JBeGlzLHNlbWlNaW5vckF4aXM6dC5fc2VtaU1pbm9yQXhpcyxyb3RhdGlvbjp0Ll9yb3RhdGlvbixncmFudWxhcml0eTp0Ll9ncmFudWxhcml0eX0sITEsITApLm91dGVyUG9zaXRpb25zLHI9by5sZW5ndGgvMyxpPW5ldyBBcnJheShyKTtmb3IobGV0IHU9MDt1PHI7Kyt1KWlbdV09YS5mcm9tQXJyYXkobyx1KjMpO2xldCBzPXQuX2VsbGlwc29pZCxmPXQucmVjdGFuZ2xlO3JldHVybiBCdC5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyhpLGUscyxmKX12YXIgYWEsXzAseTAsYlQsJG4sVFQsR00sZzAsd1QsT1QsRVQsJHAsUlQsU1QsQ1QsY2MsWHAsWXAsTlQsSVQsdlQsYWksVnIsQTA9JCgoKT0+e3ZlKCk7VWUoKTtMdCgpO0llKCk7V3QoKTtEZSgpO3llKCk7YXQoKTtqdCgpO2gwKCk7JHQoKTtTaSgpO1hlKCk7WWUoKTthbigpO3NjKCk7Rm8oKTtzaSgpOyRlKCk7S3QoKTtCbigpO3RuKCk7S28oKTt3bigpO1JvKCk7YWE9bmV3IGEsXzA9bmV3IGEseTA9bmV3IGEsYlQ9bmV3IGEsJG49bmV3IEosVFQ9bmV3IFosR009bmV3IFosZzA9bmV3IHRlLHdUPW5ldyBhLE9UPW5ldyBhLEVUPW5ldyBhLCRwPW5ldyBzdCxSVD1uZXcgYSxTVD1uZXcgSixDVD1uZXcgSjtjYz1uZXcgYTtYcD1uZXcgZ3QsWXA9bmV3IGd0O2ZpLnBhY2tlZExlbmd0aD1hLnBhY2tlZExlbmd0aCtZLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrOTtmaS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGEucGFjayh0Ll9jZW50ZXIsZSxuKSxuKz1hLnBhY2tlZExlbmd0aCxZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX3NlbWlNYWpvckF4aXMsZVtuKytdPXQuX3NlbWlNaW5vckF4aXMsZVtuKytdPXQuX3JvdGF0aW9uLGVbbisrXT10Ll9zdFJvdGF0aW9uLGVbbisrXT10Ll9oZWlnaHQsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW24rK109dC5fc2hhZG93Vm9sdW1lPzE6MCxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07TlQ9bmV3IGEsSVQ9bmV3IFksdlQ9bmV3IHB0LGFpPXtjZW50ZXI6TlQsZWxsaXBzb2lkOklULHZlcnRleEZvcm1hdDp2VCxzZW1pTWFqb3JBeGlzOnZvaWQgMCxzZW1pTWlub3JBeGlzOnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsc3RSb3RhdGlvbjp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLHNoYWRvd1ZvbHVtZTp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07ZmkudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89YS51bnBhY2sodCxlLE5UKTtlKz1hLnBhY2tlZExlbmd0aDtsZXQgcj1ZLnVucGFjayh0LGUsSVQpO2UrPVkucGFja2VkTGVuZ3RoO2xldCBpPXB0LnVucGFjayh0LGUsdlQpO2UrPXB0LnBhY2tlZExlbmd0aDtsZXQgcz10W2UrK10sZj10W2UrK10sdT10W2UrK10sYz10W2UrK10sbD10W2UrK10scD10W2UrK10sZD10W2UrK10sbT10W2UrK109PT0xLF89dFtlXTtyZXR1cm4gaChuKT8obi5fY2VudGVyPWEuY2xvbmUobyxuLl9jZW50ZXIpLG4uX2VsbGlwc29pZD1ZLmNsb25lKHIsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX3NlbWlNYWpvckF4aXM9cyxuLl9zZW1pTWlub3JBeGlzPWYsbi5fcm90YXRpb249dSxuLl9zdFJvdGF0aW9uPWMsbi5faGVpZ2h0PWwsbi5fZ3JhbnVsYXJpdHk9cCxuLl9leHRydWRlZEhlaWdodD1kLG4uX3NoYWRvd1ZvbHVtZT1tLG4uX29mZnNldEF0dHJpYnV0ZT1fPT09LTE/dm9pZCAwOl8sbik6KGFpLmhlaWdodD1sLGFpLmV4dHJ1ZGVkSGVpZ2h0PWQsYWkuZ3JhbnVsYXJpdHk9cCxhaS5zdFJvdGF0aW9uPWMsYWkucm90YXRpb249dSxhaS5zZW1pTWFqb3JBeGlzPXMsYWkuc2VtaU1pbm9yQXhpcz1mLGFpLnNoYWRvd1ZvbHVtZT1tLGFpLm9mZnNldEF0dHJpYnV0ZT1fPT09LTE/dm9pZCAwOl8sbmV3IGZpKGFpKSl9O2ZpLmNvbXB1dGVSZWN0YW5nbGU9ZnVuY3Rpb24odCxlKXt0PXQ/P050LkVNUFRZX09CSkVDVDtsZXQgbj10LmNlbnRlcixvPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQscj10LnNlbWlNYWpvckF4aXMsaT10LnNlbWlNaW5vckF4aXMscz10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSxmPXQucm90YXRpb24/PzA7aWYoeS5kZWZpbmVkKCJvcHRpb25zLmNlbnRlciIsbikseS50eXBlT2YubnVtYmVyKCJvcHRpb25zLnNlbWlNYWpvckF4aXMiLHIpLHkudHlwZU9mLm51bWJlcigib3B0aW9ucy5zZW1pTWlub3JBeGlzIixpKSxyPGkpdGhyb3cgbmV3IEwoInNlbWlNYWpvckF4aXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlbWlNaW5vckF4aXMuIik7aWYoczw9MCl0aHJvdyBuZXcgTCgiZ3JhbnVsYXJpdHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtyZXR1cm4gTVQobixyLGksZixzLG8sZSl9O2ZpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2lmKHQuX3NlbWlNYWpvckF4aXM8PTB8fHQuX3NlbWlNaW5vckF4aXM8PTApcmV0dXJuO2xldCBlPXQuX2hlaWdodCxuPXQuX2V4dHJ1ZGVkSGVpZ2h0LG89IVAuZXF1YWxzRXBzaWxvbihlLG4sMCxQLkVQU0lMT04yKTt0Ll9jZW50ZXI9dC5fZWxsaXBzb2lkLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodC5fY2VudGVyLHQuX2NlbnRlcik7bGV0IHI9e2NlbnRlcjp0Ll9jZW50ZXIsc2VtaU1ham9yQXhpczp0Ll9zZW1pTWFqb3JBeGlzLHNlbWlNaW5vckF4aXM6dC5fc2VtaU1pbm9yQXhpcyxlbGxpcHNvaWQ6dC5fZWxsaXBzb2lkLHJvdGF0aW9uOnQuX3JvdGF0aW9uLGhlaWdodDplLGdyYW51bGFyaXR5OnQuX2dyYW51bGFyaXR5LHZlcnRleEZvcm1hdDp0Ll92ZXJ0ZXhGb3JtYXQsc3RSb3RhdGlvbjp0Ll9zdFJvdGF0aW9ufSxpO2lmKG8pci5leHRydWRlZEhlaWdodD1uLHIuc2hhZG93Vm9sdW1lPXQuX3NoYWRvd1ZvbHVtZSxyLm9mZnNldEF0dHJpYnV0ZT10Ll9vZmZzZXRBdHRyaWJ1dGUsaT1ITShyKTtlbHNlIGlmKGk9Vk0ociksaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgcz1pLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCxmPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLHU9bmV3IFVpbnQ4QXJyYXkocy8zKS5maWxsKGYpO2kuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczp1fSl9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczppLmF0dHJpYnV0ZXMsaW5kaWNlczppLmluZGljZXMscHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6aS5ib3VuZGluZ1NwaGVyZSxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O2ZpLmNyZWF0ZVNoYWRvd1ZvbHVtZT1mdW5jdGlvbih0LGUsbil7bGV0IG89dC5fZ3JhbnVsYXJpdHkscj10Ll9lbGxpcHNvaWQsaT1lKG8scikscz1uKG8scik7cmV0dXJuIG5ldyBmaSh7Y2VudGVyOnQuX2NlbnRlcixzZW1pTWFqb3JBeGlzOnQuX3NlbWlNYWpvckF4aXMsc2VtaU1pbm9yQXhpczp0Ll9zZW1pTWlub3JBeGlzLGVsbGlwc29pZDpyLHJvdGF0aW9uOnQuX3JvdGF0aW9uLHN0Um90YXRpb246dC5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OmksaGVpZ2h0OnMsdmVydGV4Rm9ybWF0OnB0LlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLl9yZWN0YW5nbGUpfHwodGhpcy5fcmVjdGFuZ2xlPU1UKHRoaXMuX2NlbnRlcix0aGlzLl9zZW1pTWFqb3JBeGlzLHRoaXMuX3NlbWlNaW5vckF4aXMsdGhpcy5fcm90YXRpb24sdGhpcy5fZ3JhbnVsYXJpdHksdGhpcy5fZWxsaXBzb2lkKSksdGhpcy5fcmVjdGFuZ2xlfX0sdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyl8fCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPXFNKHRoaXMpKSx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzfX19KTtWcj1maX0pO2Z1bmN0aW9uIHZpKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBlPXQucmFkaXVzO3kudHlwZU9mLm51bWJlcigicmFkaXVzIixlKTtsZXQgbj17Y2VudGVyOnQuY2VudGVyLHNlbWlNYWpvckF4aXM6ZSxzZW1pTWlub3JBeGlzOmUsZWxsaXBzb2lkOnQuZWxsaXBzb2lkLGhlaWdodDp0LmhlaWdodCxleHRydWRlZEhlaWdodDp0LmV4dHJ1ZGVkSGVpZ2h0LGdyYW51bGFyaXR5OnQuZ3JhbnVsYXJpdHksdmVydGV4Rm9ybWF0OnQudmVydGV4Rm9ybWF0LHN0Um90YXRpb246dC5zdFJvdGF0aW9uLHNoYWRvd1ZvbHVtZTp0LnNoYWRvd1ZvbHVtZX07dGhpcy5fZWxsaXBzZUdlb21ldHJ5PW5ldyBWcihuKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDaXJjbGVHZW9tZXRyeSJ9dmFyIEZULF9vLGIwLExUPSQoKCk9PntMdCgpO1d0KCk7eWUoKTthdCgpO0EwKCk7JHQoKTtSbygpO3ZpLnBhY2tlZExlbmd0aD1Wci5wYWNrZWRMZW5ndGg7dmkucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLFZyLnBhY2sodC5fZWxsaXBzZUdlb21ldHJ5LGUsbil9O0ZUPW5ldyBWcih7Y2VudGVyOm5ldyBhLHNlbWlNYWpvckF4aXM6MSxzZW1pTWlub3JBeGlzOjF9KSxfbz17Y2VudGVyOm5ldyBhLHJhZGl1czp2b2lkIDAsZWxsaXBzb2lkOlkuY2xvbmUoWS5kZWZhdWx0KSxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsdmVydGV4Rm9ybWF0Om5ldyBwdCxzdFJvdGF0aW9uOnZvaWQgMCxzZW1pTWFqb3JBeGlzOnZvaWQgMCxzZW1pTWlub3JBeGlzOnZvaWQgMCxzaGFkb3dWb2x1bWU6dm9pZCAwfTt2aS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2xldCBvPVZyLnVucGFjayh0LGUsRlQpO3JldHVybiBfby5jZW50ZXI9YS5jbG9uZShvLl9jZW50ZXIsX28uY2VudGVyKSxfby5lbGxpcHNvaWQ9WS5jbG9uZShvLl9lbGxpcHNvaWQsX28uZWxsaXBzb2lkKSxfby5lbGxpcHNvaWQ9WS5jbG9uZShvLl9lbGxpcHNvaWQsRlQuX2VsbGlwc29pZCksX28uaGVpZ2h0PW8uX2hlaWdodCxfby5leHRydWRlZEhlaWdodD1vLl9leHRydWRlZEhlaWdodCxfby5ncmFudWxhcml0eT1vLl9ncmFudWxhcml0eSxfby52ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoby5fdmVydGV4Rm9ybWF0LF9vLnZlcnRleEZvcm1hdCksX28uc3RSb3RhdGlvbj1vLl9zdFJvdGF0aW9uLF9vLnNoYWRvd1ZvbHVtZT1vLl9zaGFkb3dWb2x1bWUsaChuKT8oX28uc2VtaU1ham9yQXhpcz1vLl9zZW1pTWFqb3JBeGlzLF9vLnNlbWlNaW5vckF4aXM9by5fc2VtaU1pbm9yQXhpcyxuLl9lbGxpcHNlR2VvbWV0cnk9bmV3IFZyKF9vKSxuKTooX28ucmFkaXVzPW8uX3NlbWlNYWpvckF4aXMsbmV3IHZpKF9vKSl9O3ZpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe3JldHVybiBWci5jcmVhdGVHZW9tZXRyeSh0Ll9lbGxpcHNlR2VvbWV0cnkpfTt2aS5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQuX2VsbGlwc2VHZW9tZXRyeS5fZ3JhbnVsYXJpdHkscj10Ll9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZCxpPWUobyxyKSxzPW4obyxyKTtyZXR1cm4gbmV3IHZpKHtjZW50ZXI6dC5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXIscmFkaXVzOnQuX2VsbGlwc2VHZW9tZXRyeS5fc2VtaU1ham9yQXhpcyxlbGxpcHNvaWQ6cixzdFJvdGF0aW9uOnQuX2VsbGlwc2VHZW9tZXRyeS5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OmksaGVpZ2h0OnMsdmVydGV4Rm9ybWF0OnB0LlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHZpLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzZUdlb21ldHJ5LnJlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNlR2VvbWV0cnkudGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50c319fSk7YjA9dml9KTt2YXIgVDA9e307cGUoVDAse2RlZmF1bHQ6KCk9PldNfSk7ZnVuY3Rpb24gS00odCxlKXtyZXR1cm4gaChlKSYmKHQ9YjAudW5wYWNrKHQsZSkpLHQuX2VsbGlwc2VHZW9tZXRyeS5fY2VudGVyPWEuY2xvbmUodC5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXIpLHQuX2VsbGlwc2VHZW9tZXRyeS5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQpLGIwLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBXTSx3MD0kKCgpPT57THQoKTtMVCgpO2F0KCk7JHQoKTtXTT1LTX0pO2Z1bmN0aW9uIFhNKHQpe2xldCBlPXQuY2VudGVyO2FjPWEubXVsdGlwbHlCeVNjYWxhcih0LmVsbGlwc29pZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSxhYyksdC5oZWlnaHQsYWMpLGFjPWEuYWRkKGUsYWMsYWMpO2xldCBuPW5ldyBndChhYyx0LnNlbWlNYWpvckF4aXMpLG89R3IuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnModCwhMSwhMCkub3V0ZXJQb3NpdGlvbnMscj1uZXcgcmUoe3Bvc2l0aW9uOm5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6R3IucmFpc2VQb3NpdGlvbnNUb0hlaWdodChvLHQsITEpfSl9KSxpPW8ubGVuZ3RoLzMscz1GdC5jcmVhdGVUeXBlZEFycmF5KGksaSoyKSxmPTA7Zm9yKGxldCB1PTA7dTxpOysrdSlzW2YrK109dSxzW2YrK109KHUrMSklaTtyZXR1cm57Ym91bmRpbmdTcGhlcmU6bixhdHRyaWJ1dGVzOnIsaW5kaWNlczpzfX1mdW5jdGlvbiBZTSh0KXtsZXQgZT10LmNlbnRlcixuPXQuZWxsaXBzb2lkLG89dC5zZW1pTWFqb3JBeGlzLHI9YS5tdWx0aXBseUJ5U2NhbGFyKG4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGUsRFQpLHQuaGVpZ2h0LERUKTtacC5jZW50ZXI9YS5hZGQoZSxyLFpwLmNlbnRlciksWnAucmFkaXVzPW8scj1hLm11bHRpcGx5QnlTY2FsYXIobi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSxyKSx0LmV4dHJ1ZGVkSGVpZ2h0LHIpLFFwLmNlbnRlcj1hLmFkZChlLHIsUXAuY2VudGVyKSxRcC5yYWRpdXM9bztsZXQgaT1Hci5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucyh0LCExLCEwKS5vdXRlclBvc2l0aW9ucyxzPW5ldyByZSh7cG9zaXRpb246bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpHci5yYWlzZVBvc2l0aW9uc1RvSGVpZ2h0KGksdCwhMCl9KX0pO2k9cy5wb3NpdGlvbi52YWx1ZXM7bGV0IGY9Z3QudW5pb24oWnAsUXApLHU9aS5sZW5ndGgvMztpZihoKHQub2Zmc2V0QXR0cmlidXRlKSl7bGV0IF89bmV3IFVpbnQ4QXJyYXkodSk7aWYodC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApXz1fLmZpbGwoMSwwLHUvMik7ZWxzZXtsZXQgZz10Lm9mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxO189Xy5maWxsKGcpfXMuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6X30pfWxldCBjPXQubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPz8xNjtjPVAuY2xhbXAoYywwLHUvMik7bGV0IGw9RnQuY3JlYXRlVHlwZWRBcnJheSh1LHUqMitjKjIpO3UvPTI7bGV0IHA9MCxkO2ZvcihkPTA7ZDx1OysrZClsW3ArK109ZCxsW3ArK109KGQrMSkldSxsW3ArK109ZCt1LGxbcCsrXT0oZCsxKSV1K3U7bGV0IG07aWYoYz4wKXtsZXQgXz1NYXRoLm1pbihjLHUpO209TWF0aC5yb3VuZCh1L18pO2xldCBnPU1hdGgubWluKG0qYyx1KTtmb3IoZD0wO2Q8ZztkKz1tKWxbcCsrXT1kLGxbcCsrXT1kK3V9cmV0dXJue2JvdW5kaW5nU3BoZXJlOmYsYXR0cmlidXRlczpzLGluZGljZXM6bH19ZnVuY3Rpb24gZmEodCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5jZW50ZXIsbj10LmVsbGlwc29pZD8/WS5kZWZhdWx0LG89dC5zZW1pTWFqb3JBeGlzLHI9dC5zZW1pTWlub3JBeGlzLGk9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUU7aWYoIWgoZSkpdGhyb3cgbmV3IEwoImNlbnRlciBpcyByZXF1aXJlZC4iKTtpZighaChvKSl0aHJvdyBuZXcgTCgic2VtaU1ham9yQXhpcyBpcyByZXF1aXJlZC4iKTtpZighaChyKSl0aHJvdyBuZXcgTCgic2VtaU1pbm9yQXhpcyBpcyByZXF1aXJlZC4iKTtpZihvPHIpdGhyb3cgbmV3IEwoInNlbWlNYWpvckF4aXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlbWlNaW5vckF4aXMuIik7aWYoaTw9MCl0aHJvdyBuZXcgTCgiZ3JhbnVsYXJpdHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtsZXQgcz10LmhlaWdodD8/MCxmPXQuZXh0cnVkZWRIZWlnaHQ/P3M7dGhpcy5fY2VudGVyPWEuY2xvbmUoZSksdGhpcy5fc2VtaU1ham9yQXhpcz1vLHRoaXMuX3NlbWlNaW5vckF4aXM9cix0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShuKSx0aGlzLl9yb3RhdGlvbj10LnJvdGF0aW9uPz8wLHRoaXMuX2hlaWdodD1NYXRoLm1heChmLHMpLHRoaXMuX2dyYW51bGFyaXR5PWksdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4oZixzKSx0aGlzLl9udW1iZXJPZlZlcnRpY2FsTGluZXM9TWF0aC5tYXgodC5udW1iZXJPZlZlcnRpY2FsTGluZXM/PzE2LDApLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNlT3V0bGluZUdlb21ldHJ5In12YXIgRFQsYWMsWnAsUXAsQlQsVVQsRmksenIsTzA9JCgoKT0+e3ZlKCk7THQoKTtEZSgpO3llKCk7YXQoKTtqdCgpO2gwKCk7JHQoKTtYZSgpO1llKCk7YW4oKTtGbygpOyRlKCk7S3QoKTt0bigpO0RUPW5ldyBhLGFjPW5ldyBhO1pwPW5ldyBndCxRcD1uZXcgZ3Q7ZmEucGFja2VkTGVuZ3RoPWEucGFja2VkTGVuZ3RoK1kucGFja2VkTGVuZ3RoKzg7ZmEucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoInZhbHVlIGlzIHJlcXVpcmVkIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoImFycmF5IGlzIHJlcXVpcmVkIik7cmV0dXJuIG49bj8/MCxhLnBhY2sodC5fY2VudGVyLGUsbiksbis9YS5wYWNrZWRMZW5ndGgsWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9zZW1pTWFqb3JBeGlzLGVbbisrXT10Ll9zZW1pTWlub3JBeGlzLGVbbisrXT10Ll9yb3RhdGlvbixlW24rK109dC5faGVpZ2h0LGVbbisrXT10Ll9ncmFudWxhcml0eSxlW24rK109dC5fZXh0cnVkZWRIZWlnaHQsZVtuKytdPXQuX251bWJlck9mVmVydGljYWxMaW5lcyxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07QlQ9bmV3IGEsVVQ9bmV3IFksRmk9e2NlbnRlcjpCVCxlbGxpcHNvaWQ6VVQsc2VtaU1ham9yQXhpczp2b2lkIDAsc2VtaU1pbm9yQXhpczp2b2lkIDAscm90YXRpb246dm9pZCAwLGhlaWdodDp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxudW1iZXJPZlZlcnRpY2FsTGluZXM6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2ZhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoImFycmF5IGlzIHJlcXVpcmVkIik7ZT1lPz8wO2xldCBvPWEudW5wYWNrKHQsZSxCVCk7ZSs9YS5wYWNrZWRMZW5ndGg7bGV0IHI9WS51bnBhY2sodCxlLFVUKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgaT10W2UrK10scz10W2UrK10sZj10W2UrK10sdT10W2UrK10sYz10W2UrK10sbD10W2UrK10scD10W2UrK10sZD10W2VdO3JldHVybiBoKG4pPyhuLl9jZW50ZXI9YS5jbG9uZShvLG4uX2NlbnRlciksbi5fZWxsaXBzb2lkPVkuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3NlbWlNYWpvckF4aXM9aSxuLl9zZW1pTWlub3JBeGlzPXMsbi5fcm90YXRpb249ZixuLl9oZWlnaHQ9dSxuLl9ncmFudWxhcml0eT1jLG4uX2V4dHJ1ZGVkSGVpZ2h0PWwsbi5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzPXAsbi5fb2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuKTooRmkuaGVpZ2h0PXUsRmkuZXh0cnVkZWRIZWlnaHQ9bCxGaS5ncmFudWxhcml0eT1jLEZpLnJvdGF0aW9uPWYsRmkuc2VtaU1ham9yQXhpcz1pLEZpLnNlbWlNaW5vckF4aXM9cyxGaS5udW1iZXJPZlZlcnRpY2FsTGluZXM9cCxGaS5vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG5ldyBmYShGaSkpfTtmYS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtpZih0Ll9zZW1pTWFqb3JBeGlzPD0wfHx0Ll9zZW1pTWlub3JBeGlzPD0wKXJldHVybjtsZXQgZT10Ll9oZWlnaHQsbj10Ll9leHRydWRlZEhlaWdodCxvPSFQLmVxdWFsc0Vwc2lsb24oZSxuLDAsUC5FUFNJTE9OMik7dC5fY2VudGVyPXQuX2VsbGlwc29pZC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHQuX2NlbnRlcix0Ll9jZW50ZXIpO2xldCByPXtjZW50ZXI6dC5fY2VudGVyLHNlbWlNYWpvckF4aXM6dC5fc2VtaU1ham9yQXhpcyxzZW1pTWlub3JBeGlzOnQuX3NlbWlNaW5vckF4aXMsZWxsaXBzb2lkOnQuX2VsbGlwc29pZCxyb3RhdGlvbjp0Ll9yb3RhdGlvbixoZWlnaHQ6ZSxncmFudWxhcml0eTp0Ll9ncmFudWxhcml0eSxudW1iZXJPZlZlcnRpY2FsTGluZXM6dC5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzfSxpO2lmKG8pci5leHRydWRlZEhlaWdodD1uLHIub2Zmc2V0QXR0cmlidXRlPXQuX29mZnNldEF0dHJpYnV0ZSxpPVlNKHIpO2Vsc2UgaWYoaT1YTShyKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBzPWkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLGY9dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsdT1uZXcgVWludDhBcnJheShzLzMpLmZpbGwoZik7aS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnV9KX1yZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOmkuYXR0cmlidXRlcyxpbmRpY2VzOmkuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkR0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOmkuYm91bmRpbmdTcGhlcmUsb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTt6cj1mYX0pO2Z1bmN0aW9uIHVhKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBlPXQucmFkaXVzO3kudHlwZU9mLm51bWJlcigicmFkaXVzIixlKTtsZXQgbj17Y2VudGVyOnQuY2VudGVyLHNlbWlNYWpvckF4aXM6ZSxzZW1pTWlub3JBeGlzOmUsZWxsaXBzb2lkOnQuZWxsaXBzb2lkLGhlaWdodDp0LmhlaWdodCxleHRydWRlZEhlaWdodDp0LmV4dHJ1ZGVkSGVpZ2h0LGdyYW51bGFyaXR5OnQuZ3JhbnVsYXJpdHksbnVtYmVyT2ZWZXJ0aWNhbExpbmVzOnQubnVtYmVyT2ZWZXJ0aWNhbExpbmVzfTt0aGlzLl9lbGxpcHNlR2VvbWV0cnk9bmV3IHpyKG4pLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNpcmNsZU91dGxpbmVHZW9tZXRyeSJ9dmFyICRNLGlyLEUwLGtUPSQoKCk9PntMdCgpO1d0KCk7eWUoKTthdCgpO08wKCk7JHQoKTt1YS5wYWNrZWRMZW5ndGg9enIucGFja2VkTGVuZ3RoO3VhLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx6ci5wYWNrKHQuX2VsbGlwc2VHZW9tZXRyeSxlLG4pfTskTT1uZXcgenIoe2NlbnRlcjpuZXcgYSxzZW1pTWFqb3JBeGlzOjEsc2VtaU1pbm9yQXhpczoxfSksaXI9e2NlbnRlcjpuZXcgYSxyYWRpdXM6dm9pZCAwLGVsbGlwc29pZDpZLmNsb25lKFkuVU5JVF9TUEhFUkUpLGhlaWdodDp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxudW1iZXJPZlZlcnRpY2FsTGluZXM6dm9pZCAwLHNlbWlNYWpvckF4aXM6dm9pZCAwLHNlbWlNaW5vckF4aXM6dm9pZCAwfTt1YS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXpyLnVucGFjayh0LGUsJE0pO3JldHVybiBpci5jZW50ZXI9YS5jbG9uZShvLl9jZW50ZXIsaXIuY2VudGVyKSxpci5lbGxpcHNvaWQ9WS5jbG9uZShvLl9lbGxpcHNvaWQsaXIuZWxsaXBzb2lkKSxpci5oZWlnaHQ9by5faGVpZ2h0LGlyLmV4dHJ1ZGVkSGVpZ2h0PW8uX2V4dHJ1ZGVkSGVpZ2h0LGlyLmdyYW51bGFyaXR5PW8uX2dyYW51bGFyaXR5LGlyLm51bWJlck9mVmVydGljYWxMaW5lcz1vLl9udW1iZXJPZlZlcnRpY2FsTGluZXMsaChuKT8oaXIuc2VtaU1ham9yQXhpcz1vLl9zZW1pTWFqb3JBeGlzLGlyLnNlbWlNaW5vckF4aXM9by5fc2VtaU1pbm9yQXhpcyxuLl9lbGxpcHNlR2VvbWV0cnk9bmV3IHpyKGlyKSxuKTooaXIucmFkaXVzPW8uX3NlbWlNYWpvckF4aXMsbmV3IHVhKGlyKSl9O3VhLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe3JldHVybiB6ci5jcmVhdGVHZW9tZXRyeSh0Ll9lbGxpcHNlR2VvbWV0cnkpfTtFMD11YX0pO3ZhciBSMD17fTtwZShSMCx7ZGVmYXVsdDooKT0+UU19KTtmdW5jdGlvbiBaTSh0LGUpe3JldHVybiBoKGUpJiYodD1FMC51bnBhY2sodCxlKSksdC5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXI9YS5jbG9uZSh0Ll9lbGxpcHNlR2VvbWV0cnkuX2NlbnRlciksdC5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZCksRTAuY3JlYXRlR2VvbWV0cnkodCl9dmFyIFFNLFMwPSQoKCk9PntMdCgpO2tUKCk7YXQoKTskdCgpO1FNPVpNfSk7ZnVuY3Rpb24gSk0odCxlLG4sbyl7aWYoeS5kZWZpbmVkKCJlcXVhbHNFcHNpbG9uIixlKSwhaCh0KSlyZXR1cm47bj1uPz8hMTtsZXQgcj1oKG8pLGk9dC5sZW5ndGg7aWYoaTwyKXJldHVybiB0O2xldCBzLGY9dFswXSx1LGMsbD0wLHA9LTE7Zm9yKHM9MTtzPGk7KytzKXU9dFtzXSxlKGYsdSxHVCk/KGgoYyl8fChjPXQuc2xpY2UoMCxzKSxsPXMtMSxwPTApLHImJm8ucHVzaChzKSk6KGgoYykmJihjLnB1c2godSksbD1zLHImJihwPW8ubGVuZ3RoKSksZj11KTtyZXR1cm4gbiYmZSh0WzBdLHRbaS0xXSxHVCkmJihyJiYoaChjKT9vLnNwbGljZShwLDAsbCk6by5wdXNoKGktMSkpLGgoYyk/Yy5sZW5ndGgtPTE6Yz10LnNsaWNlKDAsLTEpKSxoKGMpP2M6dH12YXIgR1QseG4sanI9JCgoKT0+e1d0KCk7YXQoKTtLdCgpO0dUPVAuRVBTSUxPTjEwO3huPUpNfSk7ZnVuY3Rpb24gSW4odCxlLG4sbyl7dGhpcy54PXQ/PzAsdGhpcy55PWU/PzAsdGhpcy53aWR0aD1uPz8wLHRoaXMuaGVpZ2h0PW8/PzB9dmFyIFZULHROLGVOLEhyLENmPSQoKCk9PntVZSgpO0llKCk7V3QoKTthdCgpOyR0KCk7U2koKTtHcygpO3duKCk7SW4ucGFja2VkTGVuZ3RoPTQ7SW4ucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxlW24rK109dC54LGVbbisrXT10LnksZVtuKytdPXQud2lkdGgsZVtuXT10LmhlaWdodCxlfTtJbi51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IEluKSxuLng9dFtlKytdLG4ueT10W2UrK10sbi53aWR0aD10W2UrK10sbi5oZWlnaHQ9dFtlXSxufTtJbi5mcm9tUG9pbnRzPWZ1bmN0aW9uKHQsZSl7aWYoaChlKXx8KGU9bmV3IEluKSwhaCh0KXx8dC5sZW5ndGg9PT0wKXJldHVybiBlLng9MCxlLnk9MCxlLndpZHRoPTAsZS5oZWlnaHQ9MCxlO2xldCBuPXQubGVuZ3RoLG89dFswXS54LHI9dFswXS55LGk9dFswXS54LHM9dFswXS55O2ZvcihsZXQgZj0xO2Y8bjtmKyspe2xldCB1PXRbZl0sYz11LngsbD11Lnk7bz1NYXRoLm1pbihjLG8pLGk9TWF0aC5tYXgoYyxpKSxyPU1hdGgubWluKGwscikscz1NYXRoLm1heChsLHMpfXJldHVybiBlLng9byxlLnk9cixlLndpZHRoPWktbyxlLmhlaWdodD1zLXIsZX07VlQ9bmV3IEpuLHROPW5ldyBzdCxlTj1uZXcgc3Q7SW4uZnJvbVJlY3RhbmdsZT1mdW5jdGlvbih0LGUsbil7aWYoaChuKXx8KG49bmV3IEluKSwhaCh0KSlyZXR1cm4gbi54PTAsbi55PTAsbi53aWR0aD0wLG4uaGVpZ2h0PTAsbjtWVC5fZWxsaXBzb2lkPVkuZGVmYXVsdCxlPWU/P1ZUO2xldCBvPWUucHJvamVjdChNdC5zb3V0aHdlc3QodCx0TikpLHI9ZS5wcm9qZWN0KE10Lm5vcnRoZWFzdCh0LGVOKSk7cmV0dXJuIEouc3VidHJhY3QocixvLHIpLG4ueD1vLngsbi55PW8ueSxuLndpZHRoPXIueCxuLmhlaWdodD1yLnksbn07SW4uY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLng9dC54LGUueT10LnksZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0LGUpOm5ldyBJbih0LngsdC55LHQud2lkdGgsdC5oZWlnaHQpfTtJbi51bmlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSxoKG4pfHwobj1uZXcgSW4pO2xldCBvPU1hdGgubWluKHQueCxlLngpLHI9TWF0aC5taW4odC55LGUueSksaT1NYXRoLm1heCh0LngrdC53aWR0aCxlLngrZS53aWR0aCkscz1NYXRoLm1heCh0LnkrdC5oZWlnaHQsZS55K2UuaGVpZ2h0KTtyZXR1cm4gbi54PW8sbi55PXIsbi53aWR0aD1pLW8sbi5oZWlnaHQ9cy1yLG59O0luLmV4cGFuZD1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm9iamVjdCgicG9pbnQiLGUpLG49SW4uY2xvbmUodCxuKTtsZXQgbz1lLngtbi54LHI9ZS55LW4ueTtyZXR1cm4gbz5uLndpZHRoP24ud2lkdGg9bzpvPDAmJihuLndpZHRoLT1vLG4ueD1lLngpLHI+bi5oZWlnaHQ/bi5oZWlnaHQ9cjpyPDAmJihuLmhlaWdodC09cixuLnk9ZS55KSxufTtJbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpO2xldCBuPXQueCxvPXQueSxyPWUueCxpPWUueTtyZXR1cm4gbj5yK2Uud2lkdGh8fG4rdC53aWR0aDxyfHxvK3QuaGVpZ2h0PGl8fG8+aStlLmhlaWdodD9Tbi5PVVRTSURFOlNuLklOVEVSU0VDVElOR307SW4uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0Lng9PT1lLngmJnQueT09PWUueSYmdC53aWR0aD09PWUud2lkdGgmJnQuaGVpZ2h0PT09ZS5oZWlnaHR9O0luLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gSW4uY2xvbmUodGhpcyx0KX07SW4ucHJvdG90eXBlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gSW4uaW50ZXJzZWN0KHRoaXMsdCl9O0luLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIEluLmVxdWFscyh0aGlzLHQpfTtIcj1Jbn0pO2Z1bmN0aW9uIExvKHQsZSxuKXt0aGlzLm1pbmltdW09YS5jbG9uZSh0Pz9hLlpFUk8pLHRoaXMubWF4aW11bT1hLmNsb25lKGU/P2EuWkVSTyksaChuKT9uPWEuY2xvbmUobik6bj1hLm1pZHBvaW50KHRoaXMubWluaW11bSx0aGlzLm1heGltdW0sbmV3IGEpLHRoaXMuY2VudGVyPW59dmFyIEpwLExpLHhmPSQoKCk9PntMdCgpO1d0KCk7YXQoKTtHcygpO0xvLmZyb21Db3JuZXJzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJtaW5pbXVtIix0KSx5LmRlZmluZWQoIm1heGltdW0iLGUpLGgobil8fChuPW5ldyBMbyksbi5taW5pbXVtPWEuY2xvbmUodCxuLm1pbmltdW0pLG4ubWF4aW11bT1hLmNsb25lKGUsbi5tYXhpbXVtKSxuLmNlbnRlcj1hLm1pZHBvaW50KHQsZSxuLmNlbnRlciksbn07TG8uZnJvbVBvaW50cz1mdW5jdGlvbih0LGUpe2lmKGgoZSl8fChlPW5ldyBMbyksIWgodCl8fHQubGVuZ3RoPT09MClyZXR1cm4gZS5taW5pbXVtPWEuY2xvbmUoYS5aRVJPLGUubWluaW11bSksZS5tYXhpbXVtPWEuY2xvbmUoYS5aRVJPLGUubWF4aW11bSksZS5jZW50ZXI9YS5jbG9uZShhLlpFUk8sZS5jZW50ZXIpLGU7bGV0IG49dFswXS54LG89dFswXS55LHI9dFswXS56LGk9dFswXS54LHM9dFswXS55LGY9dFswXS56LHU9dC5sZW5ndGg7Zm9yKGxldCBwPTE7cDx1O3ArKyl7bGV0IGQ9dFtwXSxtPWQueCxfPWQueSxnPWQuejtuPU1hdGgubWluKG0sbiksaT1NYXRoLm1heChtLGkpLG89TWF0aC5taW4oXyxvKSxzPU1hdGgubWF4KF8scykscj1NYXRoLm1pbihnLHIpLGY9TWF0aC5tYXgoZyxmKX1sZXQgYz1lLm1pbmltdW07Yy54PW4sYy55PW8sYy56PXI7bGV0IGw9ZS5tYXhpbXVtO3JldHVybiBsLng9aSxsLnk9cyxsLno9ZixlLmNlbnRlcj1hLm1pZHBvaW50KGMsbCxlLmNlbnRlciksZX07TG8uY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLm1pbmltdW09YS5jbG9uZSh0Lm1pbmltdW0sZS5taW5pbXVtKSxlLm1heGltdW09YS5jbG9uZSh0Lm1heGltdW0sZS5tYXhpbXVtKSxlLmNlbnRlcj1hLmNsb25lKHQuY2VudGVyLGUuY2VudGVyKSxlKTpuZXcgTG8odC5taW5pbXVtLHQubWF4aW11bSx0LmNlbnRlcil9O0xvLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmYS5lcXVhbHModC5jZW50ZXIsZS5jZW50ZXIpJiZhLmVxdWFscyh0Lm1pbmltdW0sZS5taW5pbXVtKSYmYS5lcXVhbHModC5tYXhpbXVtLGUubWF4aW11bSl9O0pwPW5ldyBhO0xvLmludGVyc2VjdFBsYW5lPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJib3giLHQpLHkuZGVmaW5lZCgicGxhbmUiLGUpLEpwPWEuc3VidHJhY3QodC5tYXhpbXVtLHQubWluaW11bSxKcCk7bGV0IG49YS5tdWx0aXBseUJ5U2NhbGFyKEpwLC41LEpwKSxvPWUubm9ybWFsLHI9bi54Kk1hdGguYWJzKG8ueCkrbi55Kk1hdGguYWJzKG8ueSkrbi56Kk1hdGguYWJzKG8ueiksaT1hLmRvdCh0LmNlbnRlcixvKStlLmRpc3RhbmNlO3JldHVybiBpLXI+MD9Tbi5JTlNJREU6aStyPDA/U24uT1VUU0lERTpTbi5JTlRFUlNFQ1RJTkd9O0xvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gTG8uY2xvbmUodGhpcyx0KX07TG8ucHJvdG90eXBlLmludGVyc2VjdFBsYW5lPWZ1bmN0aW9uKHQpe3JldHVybiBMby5pbnRlcnNlY3RQbGFuZSh0aGlzLHQpfTtMby5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBMby5lcXVhbHModGhpcyx0KX07TGk9TG99KTtmdW5jdGlvbiB1aSh0LGUpe2lmKHkuZGVmaW5lZCgib3JpZ2luIix0KSxlPWU/P1kuZGVmYXVsdCx0PWUuc2NhbGVUb0dlb2RldGljU3VyZmFjZSh0KSwhaCh0KSl0aHJvdyBuZXcgTCgib3JpZ2luIG11c3Qgbm90IGJlIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc29pZC4iKTtsZXQgbj1Yby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZSh0LGUpO3RoaXMuX2VsbGlwc29pZD1lLHRoaXMuX29yaWdpbj10LHRoaXMuX3hBeGlzPWEuZnJvbUNhcnRlc2lhbjQoaXQuZ2V0Q29sdW1uKG4sMCxDMCkpLHRoaXMuX3lBeGlzPWEuZnJvbUNhcnRlc2lhbjQoaXQuZ2V0Q29sdW1uKG4sMSxDMCkpO2xldCBvPWEuZnJvbUNhcnRlc2lhbjQoaXQuZ2V0Q29sdW1uKG4sMixDMCkpO3RoaXMuX3BsYW5lPW9uLmZyb21Qb2ludE5vcm1hbCh0LG8pfXZhciBDMCxuTix6VCx0ZCxvTix5byxsYT0kKCgpPT57eGYoKTtVZSgpO0x0KCk7aHIoKTtXdCgpO2F0KCk7anQoKTskdCgpO3RjKCk7VW4oKTtmcygpO1VwKCk7Y3MoKTtDMD1uZXcgbWU7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModWkucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxvcmlnaW46e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW59fSxwbGFuZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYW5lfX0seEF4aXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94QXhpc319LHlBeGlzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUF4aXN9fSx6QXhpczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYW5lLm5vcm1hbH19fSk7bk49bmV3IExpO3VpLmZyb21Qb2ludHM9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbnMiLHQpO2xldCBuPUxpLmZyb21Qb2ludHModCxuTik7cmV0dXJuIG5ldyB1aShuLmNlbnRlcixlKX07elQ9bmV3IFFzLHRkPW5ldyBhO3VpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRPbnRvUGxhbmU9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbiIsdCk7bGV0IG49elQ7bi5vcmlnaW49dCxhLm5vcm1hbGl6ZSh0LG4uZGlyZWN0aW9uKTtsZXQgbz1oby5yYXlQbGFuZShuLHRoaXMuX3BsYW5lLHRkKTtpZihoKG8pfHwoYS5uZWdhdGUobi5kaXJlY3Rpb24sbi5kaXJlY3Rpb24pLG89aG8ucmF5UGxhbmUobix0aGlzLl9wbGFuZSx0ZCkpLGgobykpe2xldCByPWEuc3VidHJhY3Qobyx0aGlzLl9vcmlnaW4sbyksaT1hLmRvdCh0aGlzLl94QXhpcyxyKSxzPWEuZG90KHRoaXMuX3lBeGlzLHIpO3JldHVybiBoKGUpPyhlLng9aSxlLnk9cyxlKTpuZXcgSihpLHMpfX07dWkucHJvdG90eXBlLnByb2plY3RQb2ludHNPbnRvUGxhbmU9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbnMiLHQpLGgoZSl8fChlPVtdKTtsZXQgbj0wLG89dC5sZW5ndGg7Zm9yKGxldCByPTA7cjxvO3IrKyl7bGV0IGk9dGhpcy5wcm9qZWN0UG9pbnRPbnRvUGxhbmUodFtyXSxlW25dKTtoKGkpJiYoZVtuXT1pLG4rKyl9cmV0dXJuIGUubGVuZ3RoPW4sZX07dWkucHJvdG90eXBlLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmU9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbiIsdCksaChlKXx8KGU9bmV3IEopO2xldCBuPXpUO24ub3JpZ2luPXQsYS5jbG9uZSh0aGlzLl9wbGFuZS5ub3JtYWwsbi5kaXJlY3Rpb24pO2xldCBvPWhvLnJheVBsYW5lKG4sdGhpcy5fcGxhbmUsdGQpO2gobyl8fChhLm5lZ2F0ZShuLmRpcmVjdGlvbixuLmRpcmVjdGlvbiksbz1oby5yYXlQbGFuZShuLHRoaXMuX3BsYW5lLHRkKSk7bGV0IHI9YS5zdWJ0cmFjdChvLHRoaXMuX29yaWdpbixvKSxpPWEuZG90KHRoaXMuX3hBeGlzLHIpLHM9YS5kb3QodGhpcy5feUF4aXMscik7cmV0dXJuIGUueD1pLGUueT1zLGV9O3VpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRzVG9OZWFyZXN0T25QbGFuZT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFucyIsdCksaChlKXx8KGU9W10pO2xldCBuPXQubGVuZ3RoO2UubGVuZ3RoPW47Zm9yKGxldCBvPTA7bzxuO28rKyllW29dPXRoaXMucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZSh0W29dLGVbb10pO3JldHVybiBlfTtvTj1uZXcgYTt1aS5wcm90b3R5cGUucHJvamVjdFBvaW50T250b0VsbGlwc29pZD1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFuIix0KSxoKGUpfHwoZT1uZXcgYSk7bGV0IG49dGhpcy5fZWxsaXBzb2lkLG89dGhpcy5fb3JpZ2luLHI9dGhpcy5feEF4aXMsaT10aGlzLl95QXhpcyxzPW9OO3JldHVybiBhLm11bHRpcGx5QnlTY2FsYXIocix0LngscyksZT1hLmFkZChvLHMsZSksYS5tdWx0aXBseUJ5U2NhbGFyKGksdC55LHMpLGEuYWRkKGUscyxlKSxuLnNjYWxlVG9HZW9jZW50cmljU3VyZmFjZShlLGUpLGV9O3VpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRzT250b0VsbGlwc29pZD1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFucyIsdCk7bGV0IG49dC5sZW5ndGg7aChlKT9lLmxlbmd0aD1uOmU9bmV3IEFycmF5KG4pO2ZvcihsZXQgbz0wO288bjsrK28pZVtvXT10aGlzLnByb2plY3RQb2ludE9udG9FbGxpcHNvaWQodFtvXSxlW29dKTtyZXR1cm4gZX07eW89dWl9KTtmdW5jdGlvbiBCZSh0LGUpe3RoaXMuY2VudGVyPWEuY2xvbmUodD8/YS5aRVJPKSx0aGlzLmhhbGZBeGVzPVouY2xvbmUoZT8/Wi5aRVJPKX1mdW5jdGlvbiBqVCh0LGUsbixvLHIsaSxzLGYsdSxjLGwpe2lmKCFoKHIpfHwhaChpKXx8IWgocyl8fCFoKGYpfHwhaCh1KXx8IWgoYykpdGhyb3cgbmV3IEwoImFsbCBleHRlbnRzIChtaW5pbXVtL21heGltdW0gWC9ZL1opIGFyZSByZXF1aXJlZC4iKTtoKGwpfHwobD1uZXcgQmUpO2xldCBwPWwuaGFsZkF4ZXM7Wi5zZXRDb2x1bW4ocCwwLGUscCksWi5zZXRDb2x1bW4ocCwxLG4scCksWi5zZXRDb2x1bW4ocCwyLG8scCk7bGV0IGQ9WFQ7ZC54PShyK2kpLzIsZC55PShzK2YpLzIsZC56PSh1K2MpLzI7bGV0IG09cE47bS54PShpLXIpLzIsbS55PShmLXMpLzIsbS56PShjLXUpLzI7bGV0IF89bC5jZW50ZXI7cmV0dXJuIGQ9Wi5tdWx0aXBseUJ5VmVjdG9yKHAsZCxkKSxhLmFkZCh0LGQsXyksWi5tdWx0aXBseUJ5U2NhbGUocCxtLHApLGx9dmFyIHJOLGlOLHNOLGNOLGFOLGZOLHVOLGxOLFhULHBOLEhULGROLG1OLGhOLF9OLHlOLGdOLEFOLHFULGJOLEtULFROLHdOLE9OLEVOLFJOLFNOLENOLHhOLFBOLE1OLE5OLElOLHZOLEZOLExOLFlULCRULFpULEROLFdULEJOLFVOLGtOLEdOLFZOLHpOLGpOLEhOLFNvLHBhPSQoKCk9Pnt2ZSgpO1VlKCk7THQoKTtJZSgpO1d0KCk7YXQoKTtqdCgpOyR0KCk7bGEoKTtHcygpO0hsKCk7S3QoKTtCbigpO1VuKCk7ZnMoKTt3bigpO0JlLnBhY2tlZExlbmd0aD1hLnBhY2tlZExlbmd0aCtaLnBhY2tlZExlbmd0aDtCZS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGEucGFjayh0LmNlbnRlcixlLG4pLFoucGFjayh0LmhhbGZBeGVzLGUsbithLnBhY2tlZExlbmd0aCksZX07QmUudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLGgobil8fChuPW5ldyBCZSksYS51bnBhY2sodCxlLG4uY2VudGVyKSxaLnVucGFjayh0LGUrYS5wYWNrZWRMZW5ndGgsbi5oYWxmQXhlcyksbn07ck49bmV3IGEsaU49bmV3IGEsc049bmV3IGEsY049bmV3IGEsYU49bmV3IGEsZk49bmV3IGEsdU49bmV3IFosbE49e3VuaXRhcnk6bmV3IFosZGlhZ29uYWw6bmV3IFp9O0JlLmZyb21Qb2ludHM9ZnVuY3Rpb24odCxlKXtpZihoKGUpfHwoZT1uZXcgQmUpLCFoKHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIGUuaGFsZkF4ZXM9Wi5aRVJPLGUuY2VudGVyPWEuWkVSTyxlO2xldCBuLG89dC5sZW5ndGgscj1hLmNsb25lKHRbMF0sck4pO2ZvcihuPTE7bjxvO24rKylhLmFkZChyLHRbbl0scik7bGV0IGk9MS9vO2EubXVsdGlwbHlCeVNjYWxhcihyLGkscik7bGV0IHM9MCxmPTAsdT0wLGM9MCxsPTAscD0wLGQ7Zm9yKG49MDtuPG87bisrKWQ9YS5zdWJ0cmFjdCh0W25dLHIsaU4pLHMrPWQueCpkLngsZis9ZC54KmQueSx1Kz1kLngqZC56LGMrPWQueSpkLnksbCs9ZC55KmQueixwKz1kLnoqZC56O3MqPWksZio9aSx1Kj1pLGMqPWksbCo9aSxwKj1pO2xldCBtPXVOO21bMF09cyxtWzFdPWYsbVsyXT11LG1bM109ZixtWzRdPWMsbVs1XT1sLG1bNl09dSxtWzddPWwsbVs4XT1wO2xldCBfPVouY29tcHV0ZUVpZ2VuRGVjb21wb3NpdGlvbihtLGxOKSxnPVouY2xvbmUoXy51bml0YXJ5LGUuaGFsZkF4ZXMpLGI9Wi5nZXRDb2x1bW4oZywwLGNOKSxUPVouZ2V0Q29sdW1uKGcsMSxhTiksTz1aLmdldENvbHVtbihnLDIsZk4pLEU9LU51bWJlci5NQVhfVkFMVUUsdz0tTnVtYmVyLk1BWF9WQUxVRSxDPS1OdW1iZXIuTUFYX1ZBTFVFLE09TnVtYmVyLk1BWF9WQUxVRSxOPU51bWJlci5NQVhfVkFMVUUsRj1OdW1iZXIuTUFYX1ZBTFVFO2ZvcihuPTA7bjxvO24rKylkPXRbbl0sRT1NYXRoLm1heChhLmRvdChiLGQpLEUpLHc9TWF0aC5tYXgoYS5kb3QoVCxkKSx3KSxDPU1hdGgubWF4KGEuZG90KE8sZCksQyksTT1NYXRoLm1pbihhLmRvdChiLGQpLE0pLE49TWF0aC5taW4oYS5kb3QoVCxkKSxOKSxGPU1hdGgubWluKGEuZG90KE8sZCksRik7Yj1hLm11bHRpcGx5QnlTY2FsYXIoYiwuNSooTStFKSxiKSxUPWEubXVsdGlwbHlCeVNjYWxhcihULC41KihOK3cpLFQpLE89YS5tdWx0aXBseUJ5U2NhbGFyKE8sLjUqKEYrQyksTyk7bGV0IEk9YS5hZGQoYixULGUuY2VudGVyKTthLmFkZChJLE8sSSk7bGV0IHY9c047cmV0dXJuIHYueD1FLU0sdi55PXctTix2Lno9Qy1GLGEubXVsdGlwbHlCeVNjYWxhcih2LC41LHYpLFoubXVsdGlwbHlCeVNjYWxlKGUuaGFsZkF4ZXMsdixlLmhhbGZBeGVzKSxlfTtYVD1uZXcgYSxwTj1uZXcgYTtIVD1uZXcgc3QsZE49bmV3IGEsbU49bmV3IHN0LGhOPW5ldyBzdCxfTj1uZXcgc3QseU49bmV3IHN0LGdOPW5ldyBzdCxBTj1uZXcgYSxxVD1uZXcgYSxiTj1uZXcgYSxLVD1uZXcgYSxUTj1uZXcgYSx3Tj1uZXcgSixPTj1uZXcgSixFTj1uZXcgSixSTj1uZXcgSixTTj1uZXcgSixDTj1uZXcgYSx4Tj1uZXcgYSxQTj1uZXcgYSxNTj1uZXcgYSxOTj1uZXcgSixJTj1uZXcgYSx2Tj1uZXcgYSxGTj1uZXcgYSxMTj1uZXcgb24oYS5VTklUX1gsMCk7QmUuZnJvbVJlY3RhbmdsZT1mdW5jdGlvbih0LGUsbixvLHIpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJyZWN0YW5nbGUgaXMgcmVxdWlyZWQiKTtpZih0LndpZHRoPDB8fHQud2lkdGg+UC5UV09fUEkpdGhyb3cgbmV3IEwoIlJlY3RhbmdsZSB3aWR0aCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMiAqIHBpIik7aWYodC5oZWlnaHQ8MHx8dC5oZWlnaHQ+UC5QSSl0aHJvdyBuZXcgTCgiUmVjdGFuZ2xlIGhlaWdodCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgcGkiKTtpZihoKG8pJiYhUC5lcXVhbHNFcHNpbG9uKG8ucmFkaWkueCxvLnJhZGlpLnksUC5FUFNJTE9OMTUpKXRocm93IG5ldyBMKCJFbGxpcHNvaWQgbXVzdCBiZSBhbiBlbGxpcHNvaWQgb2YgcmV2b2x1dGlvbiAocmFkaWkueCA9PSByYWRpaS55KSIpO2U9ZT8/MCxuPW4/PzAsbz1vPz9ZLmRlZmF1bHQ7bGV0IGkscyxmLHUsYyxsLHA7aWYodC53aWR0aDw9UC5QSSl7bGV0IE49TXQuY2VudGVyKHQsSFQpLEY9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihOLGROKSxJPW5ldyB5byhGLG8pO3A9SS5wbGFuZTtsZXQgdj1OLmxvbmdpdHVkZSxCPXQuc291dGg8MCYmdC5ub3J0aD4wPzA6Ti5sYXRpdHVkZSxBPXN0LmZyb21SYWRpYW5zKHYsdC5ub3J0aCxuLG1OKSxTPXN0LmZyb21SYWRpYW5zKHQud2VzdCx0Lm5vcnRoLG4saE4pLHg9c3QuZnJvbVJhZGlhbnModC53ZXN0LEIsbixfTiksRD1zdC5mcm9tUmFkaWFucyh0Lndlc3QsdC5zb3V0aCxuLHlOKSx6PXN0LmZyb21SYWRpYW5zKHYsdC5zb3V0aCxuLGdOKSxqPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oQSxBTiksaz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFMscVQpLHE9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih4LGJOKSxXPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oRCxLVCksUj1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHosVE4pLG50PUkucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZShqLHdOKSxjdD1JLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoayxPTiksbHQ9SS5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKHEsRU4pLF90PUkucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZShXLFJOKSxvdD1JLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoUixTTik7cmV0dXJuIGk9TWF0aC5taW4oY3QueCxsdC54LF90LngpLHM9LWksdT1NYXRoLm1heChjdC55LG50LnkpLGY9TWF0aC5taW4oX3QueSxvdC55KSxTLmhlaWdodD1ELmhlaWdodD1lLGs9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihTLHFUKSxXPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oRCxLVCksYz1NYXRoLm1pbihvbi5nZXRQb2ludERpc3RhbmNlKHAsayksb24uZ2V0UG9pbnREaXN0YW5jZShwLFcpKSxsPW4salQoSS5vcmlnaW4sSS54QXhpcyxJLnlBeGlzLEkuekF4aXMsaSxzLGYsdSxjLGwscil9bGV0IGQ9dC5zb3V0aD4wLG09dC5ub3J0aDwwLF89ZD90LnNvdXRoOm0/dC5ub3J0aDowLGc9TXQuY2VudGVyKHQsSFQpLmxvbmdpdHVkZSxiPWEuZnJvbVJhZGlhbnMoZyxfLG4sbyxDTik7Yi56PTA7bGV0IE89TWF0aC5hYnMoYi54KTxQLkVQU0lMT04xMCYmTWF0aC5hYnMoYi55KTxQLkVQU0lMT04xMD9hLlVOSVRfWDphLm5vcm1hbGl6ZShiLHhOKSxFPWEuVU5JVF9aLHc9YS5jcm9zcyhPLEUsUE4pO3A9b24uZnJvbVBvaW50Tm9ybWFsKGIsTyxMTik7bGV0IEM9YS5mcm9tUmFkaWFucyhnK1AuUElfT1ZFUl9UV08sXyxuLG8sTU4pO3M9YS5kb3Qob24ucHJvamVjdFBvaW50T250b1BsYW5lKHAsQyxOTiksdyksaT0tcyx1PWEuZnJvbVJhZGlhbnMoMCx0Lm5vcnRoLG0/ZTpuLG8sSU4pLnosZj1hLmZyb21SYWRpYW5zKDAsdC5zb3V0aCxkP2U6bixvLHZOKS56O2xldCBNPWEuZnJvbVJhZGlhbnModC5lYXN0LF8sbixvLEZOKTtyZXR1cm4gYz1vbi5nZXRQb2ludERpc3RhbmNlKHAsTSksbD0wLGpUKGIsdyxFLE8saSxzLGYsdSxjLGwscil9O0JlLmZyb21UcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInRyYW5zZm9ybWF0aW9uIix0KSxoKGUpfHwoZT1uZXcgQmUpLGUuY2VudGVyPWl0LmdldFRyYW5zbGF0aW9uKHQsZS5jZW50ZXIpLGUuaGFsZkF4ZXM9aXQuZ2V0TWF0cml4Myh0LGUuaGFsZkF4ZXMpLGUuaGFsZkF4ZXM9Wi5tdWx0aXBseUJ5U2NhbGFyKGUuaGFsZkF4ZXMsLjUsZS5oYWxmQXhlcyksZX07QmUuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhhLmNsb25lKHQuY2VudGVyLGUuY2VudGVyKSxaLmNsb25lKHQuaGFsZkF4ZXMsZS5oYWxmQXhlcyksZSk6bmV3IEJlKHQuY2VudGVyLHQuaGFsZkF4ZXMpfTtCZS5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJib3ggaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoInBsYW5lIGlzIHJlcXVpcmVkLiIpO2xldCBuPXQuY2VudGVyLG89ZS5ub3JtYWwscj10LmhhbGZBeGVzLGk9by54LHM9by55LGY9by56LHU9TWF0aC5hYnMoaSpyW1ouQ09MVU1OMFJPVzBdK3MqcltaLkNPTFVNTjBST1cxXStmKnJbWi5DT0xVTU4wUk9XMl0pK01hdGguYWJzKGkqcltaLkNPTFVNTjFST1cwXStzKnJbWi5DT0xVTU4xUk9XMV0rZipyW1ouQ09MVU1OMVJPVzJdKStNYXRoLmFicyhpKnJbWi5DT0xVTU4yUk9XMF0rcypyW1ouQ09MVU1OMlJPVzFdK2YqcltaLkNPTFVNTjJST1cyXSksYz1hLmRvdChvLG4pK2UuZGlzdGFuY2U7cmV0dXJuIGM8PS11P1NuLk9VVFNJREU6Yz49dT9Tbi5JTlNJREU6U24uSU5URVJTRUNUSU5HfTtZVD1uZXcgYSwkVD1uZXcgYSxaVD1uZXcgYSxETj1uZXcgYSxXVD1uZXcgYSxCTj1uZXcgYTtCZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJib3ggaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoImNhcnRlc2lhbiBpcyByZXF1aXJlZC4iKTtsZXQgbj1hLnN1YnRyYWN0KGUsdC5jZW50ZXIsWFQpLG89dC5oYWxmQXhlcyxyPVouZ2V0Q29sdW1uKG8sMCxZVCksaT1aLmdldENvbHVtbihvLDEsJFQpLHM9Wi5nZXRDb2x1bW4obywyLFpUKSxmPWEubWFnbml0dWRlKHIpLHU9YS5tYWduaXR1ZGUoaSksYz1hLm1hZ25pdHVkZShzKSxsPSEwLHA9ITAsZD0hMDtmPjA/YS5kaXZpZGVCeVNjYWxhcihyLGYscik6bD0hMSx1PjA/YS5kaXZpZGVCeVNjYWxhcihpLHUsaSk6cD0hMSxjPjA/YS5kaXZpZGVCeVNjYWxhcihzLGMscyk6ZD0hMTtsZXQgbT0hbCshcCshZCxfLGcsYjtpZihtPT09MSl7bGV0IHc9cjtfPWksZz1zLHA/ZHx8KHc9cyxnPXIpOih3PWksXz1yKSxiPWEuY3Jvc3MoXyxnLFdUKSx3PT09cj9yPWI6dz09PWk/aT1iOnc9PT1zJiYocz1iKX1lbHNlIGlmKG09PT0yKXtfPXIscD9fPWk6ZCYmKF89cyk7bGV0IHc9YS5VTklUX1k7dy5lcXVhbHNFcHNpbG9uKF8sUC5FUFNJTE9OMykmJih3PWEuVU5JVF9YKSxnPWEuY3Jvc3MoXyx3LEROKSxhLm5vcm1hbGl6ZShnLGcpLGI9YS5jcm9zcyhfLGcsV1QpLGEubm9ybWFsaXplKGIsYiksXz09PXI/KGk9ZyxzPWIpOl89PT1pPyhzPWcscj1iKTpfPT09cyYmKHI9ZyxpPWIpfWVsc2UgbT09PTMmJihyPWEuVU5JVF9YLGk9YS5VTklUX1kscz1hLlVOSVRfWik7bGV0IFQ9Qk47VC54PWEuZG90KG4sciksVC55PWEuZG90KG4saSksVC56PWEuZG90KG4scyk7bGV0IE89MCxFO3JldHVybiBULng8LWY/KEU9VC54K2YsTys9RSpFKTpULng+ZiYmKEU9VC54LWYsTys9RSpFKSxULnk8LXU/KEU9VC55K3UsTys9RSpFKTpULnk+dSYmKEU9VC55LXUsTys9RSpFKSxULno8LWM/KEU9VC56K2MsTys9RSpFKTpULno+YyYmKEU9VC56LWMsTys9RSpFKSxPfTtVTj1uZXcgYSxrTj1uZXcgYTtCZS5jb21wdXRlUGxhbmVEaXN0YW5jZXM9ZnVuY3Rpb24odCxlLG4sbyl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImJveCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgicG9zaXRpb24gaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEwoImRpcmVjdGlvbiBpcyByZXF1aXJlZC4iKTtoKG8pfHwobz1uZXcgUXIpO2xldCByPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxpPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzPXQuY2VudGVyLGY9dC5oYWxmQXhlcyx1PVouZ2V0Q29sdW1uKGYsMCxZVCksYz1aLmdldENvbHVtbihmLDEsJFQpLGw9Wi5nZXRDb2x1bW4oZiwyLFpUKSxwPWEuYWRkKHUsYyxVTik7YS5hZGQocCxsLHApLGEuYWRkKHAscyxwKTtsZXQgZD1hLnN1YnRyYWN0KHAsZSxrTiksbT1hLmRvdChuLGQpO3JldHVybiByPU1hdGgubWluKG0sciksaT1NYXRoLm1heChtLGkpLGEuYWRkKHMsdSxwKSxhLmFkZChwLGMscCksYS5zdWJ0cmFjdChwLGwscCksYS5zdWJ0cmFjdChwLGUsZCksbT1hLmRvdChuLGQpLHI9TWF0aC5taW4obSxyKSxpPU1hdGgubWF4KG0saSksYS5hZGQocyx1LHApLGEuc3VidHJhY3QocCxjLHApLGEuYWRkKHAsbCxwKSxhLnN1YnRyYWN0KHAsZSxkKSxtPWEuZG90KG4sZCkscj1NYXRoLm1pbihtLHIpLGk9TWF0aC5tYXgobSxpKSxhLmFkZChzLHUscCksYS5zdWJ0cmFjdChwLGMscCksYS5zdWJ0cmFjdChwLGwscCksYS5zdWJ0cmFjdChwLGUsZCksbT1hLmRvdChuLGQpLHI9TWF0aC5taW4obSxyKSxpPU1hdGgubWF4KG0saSksYS5zdWJ0cmFjdChzLHUscCksYS5hZGQocCxjLHApLGEuYWRkKHAsbCxwKSxhLnN1YnRyYWN0KHAsZSxkKSxtPWEuZG90KG4sZCkscj1NYXRoLm1pbihtLHIpLGk9TWF0aC5tYXgobSxpKSxhLnN1YnRyYWN0KHMsdSxwKSxhLmFkZChwLGMscCksYS5zdWJ0cmFjdChwLGwscCksYS5zdWJ0cmFjdChwLGUsZCksbT1hLmRvdChuLGQpLHI9TWF0aC5taW4obSxyKSxpPU1hdGgubWF4KG0saSksYS5zdWJ0cmFjdChzLHUscCksYS5zdWJ0cmFjdChwLGMscCksYS5hZGQocCxsLHApLGEuc3VidHJhY3QocCxlLGQpLG09YS5kb3QobixkKSxyPU1hdGgubWluKG0sciksaT1NYXRoLm1heChtLGkpLGEuc3VidHJhY3Qocyx1LHApLGEuc3VidHJhY3QocCxjLHApLGEuc3VidHJhY3QocCxsLHApLGEuc3VidHJhY3QocCxlLGQpLG09YS5kb3QobixkKSxyPU1hdGgubWluKG0sciksaT1NYXRoLm1heChtLGkpLG8uc3RhcnQ9cixvLnN0b3A9aSxvfTtHTj1uZXcgYSxWTj1uZXcgYSx6Tj1uZXcgYTtCZS5jb21wdXRlQ29ybmVycz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiYm94Iix0KSxoKGUpfHwoZT1bbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGFdKTtsZXQgbj10LmNlbnRlcixvPXQuaGFsZkF4ZXMscj1aLmdldENvbHVtbihvLDAsR04pLGk9Wi5nZXRDb2x1bW4obywxLFZOKSxzPVouZ2V0Q29sdW1uKG8sMix6Tik7cmV0dXJuIGEuY2xvbmUobixlWzBdKSxhLnN1YnRyYWN0KGVbMF0scixlWzBdKSxhLnN1YnRyYWN0KGVbMF0saSxlWzBdKSxhLnN1YnRyYWN0KGVbMF0scyxlWzBdKSxhLmNsb25lKG4sZVsxXSksYS5zdWJ0cmFjdChlWzFdLHIsZVsxXSksYS5zdWJ0cmFjdChlWzFdLGksZVsxXSksYS5hZGQoZVsxXSxzLGVbMV0pLGEuY2xvbmUobixlWzJdKSxhLnN1YnRyYWN0KGVbMl0scixlWzJdKSxhLmFkZChlWzJdLGksZVsyXSksYS5zdWJ0cmFjdChlWzJdLHMsZVsyXSksYS5jbG9uZShuLGVbM10pLGEuc3VidHJhY3QoZVszXSxyLGVbM10pLGEuYWRkKGVbM10saSxlWzNdKSxhLmFkZChlWzNdLHMsZVszXSksYS5jbG9uZShuLGVbNF0pLGEuYWRkKGVbNF0scixlWzRdKSxhLnN1YnRyYWN0KGVbNF0saSxlWzRdKSxhLnN1YnRyYWN0KGVbNF0scyxlWzRdKSxhLmNsb25lKG4sZVs1XSksYS5hZGQoZVs1XSxyLGVbNV0pLGEuc3VidHJhY3QoZVs1XSxpLGVbNV0pLGEuYWRkKGVbNV0scyxlWzVdKSxhLmNsb25lKG4sZVs2XSksYS5hZGQoZVs2XSxyLGVbNl0pLGEuYWRkKGVbNl0saSxlWzZdKSxhLnN1YnRyYWN0KGVbNl0scyxlWzZdKSxhLmNsb25lKG4sZVs3XSksYS5hZGQoZVs3XSxyLGVbN10pLGEuYWRkKGVbN10saSxlWzddKSxhLmFkZChlWzddLHMsZVs3XSksZX07ak49bmV3IFo7QmUuY29tcHV0ZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJib3giLHQpLGgoZSl8fChlPW5ldyBpdCk7bGV0IG49dC5jZW50ZXIsbz1aLm11bHRpcGx5QnlVbmlmb3JtU2NhbGUodC5oYWxmQXhlcywyLGpOKTtyZXR1cm4gaXQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24obyxuLGUpfTtITj1uZXcgZ3Q7QmUuaXNPY2NsdWRlZD1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJib3ggaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoIm9jY2x1ZGVyIGlzIHJlcXVpcmVkLiIpO2xldCBuPWd0LmZyb21PcmllbnRlZEJvdW5kaW5nQm94KHQsSE4pO3JldHVybiFlLmlzQm91bmRpbmdTcGhlcmVWaXNpYmxlKG4pfTtCZS5wcm90b3R5cGUuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24odCl7cmV0dXJuIEJlLmludGVyc2VjdFBsYW5lKHRoaXMsdCl9O0JlLnByb3RvdHlwZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbih0KXtyZXR1cm4gQmUuZGlzdGFuY2VTcXVhcmVkVG8odGhpcyx0KX07QmUucHJvdG90eXBlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIEJlLmNvbXB1dGVQbGFuZURpc3RhbmNlcyh0aGlzLHQsZSxuKX07QmUucHJvdG90eXBlLmNvbXB1dGVDb3JuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBCZS5jb21wdXRlQ29ybmVycyh0aGlzLHQpfTtCZS5wcm90b3R5cGUuY29tcHV0ZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBCZS5jb21wdXRlVHJhbnNmb3JtYXRpb24odGhpcyx0KX07QmUucHJvdG90eXBlLmlzT2NjbHVkZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIEJlLmlzT2NjbHVkZWQodGhpcyx0KX07QmUuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZhLmVxdWFscyh0LmNlbnRlcixlLmNlbnRlcikmJlouZXF1YWxzKHQuaGFsZkF4ZXMsZS5oYWxmQXhlcyl9O0JlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gQmUuY2xvbmUodGhpcyx0KX07QmUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gQmUuZXF1YWxzKHRoaXMsdCl9O1NvPUJlfSk7ZnVuY3Rpb24gbncodCxlLG4sbyxyKXtsZXQgaT1hLnN1YnRyYWN0KHQsZSxxTikscz1hLmRvdChuLGkpLGY9YS5kb3QobyxpKTtyZXR1cm4gSi5mcm9tRWxlbWVudHMocyxmLHIpfXZhciBQZixxTixRVCxKVCx0dyxldyxkYSx4MD0kKCgpPT57VWUoKTtMdCgpO1d0KCk7Qm4oKTtwYSgpO1BmPXt9LHFOPW5ldyBhLFFUPW5ldyBhLEpUPW5ldyBhLHR3PW5ldyBhLGV3PW5ldyBTbztQZi52YWxpZE91dGxpbmU9ZnVuY3Rpb24odCl7eS5kZWZpbmVkKCJwb3NpdGlvbnMiLHQpO2xldCBuPVNvLmZyb21Qb2ludHModCxldykuaGFsZkF4ZXMsbz1aLmdldENvbHVtbihuLDAsUVQpLHI9Wi5nZXRDb2x1bW4obiwxLEpUKSxpPVouZ2V0Q29sdW1uKG4sMix0dykscz1hLm1hZ25pdHVkZShvKSxmPWEubWFnbml0dWRlKHIpLHU9YS5tYWduaXR1ZGUoaSk7cmV0dXJuIShzPT09MCYmKGY9PT0wfHx1PT09MCl8fGY9PT0wJiZ1PT09MCl9O1BmLmNvbXB1dGVQcm9qZWN0VG8yREFyZ3VtZW50cz1mdW5jdGlvbih0LGUsbixvKXt5LmRlZmluZWQoInBvc2l0aW9ucyIsdCkseS5kZWZpbmVkKCJjZW50ZXJSZXN1bHQiLGUpLHkuZGVmaW5lZCgicGxhbmVBeGlzMVJlc3VsdCIsbikseS5kZWZpbmVkKCJwbGFuZUF4aXMyUmVzdWx0IixvKTtsZXQgcj1Tby5mcm9tUG9pbnRzKHQsZXcpLGk9ci5oYWxmQXhlcyxzPVouZ2V0Q29sdW1uKGksMCxRVCksZj1aLmdldENvbHVtbihpLDEsSlQpLHU9Wi5nZXRDb2x1bW4oaSwyLHR3KSxjPWEubWFnbml0dWRlKHMpLGw9YS5tYWduaXR1ZGUoZikscD1hLm1hZ25pdHVkZSh1KSxkPU1hdGgubWluKGMsbCxwKTtpZihjPT09MCYmKGw9PT0wfHxwPT09MCl8fGw9PT0wJiZwPT09MClyZXR1cm4hMTtsZXQgbSxfO3JldHVybihkPT09bHx8ZD09PXApJiYobT1zKSxkPT09Yz9tPWY6ZD09PXAmJihfPWYpLChkPT09Y3x8ZD09PWwpJiYoXz11KSxhLm5vcm1hbGl6ZShtLG4pLGEubm9ybWFsaXplKF8sbyksYS5jbG9uZShyLmNlbnRlcixlKSwhMH07UGYuY3JlYXRlUHJvamVjdFBvaW50c1RvMkRGdW5jdGlvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKG8pe2xldCByPW5ldyBBcnJheShvLmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxvLmxlbmd0aDtpKyspcltpXT1udyhvW2ldLHQsZSxuKTtyZXR1cm4gcn19O1BmLmNyZWF0ZVByb2plY3RQb2ludFRvMkRGdW5jdGlvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKG8scil7cmV0dXJuIG53KG8sdCxlLG4scil9fTtkYT1QZn0pO3ZhciBLTixoZSxmYz0kKCgpPT57S049e05PTkU6MCxHRU9ERVNJQzoxLFJIVU1COjJ9LGhlPU9iamVjdC5mcmVlemUoS04pfSk7ZnVuY3Rpb24gTTAodCxlLG4pe2lmKHQ9PT0wKXJldHVybiBlKm47bGV0IG89dCp0LHI9bypvLGk9cipvLHM9aSpvLGY9cypvLHU9ZipvLGM9bixsPU1hdGguc2luKDIqYykscD1NYXRoLnNpbig0KmMpLGQ9TWF0aC5zaW4oNipjKSxtPU1hdGguc2luKDgqYyksXz1NYXRoLnNpbigxMCpjKSxnPU1hdGguc2luKDEyKmMpO3JldHVybiBlKigoMS1vLzQtMypyLzY0LTUqaS8yNTYtMTc1KnMvMTYzODQtNDQxKmYvNjU1MzYtNDg1MSp1LzEwNDg1NzYpKmMtKDMqby84KzMqci8zMis0NSppLzEwMjQrMTA1KnMvNDA5NisyMjA1KmYvMTMxMDcyKzYyMzcqdS81MjQyODgpKmwrKDE1KnIvMjU2KzQ1KmkvMTAyNCs1MjUqcy8xNjM4NCsxNTc1KmYvNjU1MzYrMTU1OTI1KnUvODM4ODYwOCkqcC0oMzUqaS8zMDcyKzE3NSpzLzEyMjg4KzM2NzUqZi8yNjIxNDQrMTM0NzUqdS8xMDQ4NTc2KSpkKygzMTUqcy8xMzEwNzIrMjIwNSpmLzUyNDI4OCs0MzY1OSp1LzgzODg2MDgpKm0tKDY5MypmLzEzMTA3MjArNjIzNyp1LzUyNDI4ODApKl8rMTAwMSp1LzgzODg2MDgqZyl9ZnVuY3Rpb24gV04odCxlLG4pe2xldCBvPXQvbjtpZihlPT09MClyZXR1cm4gbztsZXQgcj1vKm8saT1yKm8scz1pKm8sZj1lLHU9ZipmLGM9dSp1LGw9Yyp1LHA9bCp1LGQ9cCp1LG09ZCp1LF89TWF0aC5zaW4oMipvKSxnPU1hdGguY29zKDIqbyksYj1NYXRoLnNpbig0Km8pLFQ9TWF0aC5jb3MoNCpvKSxPPU1hdGguc2luKDYqbyksRT1NYXRoLmNvcyg2Km8pLHc9TWF0aC5zaW4oOCpvKSxDPU1hdGguY29zKDgqbyksTT1NYXRoLnNpbigxMCpvKSxOPU1hdGguY29zKDEwKm8pLEY9TWF0aC5zaW4oMTIqbyk7cmV0dXJuIG8rbyp1LzQrNypvKmMvNjQrMTUqbypsLzI1Nis1NzkqbypwLzE2Mzg0KzE1MTUqbypkLzY1NTM2KzE2ODM3Km8qbS8xMDQ4NTc2KygzKm8qYy8xNis0NSpvKmwvMjU2LW8qKDMyKnItNTYxKSpwLzQwOTYtbyooMjMyKnItMTY3NykqZC8xNjM4NCtvKigzOTk5ODUtOTA1NjAqcis1MTIqcykqbS81MjQyODgwKSpnKygyMSpvKmwvMjU2KzQ4MypvKnAvNDA5Ni1vKigyMjQqci0xOTY5KSpkLzE2Mzg0LW8qKDMzMTUyKnItMTEyNTk5KSptLzEwNDg1NzYpKlQrKDE1MSpvKnAvNDA5Nis0NjgxKm8qZC82NTUzNisxNDc5Km8qbS8xNjM4NC00NTMqaSptLzMyNzY4KSpFKygxMDk3Km8qZC82NTUzNis0Mjc4MypvKm0vMTA0ODU3NikqQys4MDExKm8qbS8xMDQ4NTc2Kk4rKDMqdS84KzMqYy8xNisyMTMqbC8yMDQ4LTMqcipsLzY0KzI1NSpwLzQwOTYtMzMqcipwLzUxMisyMDg2MSpkLzUyNDI4OC0zMypyKmQvNTEyK3MqZC8xMDI0KzI4MjczKm0vMTA0ODU3Ni00NzEqciptLzgxOTIrOSpzKm0vNDA5NikqXysoMjEqYy8yNTYrMjEqbC8yNTYrNTMzKnAvODE5Mi0yMSpyKnAvNTEyKzE5NypkLzQwOTYtMzE1KnIqZC80MDk2KzU4NDAzOSptLzE2Nzc3MjE2LTEyNTE3KnIqbS8xMzEwNzIrNypzKm0vMjA0OCkqYisoMTUxKmwvNjE0NCsxNTEqcC80MDk2KzUwMTkqZC8xMzEwNzItNDUzKnIqZC8xNjM4NCsyNjk2NSptLzc4NjQzMi04NjA3KnIqbS8xMzEwNzIpKk8rKDEwOTcqcC8xMzEwNzIrMTA5NypkLzY1NTM2KzIyNTc5NyptLzEwNDg1NzYwLTEwOTcqciptLzY1NTM2KSp3Kyg4MDExKmQvMjYyMTQ0MCs4MDExKm0vMTA0ODU3NikqTSsyOTMzOTMqbS8yNTE2NTgyNDAqRn1mdW5jdGlvbiBtYSh0LGUpe2lmKHQ9PT0wKXJldHVybiBNYXRoLmxvZyhNYXRoLnRhbiguNSooUC5QSV9PVkVSX1RXTytlKSkpO2xldCBuPXQqTWF0aC5zaW4oZSk7cmV0dXJuIE1hdGgubG9nKE1hdGgudGFuKC41KihQLlBJX09WRVJfVFdPK2UpKSktdC8yKk1hdGgubG9nKCgxK24pLygxLW4pKX1mdW5jdGlvbiBYTih0LGUsbixvLHIpe2xldCBpPW1hKHQuX2VsbGlwdGljaXR5LG4pLHM9bWEodC5fZWxsaXB0aWNpdHkscik7cmV0dXJuIE1hdGguYXRhbjIoUC5uZWdhdGl2ZVBpVG9QaShvLWUpLHMtaSl9ZnVuY3Rpb24gWU4odCxlLG4sbyxyLGkscyl7bGV0IGY9dC5faGVhZGluZyx1PWktbyxjPTA7aWYoUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGYpLFAuUElfT1ZFUl9UV08sUC5FUFNJTE9OOCkpaWYoZT09PW4pYz1lKk1hdGguY29zKHIpKlAubmVnYXRpdmVQaVRvUGkodSk7ZWxzZXtsZXQgbD1NYXRoLnNpbihyKTtjPWUqTWF0aC5jb3MocikqUC5uZWdhdGl2ZVBpVG9QaSh1KS9NYXRoLnNxcnQoMS10Ll9lbGxpcHRpY2l0eVNxdWFyZWQqbCpsKX1lbHNle2xldCBsPU0wKHQuX2VsbGlwdGljaXR5LGUscik7Yz0oTTAodC5fZWxsaXB0aWNpdHksZSxzKS1sKS9NYXRoLmNvcyhmKX1yZXR1cm4gTWF0aC5hYnMoYyl9ZnVuY3Rpb24gb3codCxlLG4sbyl7bGV0IHI9YS5ub3JtYWxpemUoby5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihlLFAwKSwkTiksaT1hLm5vcm1hbGl6ZShvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKG4sUDApLFAwKTt5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygidmFsdWUiLE1hdGguYWJzKE1hdGguYWJzKGEuYW5nbGVCZXR3ZWVuKHIsaSkpLU1hdGguUEkpLC4wMTI1KTtsZXQgcz1vLm1heGltdW1SYWRpdXMsZj1vLm1pbmltdW1SYWRpdXMsdT1zKnMsYz1mKmY7dC5fZWxsaXB0aWNpdHlTcXVhcmVkPSh1LWMpL3UsdC5fZWxsaXB0aWNpdHk9TWF0aC5zcXJ0KHQuX2VsbGlwdGljaXR5U3F1YXJlZCksdC5fc3RhcnQ9c3QuY2xvbmUoZSx0Ll9zdGFydCksdC5fc3RhcnQuaGVpZ2h0PTAsdC5fZW5kPXN0LmNsb25lKG4sdC5fZW5kKSx0Ll9lbmQuaGVpZ2h0PTAsdC5faGVhZGluZz1YTih0LGUubG9uZ2l0dWRlLGUubGF0aXR1ZGUsbi5sb25naXR1ZGUsbi5sYXRpdHVkZSksdC5fZGlzdGFuY2U9WU4odCxvLm1heGltdW1SYWRpdXMsby5taW5pbXVtUmFkaXVzLGUubG9uZ2l0dWRlLGUubGF0aXR1ZGUsbi5sb25naXR1ZGUsbi5sYXRpdHVkZSl9ZnVuY3Rpb24gcncodCxlLG4sbyxyLGkpe2lmKG49PT0wKXJldHVybiBzdC5jbG9uZSh0LGkpO2xldCBzPXIqcixmLHUsYztpZihNYXRoLmFicyhQLlBJX09WRVJfVFdPLU1hdGguYWJzKGUpKT5QLkVQU0lMT044KXtsZXQgbD1NMChyLG8sdC5sYXRpdHVkZSkscD1uKk1hdGguY29zKGUpLGQ9bCtwO2lmKHU9V04oZCxyLG8pLE1hdGguYWJzKGUpPFAuRVBTSUxPTjEwKWY9UC5uZWdhdGl2ZVBpVG9QaSh0LmxvbmdpdHVkZSk7ZWxzZXtsZXQgbT1tYShyLHQubGF0aXR1ZGUpLF89bWEocix1KTtjPU1hdGgudGFuKGUpKihfLW0pLGY9UC5uZWdhdGl2ZVBpVG9QaSh0LmxvbmdpdHVkZStjKX19ZWxzZXt1PXQubGF0aXR1ZGU7bGV0IGw7aWYocj09PTApbD1vKk1hdGguY29zKHQubGF0aXR1ZGUpO2Vsc2V7bGV0IHA9TWF0aC5zaW4odC5sYXRpdHVkZSk7bD1vKk1hdGguY29zKHQubGF0aXR1ZGUpL01hdGguc3FydCgxLXMqcCpwKX1jPW4vbCxlPjA/Zj1QLm5lZ2F0aXZlUGlUb1BpKHQubG9uZ2l0dWRlK2MpOmY9UC5uZWdhdGl2ZVBpVG9QaSh0LmxvbmdpdHVkZS1jKX1yZXR1cm4gaChpKT8oaS5sb25naXR1ZGU9ZixpLmxhdGl0dWRlPXUsaS5oZWlnaHQ9MCxpKTpuZXcgc3QoZix1LDApfWZ1bmN0aW9uIERpKHQsZSxuKXtsZXQgbz1uPz9ZLmRlZmF1bHQ7dGhpcy5fZWxsaXBzb2lkPW8sdGhpcy5fc3RhcnQ9bmV3IHN0LHRoaXMuX2VuZD1uZXcgc3QsdGhpcy5faGVhZGluZz12b2lkIDAsdGhpcy5fZGlzdGFuY2U9dm9pZCAwLHRoaXMuX2VsbGlwdGljaXR5PXZvaWQgMCx0aGlzLl9lbGxpcHRpY2l0eVNxdWFyZWQ9dm9pZCAwLGgodCkmJmgoZSkmJm93KHRoaXMsdCxlLG8pfXZhciAkTixQMCxabyxNZj0kKCgpPT57THQoKTtJZSgpO1d0KCk7YXQoKTtqdCgpOyR0KCk7S3QoKTskTj1uZXcgYSxQMD1uZXcgYTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaS5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc29pZH19LHN1cmZhY2VEaXN0YW5jZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuZGVmaW5lZCgiZGlzdGFuY2UiLHRoaXMuX2Rpc3RhbmNlKSx0aGlzLl9kaXN0YW5jZX19LHN0YXJ0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnR9fSxlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmR9fSxoZWFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZpbmVkKCJkaXN0YW5jZSIsdGhpcy5fZGlzdGFuY2UpLHRoaXMuX2hlYWRpbmd9fX0pO0RpLmZyb21TdGFydEhlYWRpbmdEaXN0YW5jZT1mdW5jdGlvbih0LGUsbixvLHIpe3kuZGVmaW5lZCgic3RhcnQiLHQpLHkuZGVmaW5lZCgiaGVhZGluZyIsZSkseS5kZWZpbmVkKCJkaXN0YW5jZSIsbikseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuKCJkaXN0YW5jZSIsbiwwKTtsZXQgaT1vPz9ZLmRlZmF1bHQscz1pLm1heGltdW1SYWRpdXMsZj1pLm1pbmltdW1SYWRpdXMsdT1zKnMsYz1mKmYsbD1NYXRoLnNxcnQoKHUtYykvdSk7ZT1QLm5lZ2F0aXZlUGlUb1BpKGUpO2xldCBwPXJ3KHQsZSxuLGkubWF4aW11bVJhZGl1cyxsKTtyZXR1cm4haChyKXx8aChvKSYmIW8uZXF1YWxzKHIuZWxsaXBzb2lkKT9uZXcgRGkodCxwLGkpOihyLnNldEVuZFBvaW50cyh0LHApLHIpfTtEaS5wcm90b3R5cGUuc2V0RW5kUG9pbnRzPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJzdGFydCIsdCkseS5kZWZpbmVkKCJlbmQiLGUpLG93KHRoaXMsdCxlLHRoaXMuX2VsbGlwc29pZCl9O0RpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKHQqdGhpcy5fZGlzdGFuY2UsZSl9O0RpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2YubnVtYmVyKCJkaXN0YW5jZSIsdCksIWgodGhpcy5fZGlzdGFuY2UpfHx0aGlzLl9kaXN0YW5jZT09PTApdGhyb3cgbmV3IEwoIkVsbGlwc29pZFJodW1iTGluZSBtdXN0IGhhdmUgZGlzdGluY3Qgc3RhcnQgYW5kIGVuZCBzZXQuIik7cmV0dXJuIHJ3KHRoaXMuX3N0YXJ0LHRoaXMuX2hlYWRpbmcsdCx0aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9lbGxpcHRpY2l0eSxlKX07RGkucHJvdG90eXBlLmZpbmRJbnRlcnNlY3Rpb25XaXRoTG9uZ2l0dWRlPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2YubnVtYmVyKCJpbnRlcnNlY3Rpb25Mb25naXR1ZGUiLHQpLCFoKHRoaXMuX2Rpc3RhbmNlKXx8dGhpcy5fZGlzdGFuY2U9PT0wKXRocm93IG5ldyBMKCJFbGxpcHNvaWRSaHVtYkxpbmUgbXVzdCBoYXZlIGRpc3RpbmN0IHN0YXJ0IGFuZCBlbmQgc2V0LiIpO2xldCBuPXRoaXMuX2VsbGlwdGljaXR5LG89dGhpcy5faGVhZGluZyxyPU1hdGguYWJzKG8pLGk9dGhpcy5fc3RhcnQ7aWYodD1QLm5lZ2F0aXZlUGlUb1BpKHQpLFAuZXF1YWxzRXBzaWxvbihNYXRoLmFicyh0KSxNYXRoLlBJLFAuRVBTSUxPTjE0KSYmKHQ9UC5zaWduKGkubG9uZ2l0dWRlKSpNYXRoLlBJKSxoKGUpfHwoZT1uZXcgc3QpLE1hdGguYWJzKFAuUElfT1ZFUl9UV08tcik8PVAuRVBTSUxPTjgpcmV0dXJuIGUubG9uZ2l0dWRlPXQsZS5sYXRpdHVkZT1pLmxhdGl0dWRlLGUuaGVpZ2h0PTAsZTtpZihQLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMoUC5QSV9PVkVSX1RXTy1yKSxQLlBJX09WRVJfVFdPLFAuRVBTSUxPTjgpKXJldHVybiBQLmVxdWFsc0Vwc2lsb24odCxpLmxvbmdpdHVkZSxQLkVQU0lMT04xMik/dm9pZCAwOihlLmxvbmdpdHVkZT10LGUubGF0aXR1ZGU9UC5QSV9PVkVSX1RXTypQLnNpZ24oUC5QSV9PVkVSX1RXTy1vKSxlLmhlaWdodD0wLGUpO2xldCBzPWkubGF0aXR1ZGUsZj1uKk1hdGguc2luKHMpLHU9TWF0aC50YW4oLjUqKFAuUElfT1ZFUl9UV08rcykpKk1hdGguZXhwKCh0LWkubG9uZ2l0dWRlKS9NYXRoLnRhbihvKSksYz0oMStmKS8oMS1mKSxsPWkubGF0aXR1ZGUscDtkb3twPWw7bGV0IGQ9bipNYXRoLnNpbihwKSxtPSgxK2QpLygxLWQpO2w9MipNYXRoLmF0YW4odSpNYXRoLnBvdyhtL2Msbi8yKSktUC5QSV9PVkVSX1RXT313aGlsZSghUC5lcXVhbHNFcHNpbG9uKGwscCxQLkVQU0lMT04xMikpO3JldHVybiBlLmxvbmdpdHVkZT10LGUubGF0aXR1ZGU9bCxlLmhlaWdodD0wLGV9O0RpLnByb3RvdHlwZS5maW5kSW50ZXJzZWN0aW9uV2l0aExhdGl0dWRlPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2YubnVtYmVyKCJpbnRlcnNlY3Rpb25MYXRpdHVkZSIsdCksIWgodGhpcy5fZGlzdGFuY2UpfHx0aGlzLl9kaXN0YW5jZT09PTApdGhyb3cgbmV3IEwoIkVsbGlwc29pZFJodW1iTGluZSBtdXN0IGhhdmUgZGlzdGluY3Qgc3RhcnQgYW5kIGVuZCBzZXQuIik7bGV0IG49dGhpcy5fZWxsaXB0aWNpdHksbz10aGlzLl9oZWFkaW5nLHI9dGhpcy5fc3RhcnQ7aWYoUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKG8pLFAuUElfT1ZFUl9UV08sUC5FUFNJTE9OOCkpcmV0dXJuO2xldCBpPW1hKG4sci5sYXRpdHVkZSkscz1tYShuLHQpLGY9TWF0aC50YW4obykqKHMtaSksdT1QLm5lZ2F0aXZlUGlUb1BpKHIubG9uZ2l0dWRlK2YpO3JldHVybiBoKGUpPyhlLmxvbmdpdHVkZT11LGUubGF0aXR1ZGU9dCxlLmhlaWdodD0wLGUpOm5ldyBzdCh1LHQsMCl9O1pvPURpfSk7ZnVuY3Rpb24gWk4odCxlKXt0aGlzLnBvc2l0aW9ucz1oKHQpP3Q6W10sdGhpcy5ob2xlcz1oKGUpP2U6W119dmFyIGl3LHN3PSQoKCk9PnthdCgpO2l3PVpOfSk7ZnVuY3Rpb24gdjAodCxlLG49Mil7bGV0IG89ZSYmZS5sZW5ndGgscj1vP2VbMF0qbjp0Lmxlbmd0aCxpPWF3KHQsMCxyLG4sITApLHM9W107aWYoIWl8fGkubmV4dD09PWkucHJldilyZXR1cm4gcztsZXQgZix1LGM7aWYobyYmKGk9bkkodCxlLGksbikpLHQubGVuZ3RoPjgwKm4pe2Y9MS8wLHU9MS8wO2xldCBsPS0xLzAscD0tMS8wO2ZvcihsZXQgZD1uO2Q8cjtkKz1uKXtsZXQgbT10W2RdLF89dFtkKzFdO208ZiYmKGY9bSksXzx1JiYodT1fKSxtPmwmJihsPW0pLF8+cCYmKHA9Xyl9Yz1NYXRoLm1heChsLWYscC11KSxjPWMhPT0wPzMyNzY3L2M6MH1yZXR1cm4gSWYoaSxzLG4sZix1LGMsMCksc31mdW5jdGlvbiBhdyh0LGUsbixvLHIpe2xldCBpO2lmKHI9PT1kSSh0LGUsbixvKT4wKWZvcihsZXQgcz1lO3M8bjtzKz1vKWk9Y3cocy9vfDAsdFtzXSx0W3MrMV0saSk7ZWxzZSBmb3IobGV0IHM9bi1vO3M+PWU7cy09bylpPWN3KHMvb3wwLHRbc10sdFtzKzFdLGkpO3JldHVybiBpJiZoYShpLGkubmV4dCkmJihGZihpKSxpPWkubmV4dCksaX1mdW5jdGlvbiB1Yyh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO2xldCBuPXQsbztkbyBpZihvPSExLCFuLnN0ZWluZXImJihoYShuLG4ubmV4dCl8fHZuKG4ucHJldixuLG4ubmV4dCk9PT0wKSl7aWYoRmYobiksbj1lPW4ucHJldixuPT09bi5uZXh0KWJyZWFrO289ITB9ZWxzZSBuPW4ubmV4dDt3aGlsZShvfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gSWYodCxlLG4sbyxyLGkscyl7aWYoIXQpcmV0dXJuOyFzJiZpJiZjSSh0LG8scixpKTtsZXQgZj10O2Zvcig7dC5wcmV2IT09dC5uZXh0Oyl7bGV0IHU9dC5wcmV2LGM9dC5uZXh0O2lmKGk/Sk4odCxvLHIsaSk6UU4odCkpe2UucHVzaCh1LmksdC5pLGMuaSksRmYodCksdD1jLm5leHQsZj1jLm5leHQ7Y29udGludWV9aWYodD1jLHQ9PT1mKXtzP3M9PT0xPyh0PXRJKHVjKHQpLGUpLElmKHQsZSxuLG8scixpLDIpKTpzPT09MiYmZUkodCxlLG4sbyxyLGkpOklmKHVjKHQpLGUsbixvLHIsaSwxKTticmVha319fWZ1bmN0aW9uIFFOKHQpe2xldCBlPXQucHJldixuPXQsbz10Lm5leHQ7aWYodm4oZSxuLG8pPj0wKXJldHVybiExO2xldCByPWUueCxpPW4ueCxzPW8ueCxmPWUueSx1PW4ueSxjPW8ueSxsPU1hdGgubWluKHIsaSxzKSxwPU1hdGgubWluKGYsdSxjKSxkPU1hdGgubWF4KHIsaSxzKSxtPU1hdGgubWF4KGYsdSxjKSxfPW8ubmV4dDtmb3IoO18hPT1lOyl7aWYoXy54Pj1sJiZfLng8PWQmJl8ueT49cCYmXy55PD1tJiZOZihyLGYsaSx1LHMsYyxfLngsXy55KSYmdm4oXy5wcmV2LF8sXy5uZXh0KT49MClyZXR1cm4hMTtfPV8ubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBKTih0LGUsbixvKXtsZXQgcj10LnByZXYsaT10LHM9dC5uZXh0O2lmKHZuKHIsaSxzKT49MClyZXR1cm4hMTtsZXQgZj1yLngsdT1pLngsYz1zLngsbD1yLnkscD1pLnksZD1zLnksbT1NYXRoLm1pbihmLHUsYyksXz1NYXRoLm1pbihsLHAsZCksZz1NYXRoLm1heChmLHUsYyksYj1NYXRoLm1heChsLHAsZCksVD1OMChtLF8sZSxuLG8pLE89TjAoZyxiLGUsbixvKSxFPXQucHJldlosdz10Lm5leHRaO2Zvcig7RSYmRS56Pj1UJiZ3JiZ3Lno8PU87KXtpZihFLng+PW0mJkUueDw9ZyYmRS55Pj1fJiZFLnk8PWImJkUhPT1yJiZFIT09cyYmTmYoZixsLHUscCxjLGQsRS54LEUueSkmJnZuKEUucHJldixFLEUubmV4dCk+PTB8fChFPUUucHJldlosdy54Pj1tJiZ3Lng8PWcmJncueT49XyYmdy55PD1iJiZ3IT09ciYmdyE9PXMmJk5mKGYsbCx1LHAsYyxkLHcueCx3LnkpJiZ2bih3LnByZXYsdyx3Lm5leHQpPj0wKSlyZXR1cm4hMTt3PXcubmV4dFp9Zm9yKDtFJiZFLno+PVQ7KXtpZihFLng+PW0mJkUueDw9ZyYmRS55Pj1fJiZFLnk8PWImJkUhPT1yJiZFIT09cyYmTmYoZixsLHUscCxjLGQsRS54LEUueSkmJnZuKEUucHJldixFLEUubmV4dCk+PTApcmV0dXJuITE7RT1FLnByZXZafWZvcig7dyYmdy56PD1POyl7aWYody54Pj1tJiZ3Lng8PWcmJncueT49XyYmdy55PD1iJiZ3IT09ciYmdyE9PXMmJk5mKGYsbCx1LHAsYyxkLHcueCx3LnkpJiZ2bih3LnByZXYsdyx3Lm5leHQpPj0wKXJldHVybiExO3c9dy5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiB0SSh0LGUpe2xldCBuPXQ7ZG97bGV0IG89bi5wcmV2LHI9bi5uZXh0Lm5leHQ7IWhhKG8scikmJnV3KG8sbixuLm5leHQscikmJnZmKG8scikmJnZmKHIsbykmJihlLnB1c2goby5pLG4uaSxyLmkpLEZmKG4pLEZmKG4ubmV4dCksbj10PXIpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gdWMobil9ZnVuY3Rpb24gZUkodCxlLG4sbyxyLGkpe2xldCBzPXQ7ZG97bGV0IGY9cy5uZXh0Lm5leHQ7Zm9yKDtmIT09cy5wcmV2Oyl7aWYocy5pIT09Zi5pJiZ1SShzLGYpKXtsZXQgdT1sdyhzLGYpO3M9dWMocyxzLm5leHQpLHU9dWModSx1Lm5leHQpLElmKHMsZSxuLG8scixpLDApLElmKHUsZSxuLG8scixpLDApO3JldHVybn1mPWYubmV4dH1zPXMubmV4dH13aGlsZShzIT09dCl9ZnVuY3Rpb24gbkkodCxlLG4sbyl7bGV0IHI9W107Zm9yKGxldCBpPTAscz1lLmxlbmd0aDtpPHM7aSsrKXtsZXQgZj1lW2ldKm8sdT1pPHMtMT9lW2krMV0qbzp0Lmxlbmd0aCxjPWF3KHQsZix1LG8sITEpO2M9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLHIucHVzaChmSShjKSl9ci5zb3J0KG9JKTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyluPXJJKHJbaV0sbik7cmV0dXJuIG59ZnVuY3Rpb24gb0kodCxlKXtsZXQgbj10LngtZS54O2lmKG49PT0wJiYobj10LnktZS55LG49PT0wKSl7bGV0IG89KHQubmV4dC55LXQueSkvKHQubmV4dC54LXQueCkscj0oZS5uZXh0LnktZS55KS8oZS5uZXh0LngtZS54KTtuPW8tcn1yZXR1cm4gbn1mdW5jdGlvbiBySSh0LGUpe2xldCBuPWlJKHQsZSk7aWYoIW4pcmV0dXJuIGU7bGV0IG89bHcobix0KTtyZXR1cm4gdWMobyxvLm5leHQpLHVjKG4sbi5uZXh0KX1mdW5jdGlvbiBpSSh0LGUpe2xldCBuPWUsbz10Lngscj10LnksaT0tMS8wLHM7aWYoaGEodCxuKSlyZXR1cm4gbjtkb3tpZihoYSh0LG4ubmV4dCkpcmV0dXJuIG4ubmV4dDtpZihyPD1uLnkmJnI+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7bGV0IHA9bi54KyhyLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYocDw9byYmcD5pJiYoaT1wLHM9bi54PG4ubmV4dC54P246bi5uZXh0LHA9PT1vKSlyZXR1cm4gc31uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIXMpcmV0dXJuIG51bGw7bGV0IGY9cyx1PXMueCxjPXMueSxsPTEvMDtuPXM7ZG97aWYobz49bi54JiZuLng+PXUmJm8hPT1uLngmJmZ3KHI8Yz9vOmkscix1LGMscjxjP2k6byxyLG4ueCxuLnkpKXtsZXQgcD1NYXRoLmFicyhyLW4ueSkvKG8tbi54KTt2ZihuLHQpJiYocDxsfHxwPT09bCYmKG4ueD5zLnh8fG4ueD09PXMueCYmc0kocyxuKSkpJiYocz1uLGw9cCl9bj1uLm5leHR9d2hpbGUobiE9PWYpO3JldHVybiBzfWZ1bmN0aW9uIHNJKHQsZSl7cmV0dXJuIHZuKHQucHJldix0LGUucHJldik8MCYmdm4oZS5uZXh0LHQsdC5uZXh0KTwwfWZ1bmN0aW9uIGNJKHQsZSxuLG8pe2xldCByPXQ7ZG8gci56PT09MCYmKHIuej1OMChyLngsci55LGUsbixvKSksci5wcmV2Wj1yLnByZXYsci5uZXh0Wj1yLm5leHQscj1yLm5leHQ7d2hpbGUociE9PXQpO3IucHJldloubmV4dFo9bnVsbCxyLnByZXZaPW51bGwsYUkocil9ZnVuY3Rpb24gYUkodCl7bGV0IGUsbj0xO2Rve2xldCBvPXQscjt0PW51bGw7bGV0IGk9bnVsbDtmb3IoZT0wO287KXtlKys7bGV0IHM9byxmPTA7Zm9yKGxldCBjPTA7YzxuJiYoZisrLHM9cy5uZXh0WiwhIXMpO2MrKyk7bGV0IHU9bjtmb3IoO2Y+MHx8dT4wJiZzOylmIT09MCYmKHU9PT0wfHwhc3x8by56PD1zLnopPyhyPW8sbz1vLm5leHRaLGYtLSk6KHI9cyxzPXMubmV4dFosdS0tKSxpP2kubmV4dFo9cjp0PXIsci5wcmV2Wj1pLGk9cjtvPXN9aS5uZXh0Wj1udWxsLG4qPTJ9d2hpbGUoZT4xKTtyZXR1cm4gdH1mdW5jdGlvbiBOMCh0LGUsbixvLHIpe3JldHVybiB0PSh0LW4pKnJ8MCxlPShlLW8pKnJ8MCx0PSh0fHQ8PDgpJjE2NzExOTM1LHQ9KHR8dDw8NCkmMjUyNjQ1MTM1LHQ9KHR8dDw8MikmODU4OTkzNDU5LHQ9KHR8dDw8MSkmMTQzMTY1NTc2NSxlPShlfGU8PDgpJjE2NzExOTM1LGU9KGV8ZTw8NCkmMjUyNjQ1MTM1LGU9KGV8ZTw8MikmODU4OTkzNDU5LGU9KGV8ZTw8MSkmMTQzMTY1NTc2NSx0fGU8PDF9ZnVuY3Rpb24gZkkodCl7bGV0IGU9dCxuPXQ7ZG8oZS54PG4ueHx8ZS54PT09bi54JiZlLnk8bi55KSYmKG49ZSksZT1lLm5leHQ7d2hpbGUoZSE9PXQpO3JldHVybiBufWZ1bmN0aW9uIGZ3KHQsZSxuLG8scixpLHMsZil7cmV0dXJuKHItcykqKGUtZik+PSh0LXMpKihpLWYpJiYodC1zKSooby1mKT49KG4tcykqKGUtZikmJihuLXMpKihpLWYpPj0oci1zKSooby1mKX1mdW5jdGlvbiBOZih0LGUsbixvLHIsaSxzLGYpe3JldHVybiEodD09PXMmJmU9PT1mKSYmZncodCxlLG4sbyxyLGkscyxmKX1mdW5jdGlvbiB1SSh0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiFsSSh0LGUpJiYodmYodCxlKSYmdmYoZSx0KSYmcEkodCxlKSYmKHZuKHQucHJldix0LGUucHJldil8fHZuKHQsZS5wcmV2LGUpKXx8aGEodCxlKSYmdm4odC5wcmV2LHQsdC5uZXh0KT4wJiZ2bihlLnByZXYsZSxlLm5leHQpPjApfWZ1bmN0aW9uIHZuKHQsZSxuKXtyZXR1cm4oZS55LXQueSkqKG4ueC1lLngpLShlLngtdC54KSoobi55LWUueSl9ZnVuY3Rpb24gaGEodCxlKXtyZXR1cm4gdC54PT09ZS54JiZ0Lnk9PT1lLnl9ZnVuY3Rpb24gdXcodCxlLG4sbyl7bGV0IHI9bmQodm4odCxlLG4pKSxpPW5kKHZuKHQsZSxvKSkscz1uZCh2bihuLG8sdCkpLGY9bmQodm4obixvLGUpKTtyZXR1cm4hIShyIT09aSYmcyE9PWZ8fHI9PT0wJiZlZCh0LG4sZSl8fGk9PT0wJiZlZCh0LG8sZSl8fHM9PT0wJiZlZChuLHQsbyl8fGY9PT0wJiZlZChuLGUsbykpfWZ1bmN0aW9uIGVkKHQsZSxuKXtyZXR1cm4gZS54PD1NYXRoLm1heCh0Lngsbi54KSYmZS54Pj1NYXRoLm1pbih0Lngsbi54KSYmZS55PD1NYXRoLm1heCh0Lnksbi55KSYmZS55Pj1NYXRoLm1pbih0Lnksbi55KX1mdW5jdGlvbiBuZCh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gbEkodCxlKXtsZXQgbj10O2Rve2lmKG4uaSE9PXQuaSYmbi5uZXh0LmkhPT10LmkmJm4uaSE9PWUuaSYmbi5uZXh0LmkhPT1lLmkmJnV3KG4sbi5uZXh0LHQsZSkpcmV0dXJuITA7bj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiExfWZ1bmN0aW9uIHZmKHQsZSl7cmV0dXJuIHZuKHQucHJldix0LHQubmV4dCk8MD92bih0LGUsdC5uZXh0KT49MCYmdm4odCx0LnByZXYsZSk+PTA6dm4odCxlLHQucHJldik8MHx8dm4odCx0Lm5leHQsZSk8MH1mdW5jdGlvbiBwSSh0LGUpe2xldCBuPXQsbz0hMSxyPSh0LngrZS54KS8yLGk9KHQueStlLnkpLzI7ZG8gbi55PmkhPW4ubmV4dC55PmkmJm4ubmV4dC55IT09bi55JiZyPChuLm5leHQueC1uLngpKihpLW4ueSkvKG4ubmV4dC55LW4ueSkrbi54JiYobz0hbyksbj1uLm5leHQ7d2hpbGUobiE9PXQpO3JldHVybiBvfWZ1bmN0aW9uIGx3KHQsZSl7bGV0IG49STAodC5pLHQueCx0LnkpLG89STAoZS5pLGUueCxlLnkpLHI9dC5uZXh0LGk9ZS5wcmV2O3JldHVybiB0Lm5leHQ9ZSxlLnByZXY9dCxuLm5leHQ9cixyLnByZXY9bixvLm5leHQ9bixuLnByZXY9byxpLm5leHQ9byxvLnByZXY9aSxvfWZ1bmN0aW9uIGN3KHQsZSxuLG8pe2xldCByPUkwKHQsZSxuKTtyZXR1cm4gbz8oci5uZXh0PW8ubmV4dCxyLnByZXY9byxvLm5leHQucHJldj1yLG8ubmV4dD1yKTooci5wcmV2PXIsci5uZXh0PXIpLHJ9ZnVuY3Rpb24gRmYodCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBJMCh0LGUsbil7cmV0dXJue2k6dCx4OmUseTpuLHByZXY6bnVsbCxuZXh0Om51bGwsejowLHByZXZaOm51bGwsbmV4dFo6bnVsbCxzdGVpbmVyOiExfX1mdW5jdGlvbiBkSSh0LGUsbixvKXtsZXQgcj0wO2ZvcihsZXQgaT1lLHM9bi1vO2k8bjtpKz1vKXIrPSh0W3NdLXRbaV0pKih0W2krMV0rdFtzKzFdKSxzPWk7cmV0dXJuIHJ9dmFyIHB3PSQoKCk9Pnt9KTt2YXIgb2QsQ28sbGM9JCgoKT0+eyRzKCk7b2Q9e0NMT0NLV0lTRTpIdC5DVyxDT1VOVEVSX0NMT0NLV0lTRTpIdC5DQ1d9O29kLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09b2QuQ0xPQ0tXSVNFfHx0PT09b2QuQ09VTlRFUl9DTE9DS1dJU0V9O0NvPU9iamVjdC5mcmVlemUob2QpfSk7dmFyIG1JLGhJLGxzLF93LHl3LGd3LGR3LG13LGh3LEJpLEF3LGJ3LFR3LF9hLF9JLHlJLGdJLEYwLFBlLHFyPSQoKCk9PntwdygpO1VlKCk7THQoKTtJZSgpO1d0KCk7RGUoKTthdCgpOyR0KCk7TWYoKTtYZSgpO1llKCk7S3QoKTt0bigpO2xjKCk7bUk9bmV3IGEsaEk9bmV3IGEsbHM9e307bHMuY29tcHV0ZUFyZWEyRD1mdW5jdGlvbih0KXt5LmRlZmluZWQoInBvc2l0aW9ucyIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInBvc2l0aW9ucy5sZW5ndGgiLHQubGVuZ3RoLDMpO2xldCBlPXQubGVuZ3RoLG49MDtmb3IobGV0IG89ZS0xLHI9MDtyPGU7bz1yKyspe2xldCBpPXRbb10scz10W3JdO24rPWkueCpzLnktcy54KmkueX1yZXR1cm4gbiouNX07bHMuY29tcHV0ZVdpbmRpbmdPcmRlcjJEPWZ1bmN0aW9uKHQpe3JldHVybiBscy5jb21wdXRlQXJlYTJEKHQpPjA/Q28uQ09VTlRFUl9DTE9DS1dJU0U6Q28uQ0xPQ0tXSVNFfTtscy50cmlhbmd1bGF0ZT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgicG9zaXRpb25zIix0KTtsZXQgbj1KLnBhY2tBcnJheSh0KTtyZXR1cm4gdjAobixlLDIpfTtfdz1uZXcgYSx5dz1uZXcgYSxndz1uZXcgYSxkdz1uZXcgYSxtdz1uZXcgYSxodz1uZXcgYSxCaT1uZXcgYSxBdz1uZXcgSixidz1uZXcgSixUdz1uZXcgSixfYT1uZXcgSjtscy5jb21wdXRlU3ViZGl2aXNpb249ZnVuY3Rpb24odCxlLG4sbyxyKXtyPXI/P1AuUkFESUFOU19QRVJfREVHUkVFO2xldCBpPWgobyk7eS50eXBlT2Yub2JqZWN0KCJlbGxpcHNvaWQiLHQpLHkuZGVmaW5lZCgicG9zaXRpb25zIixlKSx5LmRlZmluZWQoImluZGljZXMiLG4pLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRpY2VzLmxlbmd0aCIsbi5sZW5ndGgsMykseS50eXBlT2YubnVtYmVyLmVxdWFscygiaW5kaWNlcy5sZW5ndGggJSAzIiwiMCIsbi5sZW5ndGglMywwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oImdyYW51bGFyaXR5IixyLDApO2xldCBzPW4uc2xpY2UoMCksZix1PWUubGVuZ3RoLGM9bmV3IEFycmF5KHUqMyksbD1uZXcgQXJyYXkodSoyKSxwPTAsZD0wO2ZvcihmPTA7Zjx1O2YrKyl7bGV0IEU9ZVtmXTtpZihjW3ArK109RS54LGNbcCsrXT1FLnksY1twKytdPUUueixpKXtsZXQgdz1vW2ZdO2xbZCsrXT13LngsbFtkKytdPXcueX19bGV0IG09W10sXz17fSxnPXQubWF4aW11bVJhZGl1cyxiPVAuY2hvcmRMZW5ndGgocixnKSxUPWIqYjtmb3IoO3MubGVuZ3RoPjA7KXtsZXQgRT1zLnBvcCgpLHc9cy5wb3AoKSxDPXMucG9wKCksTT1hLmZyb21BcnJheShjLEMqMyxfdyksTj1hLmZyb21BcnJheShjLHcqMyx5dyksRj1hLmZyb21BcnJheShjLEUqMyxndyksSSx2LEI7aSYmKEk9Si5mcm9tQXJyYXkobCxDKjIsQXcpLHY9Si5mcm9tQXJyYXkobCx3KjIsYncpLEI9Si5mcm9tQXJyYXkobCxFKjIsVHcpKTtsZXQgQT1hLm11bHRpcGx5QnlTY2FsYXIoYS5ub3JtYWxpemUoTSxkdyksZyxkdyksUz1hLm11bHRpcGx5QnlTY2FsYXIoYS5ub3JtYWxpemUoTixtdyksZyxtdykseD1hLm11bHRpcGx5QnlTY2FsYXIoYS5ub3JtYWxpemUoRixodyksZyxodyksRD1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChBLFMsQmkpKSx6PWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KFMseCxCaSkpLGo9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QoeCxBLEJpKSksaz1NYXRoLm1heChELHosaikscSxXLFI7az5UP0Q9PT1rPyhxPWAke01hdGgubWluKEMsdyl9ICR7TWF0aC5tYXgoQyx3KX1gLGY9X1txXSxoKGYpfHwoVz1hLmFkZChNLE4sQmkpLGEubXVsdGlwbHlCeVNjYWxhcihXLC41LFcpLGMucHVzaChXLngsVy55LFcueiksZj1jLmxlbmd0aC8zLTEsX1txXT1mLGkmJihSPUouYWRkKEksdixfYSksSi5tdWx0aXBseUJ5U2NhbGFyKFIsLjUsUiksbC5wdXNoKFIueCxSLnkpKSkscy5wdXNoKEMsZixFKSxzLnB1c2goZix3LEUpKTp6PT09az8ocT1gJHtNYXRoLm1pbih3LEUpfSAke01hdGgubWF4KHcsRSl9YCxmPV9bcV0saChmKXx8KFc9YS5hZGQoTixGLEJpKSxhLm11bHRpcGx5QnlTY2FsYXIoVywuNSxXKSxjLnB1c2goVy54LFcueSxXLnopLGY9Yy5sZW5ndGgvMy0xLF9bcV09ZixpJiYoUj1KLmFkZCh2LEIsX2EpLEoubXVsdGlwbHlCeVNjYWxhcihSLC41LFIpLGwucHVzaChSLngsUi55KSkpLHMucHVzaCh3LGYsQykscy5wdXNoKGYsRSxDKSk6aj09PWsmJihxPWAke01hdGgubWluKEUsQyl9ICR7TWF0aC5tYXgoRSxDKX1gLGY9X1txXSxoKGYpfHwoVz1hLmFkZChGLE0sQmkpLGEubXVsdGlwbHlCeVNjYWxhcihXLC41LFcpLGMucHVzaChXLngsVy55LFcueiksZj1jLmxlbmd0aC8zLTEsX1txXT1mLGkmJihSPUouYWRkKEIsSSxfYSksSi5tdWx0aXBseUJ5U2NhbGFyKFIsLjUsUiksbC5wdXNoKFIueCxSLnkpKSkscy5wdXNoKEUsZix3KSxzLnB1c2goZixDLHcpKToobS5wdXNoKEMpLG0ucHVzaCh3KSxtLnB1c2goRSkpfWxldCBPPXthdHRyaWJ1dGVzOntwb3NpdGlvbjpuZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KX0saW5kaWNlczptLHByaW1pdGl2ZVR5cGU6RHQuVFJJQU5HTEVTfTtyZXR1cm4gaSYmKE8uYXR0cmlidXRlcy5zdD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6bH0pKSxuZXcgQnQoTyl9O19JPW5ldyBzdCx5ST1uZXcgc3QsZ0k9bmV3IHN0LEYwPW5ldyBzdDtscy5jb21wdXRlUmh1bWJMaW5lU3ViZGl2aXNpb249ZnVuY3Rpb24odCxlLG4sbyxyKXtyPXI/P1AuUkFESUFOU19QRVJfREVHUkVFO2xldCBpPWgobyk7eS50eXBlT2Yub2JqZWN0KCJlbGxpcHNvaWQiLHQpLHkuZGVmaW5lZCgicG9zaXRpb25zIixlKSx5LmRlZmluZWQoImluZGljZXMiLG4pLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRpY2VzLmxlbmd0aCIsbi5sZW5ndGgsMykseS50eXBlT2YubnVtYmVyLmVxdWFscygiaW5kaWNlcy5sZW5ndGggJSAzIiwiMCIsbi5sZW5ndGglMywwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oImdyYW51bGFyaXR5IixyLDApO2xldCBzPW4uc2xpY2UoMCksZix1PWUubGVuZ3RoLGM9bmV3IEFycmF5KHUqMyksbD1uZXcgQXJyYXkodSoyKSxwPTAsZD0wO2ZvcihmPTA7Zjx1O2YrKyl7bGV0IEM9ZVtmXTtpZihjW3ArK109Qy54LGNbcCsrXT1DLnksY1twKytdPUMueixpKXtsZXQgTT1vW2ZdO2xbZCsrXT1NLngsbFtkKytdPU0ueX19bGV0IG09W10sXz17fSxnPXQubWF4aW11bVJhZGl1cyxiPVAuY2hvcmRMZW5ndGgocixnKSxUPW5ldyBabyh2b2lkIDAsdm9pZCAwLHQpLE89bmV3IFpvKHZvaWQgMCx2b2lkIDAsdCksRT1uZXcgWm8odm9pZCAwLHZvaWQgMCx0KTtmb3IoO3MubGVuZ3RoPjA7KXtsZXQgQz1zLnBvcCgpLE09cy5wb3AoKSxOPXMucG9wKCksRj1hLmZyb21BcnJheShjLE4qMyxfdyksST1hLmZyb21BcnJheShjLE0qMyx5dyksdj1hLmZyb21BcnJheShjLEMqMyxndyksQixBLFM7aSYmKEI9Si5mcm9tQXJyYXkobCxOKjIsQXcpLEE9Si5mcm9tQXJyYXkobCxNKjIsYncpLFM9Si5mcm9tQXJyYXkobCxDKjIsVHcpKTtsZXQgeD10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKEYsX0kpLEQ9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhJLHlJKSx6PXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModixnSSk7VC5zZXRFbmRQb2ludHMoeCxEKTtsZXQgaj1ULnN1cmZhY2VEaXN0YW5jZTtPLnNldEVuZFBvaW50cyhELHopO2xldCBrPU8uc3VyZmFjZURpc3RhbmNlO0Uuc2V0RW5kUG9pbnRzKHoseCk7bGV0IHE9RS5zdXJmYWNlRGlzdGFuY2UsVz1NYXRoLm1heChqLGsscSksUixudCxjdCxsdCxfdDtXPmI/aj09PVc/KFI9YCR7TWF0aC5taW4oTixNKX0gJHtNYXRoLm1heChOLE0pfWAsZj1fW1JdLGgoZil8fChudD1ULmludGVycG9sYXRlVXNpbmdGcmFjdGlvbiguNSxGMCksY3Q9KHguaGVpZ2h0K0QuaGVpZ2h0KSouNSxsdD1hLmZyb21SYWRpYW5zKG50LmxvbmdpdHVkZSxudC5sYXRpdHVkZSxjdCx0LEJpKSxjLnB1c2gobHQueCxsdC55LGx0LnopLGY9Yy5sZW5ndGgvMy0xLF9bUl09ZixpJiYoX3Q9Si5hZGQoQixBLF9hKSxKLm11bHRpcGx5QnlTY2FsYXIoX3QsLjUsX3QpLGwucHVzaChfdC54LF90LnkpKSkscy5wdXNoKE4sZixDKSxzLnB1c2goZixNLEMpKTprPT09Vz8oUj1gJHtNYXRoLm1pbihNLEMpfSAke01hdGgubWF4KE0sQyl9YCxmPV9bUl0saChmKXx8KG50PU8uaW50ZXJwb2xhdGVVc2luZ0ZyYWN0aW9uKC41LEYwKSxjdD0oRC5oZWlnaHQrei5oZWlnaHQpKi41LGx0PWEuZnJvbVJhZGlhbnMobnQubG9uZ2l0dWRlLG50LmxhdGl0dWRlLGN0LHQsQmkpLGMucHVzaChsdC54LGx0LnksbHQueiksZj1jLmxlbmd0aC8zLTEsX1tSXT1mLGkmJihfdD1KLmFkZChBLFMsX2EpLEoubXVsdGlwbHlCeVNjYWxhcihfdCwuNSxfdCksbC5wdXNoKF90LngsX3QueSkpKSxzLnB1c2goTSxmLE4pLHMucHVzaChmLEMsTikpOnE9PT1XJiYoUj1gJHtNYXRoLm1pbihDLE4pfSAke01hdGgubWF4KEMsTil9YCxmPV9bUl0saChmKXx8KG50PUUuaW50ZXJwb2xhdGVVc2luZ0ZyYWN0aW9uKC41LEYwKSxjdD0oei5oZWlnaHQreC5oZWlnaHQpKi41LGx0PWEuZnJvbVJhZGlhbnMobnQubG9uZ2l0dWRlLG50LmxhdGl0dWRlLGN0LHQsQmkpLGMucHVzaChsdC54LGx0LnksbHQueiksZj1jLmxlbmd0aC8zLTEsX1tSXT1mLGkmJihfdD1KLmFkZChTLEIsX2EpLEoubXVsdGlwbHlCeVNjYWxhcihfdCwuNSxfdCksbC5wdXNoKF90LngsX3QueSkpKSxzLnB1c2goQyxmLE0pLHMucHVzaChmLE4sTSkpOihtLnB1c2goTiksbS5wdXNoKE0pLG0ucHVzaChDKSl9bGV0IHc9e2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfSxpbmRpY2VzOm0scHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVN9O3JldHVybiBpJiYody5hdHRyaWJ1dGVzLnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpsfSkpLG5ldyBCdCh3KX07bHMuc2NhbGVUb0dlb2RldGljSGVpZ2h0PWZ1bmN0aW9uKHQsZSxuLG8pe249bj8/WS5kZWZhdWx0O2xldCByPW1JLGk9aEk7aWYoZT1lPz8wLG89bz8/ITAsaCh0KSl7bGV0IHM9dC5sZW5ndGg7Zm9yKGxldCBmPTA7ZjxzO2YrPTMpYS5mcm9tQXJyYXkodCxmLGkpLG8mJihpPW4uc2NhbGVUb0dlb2RldGljU3VyZmFjZShpLGkpKSxlIT09MCYmKHI9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoaSxyKSxhLm11bHRpcGx5QnlTY2FsYXIocixlLHIpLGEuYWRkKGkscixpKSksdFtmXT1pLngsdFtmKzFdPWkueSx0W2YrMl09aS56fXJldHVybiB0fTtQZT1sc30pO2Z1bmN0aW9uIHBzKCl7dGhpcy5fYXJyYXk9W10sdGhpcy5fb2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPTB9dmFyIEwwLHd3PSQoKCk9PntPYmplY3QuZGVmaW5lUHJvcGVydGllcyhwcy5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xlbmd0aH19fSk7cHMucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24odCl7dGhpcy5fYXJyYXkucHVzaCh0KSx0aGlzLl9sZW5ndGgrK307cHMucHJvdG90eXBlLmRlcXVldWU9ZnVuY3Rpb24oKXtpZih0aGlzLl9sZW5ndGg9PT0wKXJldHVybjtsZXQgdD10aGlzLl9hcnJheSxlPXRoaXMuX29mZnNldCxuPXRbZV07cmV0dXJuIHRbZV09dm9pZCAwLGUrKyxlPjEwJiZlKjI+dC5sZW5ndGgmJih0aGlzLl9hcnJheT10LnNsaWNlKGUpLGU9MCksdGhpcy5fb2Zmc2V0PWUsdGhpcy5fbGVuZ3RoLS0sbn07cHMucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtpZih0aGlzLl9sZW5ndGghPT0wKXJldHVybiB0aGlzLl9hcnJheVt0aGlzLl9vZmZzZXRdfTtwcy5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FycmF5LmluZGV4T2YodCkhPT0tMX07cHMucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fYXJyYXkubGVuZ3RoPXRoaXMuX29mZnNldD10aGlzLl9sZW5ndGg9MH07cHMucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24odCl7dGhpcy5fb2Zmc2V0PjAmJih0aGlzLl9hcnJheT10aGlzLl9hcnJheS5zbGljZSh0aGlzLl9vZmZzZXQpLHRoaXMuX29mZnNldD0wKSx0aGlzLl9hcnJheS5zb3J0KHQpfTtMMD1wc30pO2Z1bmN0aW9uIFJ3KHQsZSxuLG8pe3JldHVybiBKLnN1YnRyYWN0KGUsdCxwYyksSi5tdWx0aXBseUJ5U2NhbGFyKHBjLG4vbyxwYyksSi5hZGQodCxwYyxwYyksW3BjLngscGMueV19ZnVuY3Rpb24gQUkodCxlLG4sbyl7cmV0dXJuIGEuc3VidHJhY3QoZSx0LGRzKSxhLm11bHRpcGx5QnlTY2FsYXIoZHMsbi9vLGRzKSxhLmFkZCh0LGRzLGRzKSxbZHMueCxkcy55LGRzLnpdfWZ1bmN0aW9uIENJKHQsZSxuKXtsZXQgbz1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHQsaWQpLHI9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLHNkKTtpZihNYXRoLnNpZ24oby5sYXRpdHVkZSk9PT1NYXRoLnNpZ24oci5sYXRpdHVkZSkpcmV0dXJuO3JkLnNldEVuZFBvaW50cyhvLHIpO2xldCBpPXJkLmZpbmRJbnRlcnNlY3Rpb25XaXRoTGF0aXR1ZGUoMCxTSSk7aWYoIWgoaSkpcmV0dXJuO2xldCBzPU1hdGgubWluKG8ubG9uZ2l0dWRlLHIubG9uZ2l0dWRlKSxmPU1hdGgubWF4KG8ubG9uZ2l0dWRlLHIubG9uZ2l0dWRlKTtpZihNYXRoLmFicyhmLXMpPlAuUEkpe2xldCB1PXM7cz1mLGY9dX1pZighKGkubG9uZ2l0dWRlPHN8fGkubG9uZ2l0dWRlPmYpKXJldHVybiBuLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGkpfWZ1bmN0aW9uIHhJKHQsZSxuLG8pe2lmKG89PT1oZS5SSFVNQilyZXR1cm4gQ0kodCxlLG4pO2xldCByPWhvLmxpbmVTZWdtZW50UGxhbmUodCxlLG9uLk9SSUdJTl9YWV9QTEFORSk7aWYoaChyKSlyZXR1cm4gbi5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHIscil9ZnVuY3Rpb24gTUkodCxlLG4pe2xldCBvPVtdLHIsaSxzLGYsdSxjPTA7Zm9yKDtjPHQubGVuZ3RoOyl7cj10W2NdLGk9dFsoYysxKSV0Lmxlbmd0aF0scz1QLnNpZ24oci56KSxmPVAuc2lnbihpLnopO2xldCBsPXA9PmUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocCxQSSkubG9uZ2l0dWRlO2lmKHM9PT0wKW8ucHVzaCh7cG9zaXRpb246Yyx0eXBlOnMsdmlzaXRlZDohMSxuZXh0OmYsdGhldGE6bChyKX0pO2Vsc2UgaWYoZiE9PTApe2lmKHU9eEkocixpLGUsbiksKytjLCFoKHUpKWNvbnRpbnVlO3Quc3BsaWNlKGMsMCx1KSxvLnB1c2goe3Bvc2l0aW9uOmMsdHlwZTpzLHZpc2l0ZWQ6ITEsbmV4dDpmLHRoZXRhOmwodSl9KX0rK2N9cmV0dXJuIG99ZnVuY3Rpb24gU3codCxlLG4sbyxyLGkscyl7bGV0IGY9W10sdT1pLGM9cD0+ZD0+ZC5wb3NpdGlvbj09PXAsbD1bXTtkb3tsZXQgcD1uW3VdO2YucHVzaChwKTtsZXQgZD1vLmZpbmRJbmRleChjKHUpKSxtPW9bZF07aWYoIWgobSkpeysrdTtjb250aW51ZX1sZXR7dmlzaXRlZDpfLHR5cGU6ZyxuZXh0OmJ9PW07aWYobS52aXNpdGVkPSEwLGc9PT0wKXtpZihiPT09MCl7bGV0IHc9b1tkLShzPzE6LTEpXTtpZih3Py5wb3NpdGlvbj09PXUrMSl3LnZpc2l0ZWQ9ITA7ZWxzZXsrK3U7Y29udGludWV9fWlmKCFfJiZzJiZiPjB8fGk9PT11JiYhcyYmYjwwKXsrK3U7Y29udGludWV9fWlmKCEocz9nPj0wOmc8PTApKXsrK3U7Y29udGludWV9X3x8bC5wdXNoKHUpO2xldCBPPWQrKHM/MTotMSksRT1vW09dO2lmKCFoKEUpKXsrK3U7Y29udGludWV9dT1FLnBvc2l0aW9ufXdoaWxlKHU8bi5sZW5ndGgmJnU+PTAmJnUhPT1pJiZmLmxlbmd0aDxuLmxlbmd0aCk7dC5zcGxpY2UoZSxyLGYpO2ZvcihsZXQgcCBvZiBsKWU9U3codCwrK2UsbixvLDAscCwhcyk7cmV0dXJuIGV9dmFyIE9uLHBjLGRzLGlkLHNkLGJJLFRJLHJkLHdJLE9JLEVJLFJJLFNJLFBJLE5JLElJLHZJLEZJLE93LEV3LExJLERJLF9lLExmPSQoKCk9PntmYygpO2pyKCk7VWUoKTtMdCgpO0llKCk7RGUoKTthdCgpOyR0KCk7TWYoKTtYZSgpO1llKCk7YW4oKTtzaSgpOyRlKCk7dGMoKTtLdCgpO0JuKCk7ZnMoKTtzdygpO3FyKCk7dG4oKTtLbygpO3d3KCk7bGMoKTtPbj17fTtPbi5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoPWZ1bmN0aW9uKHQsZSl7bGV0IG49MCxvPVt0XTtmb3IoO28ubGVuZ3RoPjA7KXtsZXQgcj1vLnBvcCgpO2lmKCFoKHIpKWNvbnRpbnVlO24rPTI7bGV0IGk9ci5wb3NpdGlvbnMscz1yLmhvbGVzO2lmKGgoaSkmJmkubGVuZ3RoPjAmJihuKz1pLmxlbmd0aCplLnBhY2tlZExlbmd0aCksaChzKSl7bGV0IGY9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxmOysrdSlvLnB1c2goc1t1XSl9fXJldHVybiBufTtPbi5wYWNrUG9seWdvbkhpZXJhcmNoeT1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1bdF07Zm9yKDtyLmxlbmd0aD4wOyl7bGV0IGk9ci5wb3AoKTtpZighaChpKSljb250aW51ZTtsZXQgcz1pLnBvc2l0aW9ucyxmPWkuaG9sZXM7aWYoZVtuKytdPWgocyk/cy5sZW5ndGg6MCxlW24rK109aChmKT9mLmxlbmd0aDowLGgocykpe2xldCB1PXMubGVuZ3RoO2ZvcihsZXQgYz0wO2M8dTsrK2Msbis9by5wYWNrZWRMZW5ndGgpby5wYWNrKHNbY10sZSxuKX1pZihoKGYpKXtsZXQgdT1mLmxlbmd0aDtmb3IobGV0IGM9MDtjPHU7KytjKXIucHVzaChmW2NdKX19cmV0dXJuIG59O09uLnVucGFja1BvbHlnb25IaWVyYXJjaHk9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXRbZSsrXSxyPXRbZSsrXSxpPW5ldyBBcnJheShvKSxzPXI+MD9uZXcgQXJyYXkocik6dm9pZCAwO2ZvcihsZXQgZj0wO2Y8bzsrK2YsZSs9bi5wYWNrZWRMZW5ndGgpaVtmXT1uLnVucGFjayh0LGUpO2ZvcihsZXQgZj0wO2Y8cjsrK2Ypc1tmXT1Pbi51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxuKSxlPXNbZl0uc3RhcnRpbmdJbmRleCxkZWxldGUgc1tmXS5zdGFydGluZ0luZGV4O3JldHVybntwb3NpdGlvbnM6aSxob2xlczpzLHN0YXJ0aW5nSW5kZXg6ZX19O3BjPW5ldyBKO2RzPW5ldyBhO09uLnN1YmRpdmlkZUxpbmVDb3VudD1mdW5jdGlvbih0LGUsbil7bGV0IHI9YS5kaXN0YW5jZSh0LGUpL24saT1NYXRoLm1heCgwLE1hdGguY2VpbChQLmxvZzIocikpKTtyZXR1cm4gTWF0aC5wb3coMixpKX07aWQ9bmV3IHN0LHNkPW5ldyBzdCxiST1uZXcgc3QsVEk9bmV3IGEscmQ9bmV3IFpvO09uLnN1YmRpdmlkZVJodW1iTGluZUNvdW50PWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZSxpZCksaT10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG4sc2QpLGY9bmV3IFpvKHIsaSx0KS5zdXJmYWNlRGlzdGFuY2Uvbyx1PU1hdGgubWF4KDAsTWF0aC5jZWlsKFAubG9nMihmKSkpO3JldHVybiBNYXRoLnBvdygyLHUpfTtPbi5zdWJkaXZpZGVUZXhjb29yZExpbmU9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzPU9uLnN1YmRpdmlkZUxpbmVDb3VudChuLG8sciksZj1KLmRpc3RhbmNlKHQsZSksdT1mL3MsYz1pO2MubGVuZ3RoPXMqMjtsZXQgbD0wO2ZvcihsZXQgcD0wO3A8cztwKyspe2xldCBkPVJ3KHQsZSxwKnUsZik7Y1tsKytdPWRbMF0sY1tsKytdPWRbMV19cmV0dXJuIGN9O09uLnN1YmRpdmlkZUxpbmU9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9T24uc3ViZGl2aWRlTGluZUNvdW50KHQsZSxuKSxpPWEuZGlzdGFuY2UodCxlKSxzPWkvcjtoKG8pfHwobz1bXSk7bGV0IGY9bztmLmxlbmd0aD1yKjM7bGV0IHU9MDtmb3IobGV0IGM9MDtjPHI7YysrKXtsZXQgbD1BSSh0LGUsYypzLGkpO2ZbdSsrXT1sWzBdLGZbdSsrXT1sWzFdLGZbdSsrXT1sWzJdfXJldHVybiBmfTtPbi5zdWJkaXZpZGVUZXhjb29yZFJodW1iTGluZT1mdW5jdGlvbih0LGUsbixvLHIsaSxzKXtsZXQgZj1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG8saWQpLHU9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhyLHNkKTtyZC5zZXRFbmRQb2ludHMoZix1KTtsZXQgYz1yZC5zdXJmYWNlRGlzdGFuY2UvaSxsPU1hdGgubWF4KDAsTWF0aC5jZWlsKFAubG9nMihjKSkpLHA9TWF0aC5wb3coMixsKSxkPUouZGlzdGFuY2UodCxlKSxtPWQvcCxfPXM7Xy5sZW5ndGg9cCoyO2xldCBnPTA7Zm9yKGxldCBiPTA7YjxwO2IrKyl7bGV0IFQ9UncodCxlLGIqbSxkKTtfW2crK109VFswXSxfW2crK109VFsxXX1yZXR1cm4gX307T24uc3ViZGl2aWRlUmh1bWJMaW5lPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLGlkKSxzPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobixzZCksZj1uZXcgWm8oaSxzLHQpO2lmKGgocil8fChyPVtdKSxmLnN1cmZhY2VEaXN0YW5jZTw9bylyZXR1cm4gci5sZW5ndGg9MyxyWzBdPWUueCxyWzFdPWUueSxyWzJdPWUueixyO2xldCB1PWYuc3VyZmFjZURpc3RhbmNlL28sYz1NYXRoLm1heCgwLE1hdGguY2VpbChQLmxvZzIodSkpKSxsPU1hdGgucG93KDIsYykscD1mLnN1cmZhY2VEaXN0YW5jZS9sLGQ9cjtkLmxlbmd0aD1sKjM7bGV0IG09MDtmb3IobGV0IF89MDtfPGw7XysrKXtsZXQgZz1mLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoXypwLGJJKSxiPXQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZyxUSSk7ZFttKytdPWIueCxkW20rK109Yi55LGRbbSsrXT1iLnp9cmV0dXJuIGR9O3dJPW5ldyBhLE9JPW5ldyBhLEVJPW5ldyBhLFJJPW5ldyBhO09uLnNjYWxlVG9HZW9kZXRpY0hlaWdodEV4dHJ1ZGVkPWZ1bmN0aW9uKHQsZSxuLG8scil7bz1vPz9ZLmRlZmF1bHQ7bGV0IGk9d0kscz1PSSxmPUVJLHU9Ukk7aWYoaCh0KSYmaCh0LmF0dHJpYnV0ZXMpJiZoKHQuYXR0cmlidXRlcy5wb3NpdGlvbikpe2xldCBjPXQuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsbD1jLmxlbmd0aC8yO2ZvcihsZXQgcD0wO3A8bDtwKz0zKWEuZnJvbUFycmF5KGMscCxmKSxvLmdlb2RldGljU3VyZmFjZU5vcm1hbChmLGkpLHU9by5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGYsdSkscz1hLm11bHRpcGx5QnlTY2FsYXIoaSxuLHMpLHM9YS5hZGQodSxzLHMpLGNbcCtsXT1zLngsY1twKzErbF09cy55LGNbcCsyK2xdPXMueixyJiYodT1hLmNsb25lKGYsdSkpLHM9YS5tdWx0aXBseUJ5U2NhbGFyKGksZSxzKSxzPWEuYWRkKHUscyxzKSxjW3BdPXMueCxjW3ArMV09cy55LGNbcCsyXT1zLnp9cmV0dXJuIHR9O09uLnBvbHlnb25PdXRsaW5lc0Zyb21IaWVyYXJjaHk9ZnVuY3Rpb24odCxlLG4pe2xldCBvPVtdLHI9bmV3IEwwO3IuZW5xdWV1ZSh0KTtsZXQgaSxzLGY7Zm9yKDtyLmxlbmd0aCE9PTA7KXtsZXQgdT1yLmRlcXVldWUoKSxjPXUucG9zaXRpb25zO2lmKGUpZm9yKGY9Yy5sZW5ndGgsaT0wO2k8ZjtpKyspbi5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGNbaV0sY1tpXSk7aWYoYz14bihjLGEuZXF1YWxzRXBzaWxvbiwhMCksYy5sZW5ndGg8Myljb250aW51ZTtsZXQgbD11LmhvbGVzP3UuaG9sZXMubGVuZ3RoOjA7Zm9yKGk9MDtpPGw7aSsrKXtsZXQgcD11LmhvbGVzW2ldLGQ9cC5wb3NpdGlvbnM7aWYoZSlmb3IoZj1kLmxlbmd0aCxzPTA7czxmOysrcyluLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZFtzXSxkW3NdKTtpZihkPXhuKGQsYS5lcXVhbHNFcHNpbG9uLCEwKSxkLmxlbmd0aDwzKWNvbnRpbnVlO28ucHVzaChkKTtsZXQgbT0wO2ZvcihoKHAuaG9sZXMpJiYobT1wLmhvbGVzLmxlbmd0aCkscz0wO3M8bTtzKyspci5lbnF1ZXVlKHAuaG9sZXNbc10pfW8ucHVzaChjKX1yZXR1cm4gb307U0k9bmV3IHN0O1BJPW5ldyBzdDtPbi5zcGxpdFBvbHlnb25zT25FcXVhdG9yPWZ1bmN0aW9uKHQsZSxuLG8pe2gobyl8fChvPVtdKSxvLnNwbGljZSgwLDAsLi4udCksby5sZW5ndGg9dC5sZW5ndGg7bGV0IHI9MDtmb3IoO3I8by5sZW5ndGg7KXtsZXQgaT1vW3JdLHM9aS5zbGljZSgpO2lmKGkubGVuZ3RoPDMpe29bcl09cywrK3I7Y29udGludWV9bGV0IGY9TUkocyxlLG4pO2lmKHMubGVuZ3RoPT09aS5sZW5ndGh8fGYubGVuZ3RoPD0xKXtvW3JdPXMsKytyO2NvbnRpbnVlfWYuc29ydCgoYyxsKT0+Yy50aGV0YS1sLnRoZXRhKTtsZXQgdT1zWzBdLno+PTA7cj1TdyhvLHIscyxmLDEsMCx1KX1yZXR1cm4gb307T24ucG9seWdvbnNGcm9tSGllcmFyY2h5PWZ1bmN0aW9uKHQsZSxuLG8scixpKXtsZXQgcz1bXSxmPVtdLHU9bmV3IEwwO3UuZW5xdWV1ZSh0KTtsZXQgYz1oKGkpO2Zvcig7dS5sZW5ndGghPT0wOyl7bGV0IGw9dS5kZXF1ZXVlKCkscD1sLnBvc2l0aW9ucyxkPWwuaG9sZXMsbSxfO2lmKG8pZm9yKF89cC5sZW5ndGgsbT0wO208XzttKyspci5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHBbbV0scFttXSk7aWYoZXx8KHA9eG4ocCxhLmVxdWFsc0Vwc2lsb24sITApKSxwLmxlbmd0aDwzKWNvbnRpbnVlO2xldCBnPW4ocCk7aWYoIWgoZykpY29udGludWU7bGV0IGI9W10sVD1QZS5jb21wdXRlV2luZGluZ09yZGVyMkQoZyk7aWYoVD09PUNvLkNMT0NLV0lTRSYmKGcucmV2ZXJzZSgpLHA9cC5zbGljZSgpLnJldmVyc2UoKSksYyl7Yz0hMTtsZXQgTT1bcF07aWYoTT1pKE0sTSksTS5sZW5ndGg+MSl7Zm9yKGxldCBOIG9mIE0pdS5lbnF1ZXVlKG5ldyBpdyhOLGQpKTtjb250aW51ZX19bGV0IE89cC5zbGljZSgpLEU9aChkKT9kLmxlbmd0aDowLHc9W10sQztmb3IobT0wO208RTttKyspe2xldCBNPWRbbV0sTj1NLnBvc2l0aW9ucztpZihvKWZvcihfPU4ubGVuZ3RoLEM9MDtDPF87KytDKXIuc2NhbGVUb0dlb2RldGljU3VyZmFjZShOW0NdLE5bQ10pO2lmKGV8fChOPXhuKE4sYS5lcXVhbHNFcHNpbG9uLCEwKSksTi5sZW5ndGg8Myljb250aW51ZTtsZXQgRj1uKE4pO2lmKCFoKEYpKWNvbnRpbnVlO1Q9UGUuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKEYpLFQ9PT1Dby5DTE9DS1dJU0UmJihGLnJldmVyc2UoKSxOPU4uc2xpY2UoKS5yZXZlcnNlKCkpLHcucHVzaChOKSxiLnB1c2goTy5sZW5ndGgpLE89Ty5jb25jYXQoTiksZz1nLmNvbmNhdChGKTtsZXQgST0wO2ZvcihoKE0uaG9sZXMpJiYoST1NLmhvbGVzLmxlbmd0aCksQz0wO0M8STtDKyspdS5lbnF1ZXVlKE0uaG9sZXNbQ10pfXMucHVzaCh7b3V0ZXJSaW5nOnAsaG9sZXM6d30pLGYucHVzaCh7cG9zaXRpb25zOk8scG9zaXRpb25zMkQ6Zyxob2xlczpifSl9cmV0dXJue2hpZXJhcmNoeTpzLHBvbHlnb25zOmZ9fTtOST1uZXcgSixJST1uZXcgYSx2ST1uZXcgdGUsRkk9bmV3IFo7T24uY29tcHV0ZUJvdW5kaW5nUmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9dGUuZnJvbUF4aXNBbmdsZSh0LG8sdkkpLHM9Wi5mcm9tUXVhdGVybmlvbihpLEZJKSxmPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx1PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxjPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxsPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxwPW4ubGVuZ3RoO2ZvcihsZXQgZD0wO2Q8cDsrK2Qpe2xldCBtPWEuY2xvbmUobltkXSxJSSk7Wi5tdWx0aXBseUJ5VmVjdG9yKHMsbSxtKTtsZXQgXz1lKG0sTkkpO2goXykmJihmPU1hdGgubWluKGYsXy54KSx1PU1hdGgubWF4KHUsXy54KSxjPU1hdGgubWluKGMsXy55KSxsPU1hdGgubWF4KGwsXy55KSl9cmV0dXJuIHIueD1mLHIueT1jLHIud2lkdGg9dS1mLHIuaGVpZ2h0PWwtYyxyfTtPbi5jcmVhdGVHZW9tZXRyeUZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7bGV0IGY9UGUudHJpYW5ndWxhdGUoZS5wb3NpdGlvbnMyRCxlLmhvbGVzKTtmLmxlbmd0aDwzJiYoZj1bMCwxLDJdKTtsZXQgdT1lLnBvc2l0aW9ucyxjPWgobiksbD1jP24ucG9zaXRpb25zOnZvaWQgMDtpZihyKXtsZXQgcD11Lmxlbmd0aCxkPW5ldyBBcnJheShwKjMpLG09MDtmb3IobGV0IGI9MDtiPHA7YisrKXtsZXQgVD11W2JdO2RbbSsrXT1ULngsZFttKytdPVQueSxkW20rK109VC56fWxldCBfPXthdHRyaWJ1dGVzOntwb3NpdGlvbjpuZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmR9KX0saW5kaWNlczpmLHByaW1pdGl2ZVR5cGU6RHQuVFJJQU5HTEVTfTtjJiYoXy5hdHRyaWJ1dGVzLnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpKLnBhY2tBcnJheShsKX0pKTtsZXQgZz1uZXcgQnQoXyk7cmV0dXJuIGkubm9ybWFsP2tlLmNvbXB1dGVOb3JtYWwoZyk6Z31pZihzPT09aGUuR0VPREVTSUMpcmV0dXJuIFBlLmNvbXB1dGVTdWJkaXZpc2lvbih0LHUsZixsLG8pO2lmKHM9PT1oZS5SSFVNQilyZXR1cm4gUGUuY29tcHV0ZVJodW1iTGluZVN1YmRpdmlzaW9uKHQsdSxmLGwsbyl9O093PVtdLEV3PVtdLExJPW5ldyBhLERJPW5ldyBhO09uLmNvbXB1dGVXYWxsR2VvbWV0cnk9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzLGYsdSxjLGwscCxkLG0sXyxnPXQubGVuZ3RoLGI9MCxUPTAsTz1oKGUpLEU9Tz9lLnBvc2l0aW9uczp2b2lkIDA7aWYocilmb3IoZj1nKjMqMixzPW5ldyBBcnJheShmKjIpLE8mJihfPWcqMioyLG09bmV3IEFycmF5KF8qMikpLHU9MDt1PGc7dSsrKWM9dFt1XSxsPXRbKHUrMSklZ10sc1tiXT1zW2IrZl09Yy54LCsrYixzW2JdPXNbYitmXT1jLnksKytiLHNbYl09c1tiK2ZdPWMueiwrK2Isc1tiXT1zW2IrZl09bC54LCsrYixzW2JdPXNbYitmXT1sLnksKytiLHNbYl09c1tiK2ZdPWwueiwrK2IsTyYmKHA9RVt1XSxkPUVbKHUrMSklZ10sbVtUXT1tW1QrX109cC54LCsrVCxtW1RdPW1bVCtfXT1wLnksKytULG1bVF09bVtUK19dPWQueCwrK1QsbVtUXT1tW1QrX109ZC55LCsrVCk7ZWxzZXtsZXQgRj1QLmNob3JkTGVuZ3RoKG8sbi5tYXhpbXVtUmFkaXVzKSxJPTA7aWYoaT09PWhlLkdFT0RFU0lDKWZvcih1PTA7dTxnO3UrKylJKz1Pbi5zdWJkaXZpZGVMaW5lQ291bnQodFt1XSx0Wyh1KzEpJWddLEYpO2Vsc2UgaWYoaT09PWhlLlJIVU1CKWZvcih1PTA7dTxnO3UrKylJKz1Pbi5zdWJkaXZpZGVSaHVtYkxpbmVDb3VudChuLHRbdV0sdFsodSsxKSVnXSxGKTtmb3IoZj0oSStnKSozLHM9bmV3IEFycmF5KGYqMiksTyYmKF89KEkrZykqMixtPW5ldyBBcnJheShfKjIpKSx1PTA7dTxnO3UrKyl7Yz10W3VdLGw9dFsodSsxKSVnXTtsZXQgdixCO08mJihwPUVbdV0sZD1FWyh1KzEpJWddKSxpPT09aGUuR0VPREVTSUM/KHY9T24uc3ViZGl2aWRlTGluZShjLGwsRixFdyksTyYmKEI9T24uc3ViZGl2aWRlVGV4Y29vcmRMaW5lKHAsZCxjLGwsRixPdykpKTppPT09aGUuUkhVTUImJih2PU9uLnN1YmRpdmlkZVJodW1iTGluZShuLGMsbCxGLEV3KSxPJiYoQj1Pbi5zdWJkaXZpZGVUZXhjb29yZFJodW1iTGluZShwLGQsbixjLGwsRixPdykpKTtsZXQgQT12Lmxlbmd0aDtmb3IobGV0IFM9MDtTPEE7KytTLCsrYilzW2JdPXZbU10sc1tiK2ZdPXZbU107aWYoc1tiXT1sLngsc1tiK2ZdPWwueCwrK2Isc1tiXT1sLnksc1tiK2ZdPWwueSwrK2Isc1tiXT1sLnosc1tiK2ZdPWwueiwrK2IsTyl7bGV0IFM9Qi5sZW5ndGg7Zm9yKGxldCB4PTA7eDxTOysreCwrK1QpbVtUXT1CW3hdLG1bVCtfXT1CW3hdO21bVF09ZC54LG1bVCtfXT1kLngsKytULG1bVF09ZC55LG1bVCtfXT1kLnksKytUfX19Zz1zLmxlbmd0aDtsZXQgdz1GdC5jcmVhdGVUeXBlZEFycmF5KGcvMyxnLXQubGVuZ3RoKjYpLEM9MDtmb3IoZy89Nix1PTA7dTxnO3UrKyl7bGV0IEY9dSxJPUYrMSx2PUYrZyxCPXYrMTtjPWEuZnJvbUFycmF5KHMsRiozLExJKSxsPWEuZnJvbUFycmF5KHMsSSozLERJKSwhYS5lcXVhbHNFcHNpbG9uKGMsbCxQLkVQU0lMT04xMCxQLkVQU0lMT04xMCkmJih3W0MrK109Rix3W0MrK109dix3W0MrK109SSx3W0MrK109SSx3W0MrK109dix3W0MrK109Qil9bGV0IE09e2F0dHJpYnV0ZXM6bmV3IHJlKHtwb3NpdGlvbjpuZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnN9KX0pLGluZGljZXM6dyxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFU307cmV0dXJuIE8mJihNLmF0dHJpYnV0ZXMuc3Q9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOm19KSksbmV3IEJ0KE0pfTtfZT1Pbn0pO2Z1bmN0aW9uIFlJKHQsZSxuLG8scixpLHMsZix1KXtsZXQgYz10LnBvc2l0aW9ucyxsPVBlLnRyaWFuZ3VsYXRlKHQucG9zaXRpb25zMkQsdC5ob2xlcyk7bC5sZW5ndGg8MyYmKGw9WzAsMSwyXSk7bGV0IHA9RnQuY3JlYXRlVHlwZWRBcnJheShjLmxlbmd0aCxsLmxlbmd0aCk7cC5zZXQobCk7bGV0IGQ9S0k7aWYobyE9PTApe2xldCBCPXRlLmZyb21BeGlzQW5nbGUocyxvLEN3KTtpZihkPVouZnJvbVF1YXRlcm5pb24oQixkKSxlLnRhbmdlbnR8fGUuYml0YW5nZW50KXtCPXRlLmZyb21BeGlzQW5nbGUocywtbyxDdyk7bGV0IEE9Wi5mcm9tUXVhdGVybmlvbihCLFdJKTtmPWEubm9ybWFsaXplKFoubXVsdGlwbHlCeVZlY3RvcihBLGYsZiksZiksZS5iaXRhbmdlbnQmJih1PWEubm9ybWFsaXplKGEuY3Jvc3MocyxmLHUpLHUpKX19ZWxzZSBkPVouY2xvbmUoWi5JREVOVElUWSxkKTtsZXQgbT1HSTtlLnN0JiYobS54PW4ueCxtLnk9bi55KTtsZXQgXz1jLmxlbmd0aCxnPV8qMyxiPW5ldyBGbG9hdDY0QXJyYXkoZyksVD1lLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KGcpOnZvaWQgMCxPPWUudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGcpOnZvaWQgMCxFPWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoZyk6dm9pZCAwLHc9ZS5zdD9uZXcgRmxvYXQzMkFycmF5KF8qMik6dm9pZCAwLEM9MCxNPTAsTj0wLEY9MCxJPTA7Zm9yKGxldCBCPTA7QjxfO0IrKyl7bGV0IEE9Y1tCXTtpZihiW0MrK109QS54LGJbQysrXT1BLnksYltDKytdPUEueixlLnN0KWlmKGgocikmJnIucG9zaXRpb25zLmxlbmd0aD09PV8pd1tJKytdPXIucG9zaXRpb25zW0JdLngsd1tJKytdPXIucG9zaXRpb25zW0JdLnk7ZWxzZXtsZXQgUz1aLm11bHRpcGx5QnlWZWN0b3IoZCxBLEJJKSx4PWkoUyxrSSk7Si5zdWJ0cmFjdCh4LG0seCk7bGV0IEQ9UC5jbGFtcCh4Lngvbi53aWR0aCwwLDEpLHo9UC5jbGFtcCh4Lnkvbi5oZWlnaHQsMCwxKTt3W0krK109RCx3W0krK109en1lLm5vcm1hbCYmKFRbTSsrXT1zLngsVFtNKytdPXMueSxUW00rK109cy56KSxlLnRhbmdlbnQmJihPW0YrK109Zi54LE9bRisrXT1mLnksT1tGKytdPWYueiksZS5iaXRhbmdlbnQmJihFW04rK109dS54LEVbTisrXT11LnksRVtOKytdPXUueil9bGV0IHY9bmV3IHJlO3JldHVybiBlLnBvc2l0aW9uJiYodi5wb3NpdGlvbj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmJ9KSksZS5ub3JtYWwmJih2Lm5vcm1hbD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6VH0pKSxlLnRhbmdlbnQmJih2LnRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk99KSksZS5iaXRhbmdlbnQmJih2LmJpdGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6RX0pKSxlLnN0JiYodi5zdD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6d30pKSxuZXcgQnQoe2F0dHJpYnV0ZXM6dixpbmRpY2VzOnAscHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVN9KX1mdW5jdGlvbiBkYyh0KXt0PXQ/P050LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvbHlnb25IaWVyYXJjaHksbj10LnRleHR1cmVDb29yZGluYXRlczt5LmRlZmluZWQoIm9wdGlvbnMucG9seWdvbkhpZXJhcmNoeSIsZSk7bGV0IG89dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQ7dGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKG8pLHRoaXMuX3BvbHlnb25IaWVyYXJjaHk9ZSx0aGlzLl9zdFJvdGF0aW9uPXQuc3RSb3RhdGlvbj8/MCx0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZSh0LmVsbGlwc29pZD8/WS5kZWZhdWx0KSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3BsYW5hclBvbHlnb25HZW9tZXRyeSIsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVzPW4sdGhpcy5wYWNrZWRMZW5ndGg9X2UuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aChlLGEpK3B0LnBhY2tlZExlbmd0aCtZLnBhY2tlZExlbmd0aCsoaChuKT9fZS5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKG4sSik6MSkrMn12YXIgQkksVUksa0ksR0ksVkksekksakksRGYsSEkscUksQ3csS0ksV0ksWEksJEksWkksUUksRDAseHc9JCgoKT0+e2pyKCk7Q2YoKTt2ZSgpO1VlKCk7THQoKTtXdCgpO0RlKCk7eDAoKTt5ZSgpO2F0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTtzYygpO3NpKCk7JGUoKTtLdCgpO0JuKCk7TGYoKTtxcigpO3RuKCk7S28oKTtSbygpO0JJPW5ldyBhLFVJPW5ldyBIcixrST1uZXcgSixHST1uZXcgSixWST1uZXcgYSx6ST1uZXcgYSxqST1uZXcgYSxEZj1uZXcgYSxIST1uZXcgYSxxST1uZXcgYSxDdz1uZXcgdGUsS0k9bmV3IFosV0k9bmV3IFosWEk9bmV3IGE7ZGMuZnJvbVBvc2l0aW9ucz1mdW5jdGlvbih0KXt0PXQ/P050LkVNUFRZX09CSkVDVCx5LmRlZmluZWQoIm9wdGlvbnMucG9zaXRpb25zIix0LnBvc2l0aW9ucyk7bGV0IGU9e3BvbHlnb25IaWVyYXJjaHk6e3Bvc2l0aW9uczp0LnBvc2l0aW9uc30sdmVydGV4Rm9ybWF0OnQudmVydGV4Rm9ybWF0LHN0Um90YXRpb246dC5zdFJvdGF0aW9uLGVsbGlwc29pZDp0LmVsbGlwc29pZCx0ZXh0dXJlQ29vcmRpbmF0ZXM6dC50ZXh0dXJlQ29vcmRpbmF0ZXN9O3JldHVybiBuZXcgZGMoZSl9O2RjLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsbj1fZS5wYWNrUG9seWdvbkhpZXJhcmNoeSh0Ll9wb2x5Z29uSGllcmFyY2h5LGUsbixhKSxZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX3N0Um90YXRpb24saCh0Ll90ZXh0dXJlQ29vcmRpbmF0ZXMpP249X2UucGFja1BvbHlnb25IaWVyYXJjaHkodC5fdGV4dHVyZUNvb3JkaW5hdGVzLGUsbixKKTplW24rK109LTEsZVtuKytdPXQucGFja2VkTGVuZ3RoLGV9OyRJPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksWkk9bmV3IHB0LFFJPXtwb2x5Z29uSGllcmFyY2h5Ont9fTtkYy51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1fZS51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxhKTtlPW8uc3RhcnRpbmdJbmRleCxkZWxldGUgby5zdGFydGluZ0luZGV4O2xldCByPVkudW5wYWNrKHQsZSwkSSk7ZSs9WS5wYWNrZWRMZW5ndGg7bGV0IGk9cHQudW5wYWNrKHQsZSxaSSk7ZSs9cHQucGFja2VkTGVuZ3RoO2xldCBzPXRbZSsrXSxmPXRbZV09PT0tMT92b2lkIDA6X2UudW5wYWNrUG9seWdvbkhpZXJhcmNoeSh0LGUsSik7aChmKT8oZT1mLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIGYuc3RhcnRpbmdJbmRleCk6ZSsrO2xldCB1PXRbZSsrXTtyZXR1cm4gaChuKXx8KG49bmV3IGRjKFFJKSksbi5fcG9seWdvbkhpZXJhcmNoeT1vLG4uX2VsbGlwc29pZD1ZLmNsb25lKHIsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX3N0Um90YXRpb249cyxuLl90ZXh0dXJlQ29vcmRpbmF0ZXM9ZixuLnBhY2tlZExlbmd0aD11LG59O2RjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3ZlcnRleEZvcm1hdCxuPXQuX3BvbHlnb25IaWVyYXJjaHksbz10Ll9zdFJvdGF0aW9uLHI9dC5fdGV4dHVyZUNvb3JkaW5hdGVzLGk9aChyKSxzPW4ucG9zaXRpb25zO2lmKHM9eG4ocyxhLmVxdWFsc0Vwc2lsb24sITApLHMubGVuZ3RoPDMpcmV0dXJuO2xldCBmPVZJLHU9ekksYz1qSSxsPUhJLHA9cUk7aWYoIWRhLmNvbXB1dGVQcm9qZWN0VG8yREFyZ3VtZW50cyhzLERmLGwscCkpcmV0dXJuO2lmKGY9YS5jcm9zcyhsLHAsZiksZj1hLm5vcm1hbGl6ZShmLGYpLCFhLmVxdWFsc0Vwc2lsb24oRGYsYS5aRVJPLFAuRVBTSUxPTjYpKXtsZXQgST10Ll9lbGxpcHNvaWQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKERmLFhJKTthLmRvdChmLEkpPDAmJihmPWEubmVnYXRlKGYsZiksbD1hLm5lZ2F0ZShsLGwpKX1sZXQgbT1kYS5jcmVhdGVQcm9qZWN0UG9pbnRzVG8yREZ1bmN0aW9uKERmLGwscCksXz1kYS5jcmVhdGVQcm9qZWN0UG9pbnRUbzJERnVuY3Rpb24oRGYsbCxwKTtlLnRhbmdlbnQmJih1PWEuY2xvbmUobCx1KSksZS5iaXRhbmdlbnQmJihjPWEuY2xvbmUocCxjKSk7bGV0IGc9X2UucG9seWdvbnNGcm9tSGllcmFyY2h5KG4saSxtLCExKSxiPWcuaGllcmFyY2h5LFQ9Zy5wb2x5Z29ucyxPPWZ1bmN0aW9uKEkpe3JldHVybiBJfSxFPWk/X2UucG9seWdvbnNGcm9tSGllcmFyY2h5KHIsITAsTywhMSkucG9seWdvbnM6dm9pZCAwO2lmKGIubGVuZ3RoPT09MClyZXR1cm47cz1iWzBdLm91dGVyUmluZztsZXQgdz1ndC5mcm9tUG9pbnRzKHMpLEM9X2UuY29tcHV0ZUJvdW5kaW5nUmVjdGFuZ2xlKGYsXyxzLG8sVUkpLE09W107Zm9yKGxldCBJPTA7STxULmxlbmd0aDtJKyspe2xldCB2PW5ldyBjbyh7Z2VvbWV0cnk6WUkoVFtJXSxlLEMsbyxpP0VbSV06dm9pZCAwLF8sZix1LGMpfSk7TS5wdXNoKHYpfWxldCBOPWtlLmNvbWJpbmVJbnN0YW5jZXMoTSlbMF07Ti5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1uZXcgRmxvYXQ2NEFycmF5KE4uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMpLE4uaW5kaWNlcz1GdC5jcmVhdGVUeXBlZEFycmF5KE4uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzMsTi5pbmRpY2VzKTtsZXQgRj1OLmF0dHJpYnV0ZXM7cmV0dXJuIGUucG9zaXRpb258fGRlbGV0ZSBGLnBvc2l0aW9uLG5ldyBCdCh7YXR0cmlidXRlczpGLGluZGljZXM6Ti5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6Ti5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOnd9KX07RDA9ZGN9KTt2YXIgQjA9e307cGUoQjAse2RlZmF1bHQ6KCk9PnR2fSk7ZnVuY3Rpb24gSkkodCxlKXtyZXR1cm4gaChlKSYmKHQ9RDAudW5wYWNrKHQsZSkpLEQwLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciB0dixVMD0kKCgpPT57eHcoKTthdCgpO3R2PUpJfSk7ZnVuY3Rpb24gZXYodCl7bGV0IGU9dC5sZW5ndGgsbj1uZXcgRmxvYXQ2NEFycmF5KGUqMyksbz1GdC5jcmVhdGVUeXBlZEFycmF5KGUsZSoyKSxyPTAsaT0wO2ZvcihsZXQgZj0wO2Y8ZTtmKyspe2xldCB1PXRbZl07bltyKytdPXUueCxuW3IrK109dS55LG5bcisrXT11Lnosb1tpKytdPWYsb1tpKytdPShmKzEpJWV9bGV0IHM9bmV3IHJlKHtwb3NpdGlvbjpuZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm59KX0pO3JldHVybiBuZXcgQnQoe2F0dHJpYnV0ZXM6cyxpbmRpY2VzOm8scHJpbWl0aXZlVHlwZTpEdC5MSU5FU30pfWZ1bmN0aW9uIG1jKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9seWdvbkhpZXJhcmNoeTt5LmRlZmluZWQoIm9wdGlvbnMucG9seWdvbkhpZXJhcmNoeSIsZSksdGhpcy5fcG9seWdvbkhpZXJhcmNoeT1lLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNvcGxhbmFyUG9seWdvbk91dGxpbmVHZW9tZXRyeSIsdGhpcy5wYWNrZWRMZW5ndGg9X2UuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aChlLGEpKzF9dmFyIG52LGswLFB3PSQoKCk9PntqcigpO3ZlKCk7THQoKTtXdCgpO0RlKCk7eDAoKTt5ZSgpO2F0KCk7WGUoKTtZZSgpO2FuKCk7c2MoKTtzaSgpOyRlKCk7TGYoKTt0bigpO21jLmZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24odCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1QseS5kZWZpbmVkKCJvcHRpb25zLnBvc2l0aW9ucyIsdC5wb3NpdGlvbnMpO2xldCBlPXtwb2x5Z29uSGllcmFyY2h5Ontwb3NpdGlvbnM6dC5wb3NpdGlvbnN9fTtyZXR1cm4gbmV3IG1jKGUpfTttYy5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLG49X2UucGFja1BvbHlnb25IaWVyYXJjaHkodC5fcG9seWdvbkhpZXJhcmNoeSxlLG4sYSksZVtuXT10LnBhY2tlZExlbmd0aCxlfTtudj17cG9seWdvbkhpZXJhcmNoeTp7fX07bWMudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89X2UudW5wYWNrUG9seWdvbkhpZXJhcmNoeSh0LGUsYSk7ZT1vLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIG8uc3RhcnRpbmdJbmRleDtsZXQgcj10W2VdO3JldHVybiBoKG4pfHwobj1uZXcgbWMobnYpKSxuLl9wb2x5Z29uSGllcmFyY2h5PW8sbi5wYWNrZWRMZW5ndGg9cixufTttYy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9wb2x5Z29uSGllcmFyY2h5LG49ZS5wb3NpdGlvbnM7aWYobj14bihuLGEuZXF1YWxzRXBzaWxvbiwhMCksbi5sZW5ndGg8M3x8IWRhLnZhbGlkT3V0bGluZShuKSlyZXR1cm47bGV0IHI9X2UucG9seWdvbk91dGxpbmVzRnJvbUhpZXJhcmNoeShlLCExKTtpZihyLmxlbmd0aD09PTApcmV0dXJuO2xldCBpPVtdO2ZvcihsZXQgdT0wO3U8ci5sZW5ndGg7dSsrKXtsZXQgYz1uZXcgY28oe2dlb21ldHJ5OmV2KHJbdV0pfSk7aS5wdXNoKGMpfWxldCBzPWtlLmNvbWJpbmVJbnN0YW5jZXMoaSlbMF0sZj1ndC5mcm9tUG9pbnRzKGUucG9zaXRpb25zKTtyZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOnMuYXR0cmlidXRlcyxpbmRpY2VzOnMuaW5kaWNlcyxwcmltaXRpdmVUeXBlOnMucHJpbWl0aXZlVHlwZSxib3VuZGluZ1NwaGVyZTpmfSl9O2swPW1jfSk7dmFyIEcwPXt9O3BlKEcwLHtkZWZhdWx0OigpPT5ydn0pO2Z1bmN0aW9uIG92KHQsZSl7cmV0dXJuIGgoZSkmJih0PWswLnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLGswLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBydixWMD0kKCgpPT57UHcoKTthdCgpOyR0KCk7cnY9b3Z9KTt2YXIgaXYsZm4saGM9JCgoKT0+e2l2PXtST1VOREVEOjAsTUlURVJFRDoxLEJFVkVMRUQ6Mn0sZm49T2JqZWN0LmZyZWV6ZShpdil9KTtmdW5jdGlvbiBzdih0KXtsZXQgZT10Ll91U3F1YXJlZCxuPXQuX2VsbGlwc29pZC5tYXhpbXVtUmFkaXVzLG89dC5fZWxsaXBzb2lkLm1pbmltdW1SYWRpdXMscj0obi1vKS9uLGk9TWF0aC5jb3ModC5fc3RhcnRIZWFkaW5nKSxzPU1hdGguc2luKHQuX3N0YXJ0SGVhZGluZyksZj0oMS1yKSpNYXRoLnRhbih0Ll9zdGFydC5sYXRpdHVkZSksdT0xL01hdGguc3FydCgxK2YqZiksYz11KmYsbD1NYXRoLmF0YW4yKGYsaSkscD11KnMsZD1wKnAsbT0xLWQsXz1NYXRoLnNxcnQobSksZz1lLzQsYj1nKmcsVD1iKmcsTz1iKmIsRT0xK2ctMypiLzQrNSpULzQtMTc1Kk8vNjQsdz0xLWcrMTUqYi84LTM1KlQvOCxDPTEtMypnKzM1KmIvNCxNPTEtNSpnLE49RSpsLXcqTWF0aC5zaW4oMipsKSpnLzItQypNYXRoLnNpbig0KmwpKmIvMTYtTSpNYXRoLnNpbig2KmwpKlQvNDgtTWF0aC5zaW4oOCpsKSo1Kk8vNTEyLEY9dC5fY29uc3RhbnRzO0YuYT1uLEYuYj1vLEYuZj1yLEYuY29zaW5lSGVhZGluZz1pLEYuc2luZUhlYWRpbmc9cyxGLnRhblU9ZixGLmNvc2luZVU9dSxGLnNpbmVVPWMsRi5zaWdtYT1sLEYuc2luZUFscGhhPXAsRi5zaW5lU3F1YXJlZEFscGhhPWQsRi5jb3NpbmVTcXVhcmVkQWxwaGE9bSxGLmNvc2luZUFscGhhPV8sRi51Mk92ZXI0PWcsRi51NE92ZXIxNj1iLEYudTZPdmVyNjQ9VCxGLnU4T3ZlcjI1Nj1PLEYuYTA9RSxGLmExPXcsRi5hMj1DLEYuYTM9TSxGLmRpc3RhbmNlUmF0aW89Tn1mdW5jdGlvbiBjdih0LGUpe3JldHVybiB0KmUqKDQrdCooNC0zKmUpKS8xNn1mdW5jdGlvbiBNdyh0LGUsbixvLHIsaSxzKXtsZXQgZj1jdih0LG4pO3JldHVybigxLWYpKnQqZSoobytmKnIqKHMrZippKigyKnMqcy0xKSkpfWZ1bmN0aW9uIGF2KHQsZSxuLG8scixpLHMpe2xldCBmPShlLW4pL2UsdT1pLW8sYz1NYXRoLmF0YW4oKDEtZikqTWF0aC50YW4ocikpLGw9TWF0aC5hdGFuKCgxLWYpKk1hdGgudGFuKHMpKSxwPU1hdGguY29zKGMpLGQ9TWF0aC5zaW4oYyksbT1NYXRoLmNvcyhsKSxfPU1hdGguc2luKGwpLGc9cCptLGI9cCpfLFQ9ZCpfLE89ZCptLEU9dSx3PVAuVFdPX1BJLEM9TWF0aC5jb3MoRSksTT1NYXRoLnNpbihFKSxOLEYsSSx2LEI7ZG97Qz1NYXRoLmNvcyhFKSxNPU1hdGguc2luKEUpO2xldCBXPWItTypDO0k9TWF0aC5zcXJ0KG0qbSpNKk0rVypXKSxGPVQrZypDLE49TWF0aC5hdGFuMihJLEYpO2xldCBSO0k9PT0wPyhSPTAsdj0xKTooUj1nKk0vSSx2PTEtUipSKSx3PUUsQj1GLTIqVC92LGlzRmluaXRlKEIpfHwoQj0wKSxFPXUrTXcoZixSLHYsTixJLEYsQil9d2hpbGUoTWF0aC5hYnMoRS13KT5QLkVQU0lMT04xMik7bGV0IEE9diooZSplLW4qbikvKG4qbiksUz0xK0EqKDQwOTYrQSooQSooMzIwLTE3NSpBKS03NjgpKS8xNjM4NCx4PUEqKDI1NitBKihBKig3NC00NypBKS0xMjgpKS8xMDI0LEQ9QipCLHo9eCpJKihCK3gqKEYqKDIqRC0xKS14KkIqKDQqSSpJLTMpKig0KkQtMykvNikvNCksaj1uKlMqKE4teiksaz1NYXRoLmF0YW4yKG0qTSxiLU8qQykscT1NYXRoLmF0YW4yKHAqTSxiKkMtTyk7dC5fZGlzdGFuY2U9aix0Ll9zdGFydEhlYWRpbmc9ayx0Ll9lbmRIZWFkaW5nPXEsdC5fdVNxdWFyZWQ9QX1mdW5jdGlvbiBOdyh0LGUsbixvKXtsZXQgcj1hLm5vcm1hbGl6ZShvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGUsejApLGZ2KSxpPWEubm9ybWFsaXplKG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4obix6MCksejApO3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ2YWx1ZSIsTWF0aC5hYnMoTWF0aC5hYnMoYS5hbmdsZUJldHdlZW4ocixpKSktTWF0aC5QSSksLjAxMjUpLGF2KHQsby5tYXhpbXVtUmFkaXVzLG8ubWluaW11bVJhZGl1cyxlLmxvbmdpdHVkZSxlLmxhdGl0dWRlLG4ubG9uZ2l0dWRlLG4ubGF0aXR1ZGUpLHQuX3N0YXJ0PXN0LmNsb25lKGUsdC5fc3RhcnQpLHQuX2VuZD1zdC5jbG9uZShuLHQuX2VuZCksdC5fc3RhcnQuaGVpZ2h0PTAsdC5fZW5kLmhlaWdodD0wLHN2KHQpfWZ1bmN0aW9uIEJmKHQsZSxuKXtsZXQgbz1uPz9ZLmRlZmF1bHQ7dGhpcy5fZWxsaXBzb2lkPW8sdGhpcy5fc3RhcnQ9bmV3IHN0LHRoaXMuX2VuZD1uZXcgc3QsdGhpcy5fY29uc3RhbnRzPXt9LHRoaXMuX3N0YXJ0SGVhZGluZz12b2lkIDAsdGhpcy5fZW5kSGVhZGluZz12b2lkIDAsdGhpcy5fZGlzdGFuY2U9dm9pZCAwLHRoaXMuX3VTcXVhcmVkPXZvaWQgMCxoKHQpJiZoKGUpJiZOdyh0aGlzLHQsZSxvKX12YXIgZnYsejAsY2QsajA9JCgoKT0+e0x0KCk7SWUoKTtXdCgpO2F0KCk7JHQoKTtLdCgpO2Z2PW5ldyBhLHowPW5ldyBhO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJmLnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfX0sc3VyZmFjZURpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZpbmVkKCJkaXN0YW5jZSIsdGhpcy5fZGlzdGFuY2UpLHRoaXMuX2Rpc3RhbmNlfX0sc3RhcnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydH19LGVuZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuZH19LHN0YXJ0SGVhZGluZzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuZGVmaW5lZCgiZGlzdGFuY2UiLHRoaXMuX2Rpc3RhbmNlKSx0aGlzLl9zdGFydEhlYWRpbmd9fSxlbmRIZWFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZpbmVkKCJkaXN0YW5jZSIsdGhpcy5fZGlzdGFuY2UpLHRoaXMuX2VuZEhlYWRpbmd9fX0pO0JmLnByb3RvdHlwZS5zZXRFbmRQb2ludHM9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoInN0YXJ0Iix0KSx5LmRlZmluZWQoImVuZCIsZSksTncodGhpcyx0LGUsdGhpcy5fZWxsaXBzb2lkKX07QmYucHJvdG90eXBlLmludGVycG9sYXRlVXNpbmdGcmFjdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UodGhpcy5fZGlzdGFuY2UqdCxlKX07QmYucHJvdG90eXBlLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImRpc3RhbmNlIix0aGlzLl9kaXN0YW5jZSk7bGV0IG49dGhpcy5fY29uc3RhbnRzLG89bi5kaXN0YW5jZVJhdGlvK3Qvbi5iLHI9TWF0aC5jb3MoMipvKSxpPU1hdGguY29zKDQqbykscz1NYXRoLmNvcyg2Km8pLGY9TWF0aC5zaW4oMipvKSx1PU1hdGguc2luKDQqbyksYz1NYXRoLnNpbig2Km8pLGw9TWF0aC5zaW4oOCpvKSxwPW8qbyxkPW8qcCxtPW4udThPdmVyMjU2LF89bi51Mk92ZXI0LGc9bi51Nk92ZXI2NCxiPW4udTRPdmVyMTYsVD0yKmQqbSpyLzMrbyooMS1fKzcqYi80LTE1KmcvNCs1NzkqbS82NC0oYi0xNSpnLzQrMTg3Km0vMTYpKnItKDUqZy80LTExNSptLzE2KSppLTI5Km0qcy8xNikrKF8vMi1iKzcxKmcvMzItODUqbS8xNikqZisoNSpiLzE2LTUqZy80KzM4MyptLzk2KSp1LXAqKChnLTExKm0vMikqZis1Km0qdS8yKSsoMjkqZy85Ni0yOSptLzE2KSpjKzUzOSptKmwvMTUzNixPPU1hdGguYXNpbihNYXRoLnNpbihUKSpuLmNvc2luZUFscGhhKSxFPU1hdGguYXRhbihuLmEvbi5iKk1hdGgudGFuKE8pKTtUPVQtbi5zaWdtYTtsZXQgdz1NYXRoLmNvcygyKm4uc2lnbWErVCksQz1NYXRoLnNpbihUKSxNPU1hdGguY29zKFQpLE49bi5jb3NpbmVVKk0sRj1uLnNpbmVVKkMsdj1NYXRoLmF0YW4yKEMqbi5zaW5lSGVhZGluZyxOLUYqbi5jb3NpbmVIZWFkaW5nKS1NdyhuLmYsbi5zaW5lQWxwaGEsbi5jb3NpbmVTcXVhcmVkQWxwaGEsVCxDLE0sdyk7cmV0dXJuIGgoZSk/KGUubG9uZ2l0dWRlPXRoaXMuX3N0YXJ0LmxvbmdpdHVkZSt2LGUubGF0aXR1ZGU9RSxlLmhlaWdodD0wLGUpOm5ldyBzdCh0aGlzLl9zdGFydC5sb25naXR1ZGUrdixFLDApfTtjZD1CZn0pO2Z1bmN0aW9uIEx3KHQsZSxuKXtsZXQgbz1xMDtvLmxlbmd0aD10O2xldCByO2lmKGU9PT1uKXtmb3Iocj0wO3I8dDtyKyspb1tyXT1lO3JldHVybiBvfWxldCBzPShuLWUpL3Q7Zm9yKHI9MDtyPHQ7cisrKXtsZXQgZj1lK3IqcztvW3JdPWZ9cmV0dXJuIG99ZnVuY3Rpb24gZ3YodCxlLG4sbyxyLGkscyxmKXtsZXQgdT1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodCxLMCksYz1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZSx5diksbD1Eby5udW1iZXJPZlBvaW50cyh0LGUsbikscD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHUsZmQpLGQ9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhjLGFkKSxtPUx3KGwscixpKTtIMC5zZXRFbmRQb2ludHMocCxkKTtsZXQgXz1IMC5zdXJmYWNlRGlzdGFuY2UvbCxnPWY7cC5oZWlnaHQ9cjtsZXQgYj1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHAsbXMpO2EucGFjayhiLHMsZyksZys9Mztmb3IobGV0IFQ9MTtUPGw7VCsrKXtsZXQgTz1IMC5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKFQqXyxhZCk7Ty5oZWlnaHQ9bVtUXSxiPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTyxtcyksYS5wYWNrKGIscyxnKSxnKz0zfXJldHVybiBnfWZ1bmN0aW9uIEF2KHQsZSxuLG8scixpLHMsZil7bGV0IHU9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh0LGZkKSxjPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZSxhZCksbD1Eby5udW1iZXJPZlBvaW50c1JodW1iTGluZSh1LGMsbik7dS5oZWlnaHQ9MCxjLmhlaWdodD0wO2xldCBwPUx3KGwscixpKTtVZi5lbGxpcHNvaWQuZXF1YWxzKG8pfHwoVWY9bmV3IFpvKHZvaWQgMCx2b2lkIDAsbykpLFVmLnNldEVuZFBvaW50cyh1LGMpO2xldCBkPVVmLnN1cmZhY2VEaXN0YW5jZS9sLG09Zjt1LmhlaWdodD1yO2xldCBfPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odSxtcyk7YS5wYWNrKF8scyxtKSxtKz0zO2ZvcihsZXQgZz0xO2c8bDtnKyspe2xldCBiPVVmLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoZypkLGFkKTtiLmhlaWdodD1wW2ddLF89by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihiLG1zKSxhLnBhY2soXyxzLG0pLG0rPTN9cmV0dXJuIG19dmFyIERvLHV2LGx2LHB2LEl3LGR2LHZ3LG12LGh2LF92LHEwLGZkLGFkLG1zLEswLHl2LEgwLFVmLEZ3LGJ2LEFuLHlhPSQoKCk9PntMdCgpO0llKCk7YXQoKTtqdCgpOyR0KCk7ajAoKTtNZigpO3RjKCk7S3QoKTtVbigpO2ZzKCk7RG89e307RG8ubnVtYmVyT2ZQb2ludHM9ZnVuY3Rpb24odCxlLG4pe2xldCBvPWEuZGlzdGFuY2UodCxlKTtyZXR1cm4gTWF0aC5jZWlsKG8vbil9O0RvLm51bWJlck9mUG9pbnRzUmh1bWJMaW5lPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1NYXRoLnBvdyh0LmxvbmdpdHVkZS1lLmxvbmdpdHVkZSwyKStNYXRoLnBvdyh0LmxhdGl0dWRlLWUubGF0aXR1ZGUsMik7cmV0dXJuIE1hdGgubWF4KDEsTWF0aC5jZWlsKE1hdGguc3FydChvLyhuKm4pKSkpfTt1dj1uZXcgc3Q7RG8uZXh0cmFjdEhlaWdodHM9ZnVuY3Rpb24odCxlKXtsZXQgbj10Lmxlbmd0aCxvPW5ldyBBcnJheShuKTtmb3IobGV0IHI9MDtyPG47cisrKXtsZXQgaT10W3JdO29bcl09ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhpLHV2KS5oZWlnaHR9cmV0dXJuIG99O2x2PW5ldyBpdCxwdj1uZXcgYSxJdz1uZXcgYSxkdj1uZXcgb24oYS5VTklUX1gsMCksdnc9bmV3IGEsbXY9bmV3IG9uKGEuVU5JVF9YLDApLGh2PW5ldyBhLF92PW5ldyBhLHEwPVtdO2ZkPW5ldyBzdCxhZD1uZXcgc3QsbXM9bmV3IGEsSzA9bmV3IGEseXY9bmV3IGEsSDA9bmV3IGNkLFVmPW5ldyBabztEby53cmFwTG9uZ2l0dWRlPWZ1bmN0aW9uKHQsZSl7bGV0IG49W10sbz1bXTtpZihoKHQpJiZ0Lmxlbmd0aD4wKXtlPWU/P2l0LklERU5USVRZO2xldCByPWl0LmludmVyc2VUcmFuc2Zvcm1hdGlvbihlLGx2KSxpPWl0Lm11bHRpcGx5QnlQb2ludChyLGEuWkVSTyxwdikscz1hLm5vcm1hbGl6ZShpdC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihyLGEuVU5JVF9ZLEl3KSxJdyksZj1vbi5mcm9tUG9pbnROb3JtYWwoaSxzLGR2KSx1PWEubm9ybWFsaXplKGl0Lm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKHIsYS5VTklUX1gsdncpLHZ3KSxjPW9uLmZyb21Qb2ludE5vcm1hbChpLHUsbXYpLGw9MTtuLnB1c2goYS5jbG9uZSh0WzBdKSk7bGV0IHA9blswXSxkPXQubGVuZ3RoO2ZvcihsZXQgbT0xO208ZDsrK20pe2xldCBfPXRbbV07aWYob24uZ2V0UG9pbnREaXN0YW5jZShjLHApPDB8fG9uLmdldFBvaW50RGlzdGFuY2UoYyxfKTwwKXtsZXQgZz1oby5saW5lU2VnbWVudFBsYW5lKHAsXyxmLGh2KTtpZihoKGcpKXtsZXQgYj1hLm11bHRpcGx5QnlTY2FsYXIocyw1ZS05LF92KTtvbi5nZXRQb2ludERpc3RhbmNlKGYscCk8MCYmYS5uZWdhdGUoYixiKSxuLnB1c2goYS5hZGQoZyxiLG5ldyBhKSksby5wdXNoKGwrMSksYS5uZWdhdGUoYixiKSxuLnB1c2goYS5hZGQoZyxiLG5ldyBhKSksbD0xfX1uLnB1c2goYS5jbG9uZSh0W21dKSksbCsrLHA9X31vLnB1c2gobCl9cmV0dXJue3Bvc2l0aW9uczpuLGxlbmd0aHM6b319O0RvLmdlbmVyYXRlQXJjPWZ1bmN0aW9uKHQpe2godCl8fCh0PXt9KTtsZXQgZT10LnBvc2l0aW9ucztpZighaChlKSl0aHJvdyBuZXcgTCgib3B0aW9ucy5wb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7bGV0IG49ZS5sZW5ndGgsbz10LmVsbGlwc29pZD8/WS5kZWZhdWx0LHI9dC5oZWlnaHQ/PzAsaT1BcnJheS5pc0FycmF5KHIpO2lmKG48MSlyZXR1cm5bXTtpZihuPT09MSl7bGV0IGc9by5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGVbMF0sSzApO2lmKHI9aT9yWzBdOnIsciE9PTApe2xldCBiPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGcsbXMpO2EubXVsdGlwbHlCeVNjYWxhcihiLHIsYiksYS5hZGQoZyxiLGcpfXJldHVybltnLngsZy55LGcuel19bGV0IHM9dC5taW5EaXN0YW5jZTtpZighaChzKSl7bGV0IGc9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUU7cz1QLmNob3JkTGVuZ3RoKGcsby5tYXhpbXVtUmFkaXVzKX1sZXQgZj0wLHU7Zm9yKHU9MDt1PG4tMTt1KyspZis9RG8ubnVtYmVyT2ZQb2ludHMoZVt1XSxlW3UrMV0scyk7bGV0IGM9KGYrMSkqMyxsPW5ldyBBcnJheShjKSxwPTA7Zm9yKHU9MDt1PG4tMTt1Kyspe2xldCBnPWVbdV0sYj1lW3UrMV0sVD1pP3JbdV06cixPPWk/clt1KzFdOnI7cD1ndihnLGIscyxvLFQsTyxsLHApfXEwLmxlbmd0aD0wO2xldCBkPWVbbi0xXSxtPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZCxmZCk7bS5oZWlnaHQ9aT9yW24tMV06cjtsZXQgXz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKG0sbXMpO3JldHVybiBhLnBhY2soXyxsLGMtMyksbH07Rnc9bmV3IHN0LGJ2PW5ldyBzdDtEby5nZW5lcmF0ZVJodW1iQXJjPWZ1bmN0aW9uKHQpe2godCl8fCh0PXt9KTtsZXQgZT10LnBvc2l0aW9ucztpZighaChlKSl0aHJvdyBuZXcgTCgib3B0aW9ucy5wb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7bGV0IG49ZS5sZW5ndGgsbz10LmVsbGlwc29pZD8/WS5kZWZhdWx0LHI9dC5oZWlnaHQ/PzAsaT1BcnJheS5pc0FycmF5KHIpO2lmKG48MSlyZXR1cm5bXTtpZihuPT09MSl7bGV0IFQ9by5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGVbMF0sSzApO2lmKHI9aT9yWzBdOnIsciE9PTApe2xldCBPPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKFQsbXMpO2EubXVsdGlwbHlCeVNjYWxhcihPLHIsTyksYS5hZGQoVCxPLFQpfXJldHVybltULngsVC55LFQuel19bGV0IHM9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUUsZj0wLHUsYz1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGVbMF0sRncpLGw7Zm9yKHU9MDt1PG4tMTt1KyspbD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGVbdSsxXSxidiksZis9RG8ubnVtYmVyT2ZQb2ludHNSaHVtYkxpbmUoYyxsLHMpLGM9c3QuY2xvbmUobCxGdyk7bGV0IHA9KGYrMSkqMyxkPW5ldyBBcnJheShwKSxtPTA7Zm9yKHU9MDt1PG4tMTt1Kyspe2xldCBUPWVbdV0sTz1lW3UrMV0sRT1pP3JbdV06cix3PWk/clt1KzFdOnI7bT1BdihULE8scyxvLEUsdyxkLG0pfXEwLmxlbmd0aD0wO2xldCBfPWVbbi0xXSxnPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoXyxmZCk7Zy5oZWlnaHQ9aT9yW24tMV06cjtsZXQgYj1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGcsbXMpO3JldHVybiBhLnBhY2soYixkLHAtMyksZH07RG8uZ2VuZXJhdGVDYXJ0ZXNpYW5BcmM9ZnVuY3Rpb24odCl7bGV0IGU9RG8uZ2VuZXJhdGVBcmModCksbj1lLmxlbmd0aC8zLG89bmV3IEFycmF5KG4pO2ZvcihsZXQgcj0wO3I8bjtyKyspb1tyXT1hLnVucGFjayhlLHIqMyk7cmV0dXJuIG99O0RvLmdlbmVyYXRlQ2FydGVzaWFuUmh1bWJBcmM9ZnVuY3Rpb24odCl7bGV0IGU9RG8uZ2VuZXJhdGVSaHVtYkFyYyh0KSxuPWUubGVuZ3RoLzMsbz1uZXcgQXJyYXkobik7Zm9yKGxldCByPTA7cjxuO3IrKylvW3JdPWEudW5wYWNrKGUsciozKTtyZXR1cm4gb307QW49RG99KTtmdW5jdGlvbiBrZih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJpZGVudGlmaWVyIGlzIHJlcXVpcmVkLiIpO2goRHdbdF0pfHwoRHdbdF09ITAsY29uc29sZS53YXJuKGU/P3QpKX12YXIgRHcsdWQsVzA9JCgoKT0+e2F0KCk7anQoKTtEdz17fTtrZi5nZW9tZXRyeU91dGxpbmVzPSJFbnRpdHkgZ2VvbWV0cnkgb3V0bGluZXMgYXJlIHVuc3VwcG9ydGVkIG9uIHRlcnJhaW4uIE91dGxpbmVzIHdpbGwgYmUgZGlzYWJsZWQuIFRvIGVuYWJsZSBvdXRsaW5lcywgZGlzYWJsZSBnZW9tZXRyeSB0ZXJyYWluIGNsYW1waW5nIGJ5IGV4cGxpY2l0bHkgc2V0dGluZyBoZWlnaHQgdG8gMC4iO2tmLmdlb21ldHJ5WkluZGV4PSJFbnRpdHkgZ2VvbWV0cnkgd2l0aCB6SW5kZXggYXJlIHVuc3VwcG9ydGVkIHdoZW4gaGVpZ2h0IG9yIGV4dHJ1ZGVkSGVpZ2h0IGFyZSBkZWZpbmVkLiAgekluZGV4IHdpbGwgYmUgaWdub3JlZCI7a2YuZ2VvbWV0cnlIZWlnaHRSZWZlcmVuY2U9IkVudGl0eSBjb3JyaWRvciwgZWxsaXBzZSwgcG9seWdvbiBvciByZWN0YW5nbGUgd2l0aCBoZWlnaHRSZWZlcmVuY2UgbXVzdCBhbHNvIGhhdmUgYSBkZWZpbmVkIGhlaWdodC4gIGhlaWdodFJlZmVyZW5jZSB3aWxsIGJlIGlnbm9yZWQiO2tmLmdlb21ldHJ5RXh0cnVkZWRIZWlnaHRSZWZlcmVuY2U9IkVudGl0eSBjb3JyaWRvciwgZWxsaXBzZSwgcG9seWdvbiBvciByZWN0YW5nbGUgd2l0aCBleHRydWRlZEhlaWdodFJlZmVyZW5jZSBtdXN0IGFsc28gaGF2ZSBhIGRlZmluZWQgZXh0cnVkZWRIZWlnaHQuICBleHRydWRlZEhlaWdodFJlZmVyZW5jZSB3aWxsIGJlIGlnbm9yZWQiO3VkPWtmfSk7ZnVuY3Rpb24gTXYodCxlKXtsZXQgbj1uZXcgQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcj10W29dO1gwPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocixYMCksbltvXT1YMC5oZWlnaHQsdFtvXT1lLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UocixyKX1yZXR1cm4gbn1mdW5jdGlvbiBZMCh0LGUsbixvKXtsZXQgcj10WzBdLGk9dFsxXSxzPWEuYW5nbGVCZXR3ZWVuKHIsaSksZj1NYXRoLmNlaWwocy9vKSx1PW5ldyBBcnJheShmKSxjO2lmKGU9PT1uKXtmb3IoYz0wO2M8ZjtjKyspdVtjXT1lO3JldHVybiB1LnB1c2gobiksdX1sZXQgcD0obi1lKS9mO2ZvcihjPTE7YzxmO2MrKyl7bGV0IGQ9ZStjKnA7dVtjXT1kfXJldHVybiB1WzBdPWUsdS5wdXNoKG4pLHV9ZnVuY3Rpb24gTnYodCxlLG4sbyl7bGV0IHI9bmV3IHlvKG4sbyksaT1yLnByb2plY3RQb2ludE9udG9QbGFuZShhLmFkZChuLHQscGQpLHBkKSxzPXIucHJvamVjdFBvaW50T250b1BsYW5lKGEuYWRkKG4sZSxkZCksZGQpLGY9Si5hbmdsZUJldHdlZW4oaSxzKTtyZXR1cm4gcy54KmkueS1zLnkqaS54Pj0wPy1mOmZ9ZnVuY3Rpb24gVWkodCxlLG4sbyxyLGkscyxmKXtsZXQgdT1MdixjPUR2O19jPVhvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHQscixfYyksdT1pdC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihfYyxJdix1KSx1PWEubm9ybWFsaXplKHUsdSk7bGV0IGw9TnYodSxlLHQscik7JDA9Wi5mcm9tUm90YXRpb25aKGwsJDApLEJ3Lno9aSxfYz1pdC5tdWx0aXBseVRyYW5zZm9ybWF0aW9uKF9jLGl0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKCQwLEJ3LHZ2KSxfYyk7bGV0IHA9RnY7cFswXT1zO2ZvcihsZXQgZD0wO2Q8ZjtkKyspZm9yKGxldCBtPTA7bTxuLmxlbmd0aDttKz0zKWM9YS5mcm9tQXJyYXkobixtLGMpLGM9Wi5tdWx0aXBseUJ5VmVjdG9yKHAsYyxjKSxjPWl0Lm11bHRpcGx5QnlQb2ludChfYyxjLGMpLG8ucHVzaChjLngsYy55LGMueik7cmV0dXJuIG99ZnVuY3Rpb24gWjAodCxlLG4sbyxyLGkscyl7Zm9yKGxldCBmPTA7Zjx0Lmxlbmd0aDtmKz0zKXtsZXQgdT1hLmZyb21BcnJheSh0LGYsQnYpO289VWkodSxlLG4sbyxyLGlbZi8zXSxzLDEpfXJldHVybiBvfWZ1bmN0aW9uIFV2KHQsZSl7bGV0IG49dC5sZW5ndGgsbz1uZXcgQXJyYXkobio2KSxyPTAsaT1lLngrZS53aWR0aC8yLHM9ZS55K2UuaGVpZ2h0LzIsZj10WzBdO29bcisrXT1mLngtaSxvW3IrK109MCxvW3IrK109Zi55LXM7Zm9yKGxldCB1PTE7dTxuO3UrKyl7Zj10W3VdO2xldCBjPWYueC1pLGw9Zi55LXM7b1tyKytdPWMsb1tyKytdPTAsb1tyKytdPWwsb1tyKytdPWMsb1tyKytdPTAsb1tyKytdPWx9cmV0dXJuIGY9dFswXSxvW3IrK109Zi54LWksb1tyKytdPTAsb1tyKytdPWYueS1zLG99ZnVuY3Rpb24gVXcodCxlKXtsZXQgbj10Lmxlbmd0aCxvPW5ldyBBcnJheShuKjMpLHI9MCxpPWUueCtlLndpZHRoLzIscz1lLnkrZS5oZWlnaHQvMjtmb3IobGV0IGY9MDtmPG47ZisrKW9bcisrXT10W2ZdLngtaSxvW3IrK109MCxvW3IrK109dFtmXS55LXM7cmV0dXJuIG99ZnVuY3Rpb24gencodCxlLG4sbyxyLGkscyxmLHUsYyl7bGV0IGw9YS5hbmdsZUJldHdlZW4oYS5zdWJ0cmFjdChlLHQsZ2EpLGEuc3VidHJhY3Qobix0LGxkKSkscD1vPT09Zm4uQkVWRUxFRD8wOk1hdGguY2VpbChsL1AudG9SYWRpYW5zKDUpKSxkO3I/ZD1aLmZyb21RdWF0ZXJuaW9uKHRlLmZyb21BeGlzQW5nbGUoYS5uZWdhdGUodCxnYSksbC8ocCsxKSxrdyksVncpOmQ9Wi5mcm9tUXVhdGVybmlvbih0ZS5mcm9tQXhpc0FuZ2xlKHQsbC8ocCsxKSxrdyksVncpO2xldCBtLF87aWYoZT1hLmNsb25lKGUsR3cpLHA+MCl7bGV0IGc9Yz8yOjE7Zm9yKGxldCBiPTA7YjxwO2IrKyllPVoubXVsdGlwbHlCeVZlY3RvcihkLGUsZSksbT1hLnN1YnRyYWN0KGUsdCxnYSksbT1hLm5vcm1hbGl6ZShtLG0pLHJ8fChtPWEubmVnYXRlKG0sbSkpLF89aS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGUsbGQpLHM9VWkoXyxtLGYscyxpLHUsMSxnKX1lbHNlIG09YS5zdWJ0cmFjdChlLHQsZ2EpLG09YS5ub3JtYWxpemUobSxtKSxyfHwobT1hLm5lZ2F0ZShtLG0pKSxfPWkuc2NhbGVUb0dlb2RldGljU3VyZmFjZShlLGxkKSxzPVVpKF8sbSxmLHMsaSx1LDEsMSksbj1hLmNsb25lKG4sR3cpLG09YS5zdWJ0cmFjdChuLHQsZ2EpLG09YS5ub3JtYWxpemUobSxtKSxyfHwobT1hLm5lZ2F0ZShtLG0pKSxfPWkuc2NhbGVUb0dlb2RldGljU3VyZmFjZShuLGxkKSxzPVVpKF8sbSxmLHMsaSx1LDEsMSk7cmV0dXJuIHN9dmFyIGFvLFR2LHd2LE92LEV2LFJ2LFN2LEN2LHh2LFB2LGdhLGxkLEdmLFgwLHBkLGRkLEl2LF9jLHZ2LCQwLEZ2LEx2LER2LEJ3LEJ2LGt3LEd3LFZ3LGt2LEd2LGhzLG1kPSQoKCk9PntVZSgpO0x0KCk7aHIoKTtJZSgpO2hjKCk7bGEoKTtLdCgpO0JuKCk7VW4oKTt5YSgpO0tvKCk7Y3MoKTtXMCgpO2FvPVtuZXcgYSxuZXcgYV0sVHY9bmV3IGEsd3Y9bmV3IGEsT3Y9bmV3IGEsRXY9bmV3IGEsUnY9bmV3IGEsU3Y9bmV3IGEsQ3Y9bmV3IGEseHY9bmV3IGEsUHY9bmV3IGEsZ2E9bmV3IGEsbGQ9bmV3IGEsR2Y9e30sWDA9bmV3IHN0O3BkPW5ldyBhLGRkPW5ldyBhO0l2PW5ldyBhKC0xLDAsMCksX2M9bmV3IGl0LHZ2PW5ldyBpdCwkMD1uZXcgWixGdj1aLklERU5USVRZLmNsb25lKCksTHY9bmV3IGEsRHY9bmV3IG1lLEJ3PW5ldyBhO0J2PW5ldyBhO2t3PW5ldyB0ZSxHdz1uZXcgYSxWdz1uZXcgWjtHZi5yZW1vdmVEdXBsaWNhdGVzRnJvbVNoYXBlPWZ1bmN0aW9uKHQpe2xldCBlPXQubGVuZ3RoLG49W107Zm9yKGxldCBvPWUtMSxyPTA7cjxlO289cisrKXtsZXQgaT10W29dLHM9dFtyXTtKLmVxdWFscyhpLHMpfHxuLnB1c2gocyl9cmV0dXJuIG59O0dmLmFuZ2xlSXNHcmVhdGVyVGhhblBpPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPW5ldyB5byhuLG8pLGk9ci5wcm9qZWN0UG9pbnRPbnRvUGxhbmUoYS5hZGQobix0LHBkKSxwZCkscz1yLnByb2plY3RQb2ludE9udG9QbGFuZShhLmFkZChuLGUsZGQpLGRkKTtyZXR1cm4gcy54KmkueS1zLnkqaS54Pj0wfTtrdj1uZXcgYSxHdj1uZXcgYTtHZi5jb21wdXRlUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9by5fZWxsaXBzb2lkLHM9TXYodCxpKSxmPW8uX2dyYW51bGFyaXR5LHU9by5fY29ybmVyVHlwZSxjPXI/VXYoZSxuKTpVdyhlLG4pLGw9cj9VdyhlLG4pOnZvaWQgMCxwPW4uaGVpZ2h0LzIsZD1uLndpZHRoLzIsbT10Lmxlbmd0aCxfPVtdLGc9cj9bXTp2b2lkIDAsYj1UdixUPXd2LE89T3YsRT1Fdix3PVJ2LEM9U3YsTT1DdixOPXh2LEY9UHYsST10WzBdLHY9dFsxXTtFPWkuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEksRSksYj1hLnN1YnRyYWN0KHYsSSxiKSxiPWEubm9ybWFsaXplKGIsYiksTj1hLmNyb3NzKEUsYixOKSxOPWEubm9ybWFsaXplKE4sTik7bGV0IEI9c1swXSxBPXNbMV07ciYmKGc9VWkoSSxOLGwsZyxpLEIrcCwxLDEpKSxGPWEuY2xvbmUoSSxGKSxJPXYsVD1hLm5lZ2F0ZShiLFQpO2xldCBTLHg7Zm9yKGxldCBqPTE7ajxtLTE7aisrKXtsZXQgaz1yPzI6MTtpZih2PXRbaisxXSxJLmVxdWFscyh2KSl7dWQoIlBvc2l0aW9ucyBhcmUgdG9vIGNsb3NlIGFuZCBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IHdpdGggcm91bmRpbmcgZXJyb3IuIik7Y29udGludWV9Yj1hLnN1YnRyYWN0KHYsSSxiKSxiPWEubm9ybWFsaXplKGIsYiksRT1pLmdlb2RldGljU3VyZmFjZU5vcm1hbChJLEUpO2xldCBxPWEubXVsdGlwbHlCeVNjYWxhcihFLGEuZG90KGIsRSksa3YpO2Euc3VidHJhY3QoYixxLHEpLGEubm9ybWFsaXplKHEscSk7bGV0IFc9YS5tdWx0aXBseUJ5U2NhbGFyKEUsYS5kb3QoVCxFKSxHdik7aWYoYS5zdWJ0cmFjdChULFcsVyksYS5ub3JtYWxpemUoVyxXKSwhUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGEuZG90KHEsVykpLDEsUC5FUFNJTE9ONykpe089YS5hZGQoYixULE8pLE89YS5ub3JtYWxpemUoTyxPKSxPPWEuY3Jvc3MoTyxFLE8pLE89YS5jcm9zcyhFLE8sTyksTz1hLm5vcm1hbGl6ZShPLE8pO2xldCBudD0xL01hdGgubWF4KC4yNSxhLm1hZ25pdHVkZShhLmNyb3NzKE8sVCxnYSkpKSxjdD1HZi5hbmdsZUlzR3JlYXRlclRoYW5QaShiLFQsSSxpKTtjdD8odz1hLmFkZChJLGEubXVsdGlwbHlCeVNjYWxhcihPLG50KmQsTyksdyksQz1hLmFkZCh3LGEubXVsdGlwbHlCeVNjYWxhcihOLGQsQyksQyksYW9bMF09YS5jbG9uZShGLGFvWzBdKSxhb1sxXT1hLmNsb25lKEMsYW9bMV0pLFM9WTAoYW8sQitwLEErcCxmKSx4PUFuLmdlbmVyYXRlQXJjKHtwb3NpdGlvbnM6YW8sZ3JhbnVsYXJpdHk6ZixlbGxpcHNvaWQ6aX0pLF89WjAoeCxOLGMsXyxpLFMsMSksTj1hLmNyb3NzKEUsYixOKSxOPWEubm9ybWFsaXplKE4sTiksTT1hLmFkZCh3LGEubXVsdGlwbHlCeVNjYWxhcihOLGQsTSksTSksdT09PWZuLlJPVU5ERUR8fHU9PT1mbi5CRVZFTEVEP3p3KHcsQyxNLHUsY3QsaSxfLGMsQStwLHIpOihPPWEubmVnYXRlKE8sTyksXz1VaShJLE8sYyxfLGksQStwLG50LGspKSxGPWEuY2xvbmUoTSxGKSk6KHc9YS5hZGQoSSxhLm11bHRpcGx5QnlTY2FsYXIoTyxudCpkLE8pLHcpLEM9YS5hZGQodyxhLm11bHRpcGx5QnlTY2FsYXIoTiwtZCxDKSxDKSxhb1swXT1hLmNsb25lKEYsYW9bMF0pLGFvWzFdPWEuY2xvbmUoQyxhb1sxXSksUz1ZMChhbyxCK3AsQStwLGYpLHg9QW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczphbyxncmFudWxhcml0eTpmLGVsbGlwc29pZDppfSksXz1aMCh4LE4sYyxfLGksUywxKSxOPWEuY3Jvc3MoRSxiLE4pLE49YS5ub3JtYWxpemUoTixOKSxNPWEuYWRkKHcsYS5tdWx0aXBseUJ5U2NhbGFyKE4sLWQsTSksTSksdT09PWZuLlJPVU5ERUR8fHU9PT1mbi5CRVZFTEVEP3p3KHcsQyxNLHUsY3QsaSxfLGMsQStwLHIpOl89VWkoSSxPLGMsXyxpLEErcCxudCxrKSxGPWEuY2xvbmUoTSxGKSksVD1hLm5lZ2F0ZShiLFQpfWVsc2UgXz1VaShGLE4sYyxfLGksQitwLDEsMSksRj1JO0I9QSxBPXNbaisxXSxJPXZ9YW9bMF09YS5jbG9uZShGLGFvWzBdKSxhb1sxXT1hLmNsb25lKEksYW9bMV0pLFM9WTAoYW8sQitwLEErcCxmKSx4PUFuLmdlbmVyYXRlQXJjKHtwb3NpdGlvbnM6YW8sZ3JhbnVsYXJpdHk6ZixlbGxpcHNvaWQ6aX0pLF89WjAoeCxOLGMsXyxpLFMsMSksciYmKGc9VWkoSSxOLGwsZyxpLEErcCwxLDEpKSxtPV8ubGVuZ3RoO2xldCBEPXI/bStnLmxlbmd0aDptLHo9bmV3IEZsb2F0NjRBcnJheShEKTtyZXR1cm4gei5zZXQoXyksciYmei5zZXQoZyxtKSx6fTtocz1HZn0pO2Z1bmN0aW9uIGhkKHQsZSxuLG8scil7bGV0IGk9YS5hbmdsZUJldHdlZW4oYS5zdWJ0cmFjdChlLHQsQWEpLGEuc3VidHJhY3Qobix0LFd3KSkscz1vPT09Zm4uQkVWRUxFRD8xOk1hdGguY2VpbChpL1AudG9SYWRpYW5zKDUpKSsxLGY9cyozLHU9bmV3IEFycmF5KGYpO3VbZi0zXT1uLngsdVtmLTJdPW4ueSx1W2YtMV09bi56O2xldCBjO3I/Yz1aLmZyb21RdWF0ZXJuaW9uKHRlLmZyb21BeGlzQW5nbGUoYS5uZWdhdGUodCxBYSksaS9zLEh3KSxxdyk6Yz1aLmZyb21RdWF0ZXJuaW9uKHRlLmZyb21BeGlzQW5nbGUodCxpL3MsSHcpLHF3KTtsZXQgbD0wO2U9YS5jbG9uZShlLEFhKTtmb3IobGV0IHA9MDtwPHM7cCsrKWU9Wi5tdWx0aXBseUJ5VmVjdG9yKGMsZSxlKSx1W2wrK109ZS54LHVbbCsrXT1lLnksdVtsKytdPWUuejtyZXR1cm4gdX1mdW5jdGlvbiBZdih0KXtsZXQgZT1YdyxuPVl3LG89JHcscj10WzFdO249YS5mcm9tQXJyYXkodFsxXSxyLmxlbmd0aC0zLG4pLG89YS5mcm9tQXJyYXkodFswXSwwLG8pLGU9YS5taWRwb2ludChuLG8sZSk7bGV0IGk9aGQoZSxuLG8sZm4uUk9VTkRFRCwhMSkscz10Lmxlbmd0aC0xLGY9dFtzLTFdO3I9dFtzXSxuPWEuZnJvbUFycmF5KGYsZi5sZW5ndGgtMyxuKSxvPWEuZnJvbUFycmF5KHIsMCxvKSxlPWEubWlkcG9pbnQobixvLGUpO2xldCB1PWhkKGUsbixvLGZuLlJPVU5ERUQsITEpO3JldHVybltpLHVdfWZ1bmN0aW9uIEt3KHQsZSxuLG8pe2xldCByPUFhO3JldHVybiBvP3I9YS5hZGQodCxlLHIpOihlPWEubmVnYXRlKGUsZSkscj1hLmFkZCh0LGUscikpLFtyLngsci55LHIueixuLngsbi55LG4uel19ZnVuY3Rpb24gUTAodCxlLG4sbyl7bGV0IHI9bmV3IEFycmF5KHQubGVuZ3RoKSxpPW5ldyBBcnJheSh0Lmxlbmd0aCkscz1hLm11bHRpcGx5QnlTY2FsYXIoZSxuLEFhKSxmPWEubmVnYXRlKHMsV3cpLHU9MCxjPXQubGVuZ3RoLTE7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKz0zKXtsZXQgcD1hLmZyb21BcnJheSh0LGwsVnYpLGQ9YS5hZGQocCxmLGp3KTtyW3UrK109ZC54LHJbdSsrXT1kLnksclt1KytdPWQuejtsZXQgbT1hLmFkZChwLHMsancpO2lbYy0tXT1tLnosaVtjLS1dPW0ueSxpW2MtLV09bS54fXJldHVybiBvLnB1c2gocixpKSxvfXZhciBKMCxBYSxXdyxWdixqdyxCbyxYdyxZdywkdyx6dixqdixIdixxdixLdixXdixYdixIdyxxdywkdixadixxZSx0Xz0kKCgpPT57THQoKTtoYygpO2F0KCk7S3QoKTtCbigpO3lhKCk7bWQoKTtLbygpO0owPXt9LEFhPW5ldyBhLFd3PW5ldyBhLFZ2PW5ldyBhLGp3PW5ldyBhLEJvPVtuZXcgYSxuZXcgYV0sWHc9bmV3IGEsWXc9bmV3IGEsJHc9bmV3IGEsenY9bmV3IGEsanY9bmV3IGEsSHY9bmV3IGEscXY9bmV3IGEsS3Y9bmV3IGEsV3Y9bmV3IGEsWHY9bmV3IGEsSHc9bmV3IHRlLHF3PW5ldyBaO0owLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1lLngsaT1lLnkscz1lLno7aChuKSYmKHRbbl09cix0W24rMV09aSx0W24rMl09cyksaChvKSYmKHRbb109cyx0W28tMV09aSx0W28tMl09cil9OyR2PW5ldyBhLFp2PW5ldyBhO0owLmNvbXB1dGVQb3NpdGlvbnM9ZnVuY3Rpb24odCl7bGV0IGU9dC5ncmFudWxhcml0eSxuPXQucG9zaXRpb25zLG89dC5lbGxpcHNvaWQscj10LndpZHRoLzIsaT10LmNvcm5lclR5cGUscz10LnNhdmVBdHRyaWJ1dGVzLGY9WHcsdT1ZdyxjPSR3LGw9enYscD1qdixkPUh2LG09cXYsXz1LdixnPVd2LGI9WHYsVD1bXSxPPXM/W106dm9pZCAwLEU9cz9bXTp2b2lkIDAsdz1uWzBdLEM9blsxXTt1PWEubm9ybWFsaXplKGEuc3VidHJhY3QoQyx3LHUpLHUpLGY9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodyxmKSxsPWEubm9ybWFsaXplKGEuY3Jvc3MoZix1LGwpLGwpLHMmJihPLnB1c2gobC54LGwueSxsLnopLEUucHVzaChmLngsZi55LGYueikpLG09YS5jbG9uZSh3LG0pLHc9QyxjPWEubmVnYXRlKHUsYyk7bGV0IE0sTj1bXSxGLEk9bi5sZW5ndGg7Zm9yKEY9MTtGPEktMTtGKyspe2Y9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodyxmKSxDPW5bRisxXSx1PWEubm9ybWFsaXplKGEuc3VidHJhY3QoQyx3LHUpLHUpO2xldCBCPWEubXVsdGlwbHlCeVNjYWxhcihmLGEuZG90KHUsZiksJHYpO2Euc3VidHJhY3QodSxCLEIpLGEubm9ybWFsaXplKEIsQik7bGV0IEE9YS5tdWx0aXBseUJ5U2NhbGFyKGYsYS5kb3QoYyxmKSxadik7aWYoYS5zdWJ0cmFjdChjLEEsQSksYS5ub3JtYWxpemUoQSxBKSwhUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGEuZG90KEIsQSkpLDEsUC5FUFNJTE9ONykpe3A9YS5ub3JtYWxpemUoYS5hZGQodSxjLHApLHApLHA9YS5jcm9zcyhwLGYscCkscD1hLmNyb3NzKGYscCxwKSxwPWEubm9ybWFsaXplKHAscCk7bGV0IHg9ci9NYXRoLm1heCguMjUsYS5tYWduaXR1ZGUoYS5jcm9zcyhwLGMsQWEpKSksRD1ocy5hbmdsZUlzR3JlYXRlclRoYW5QaSh1LGMsdyxvKTtwPWEubXVsdGlwbHlCeVNjYWxhcihwLHgscCksRD8oXz1hLmFkZCh3LHAsXyksYj1hLmFkZChfLGEubXVsdGlwbHlCeVNjYWxhcihsLHIsYiksYiksZz1hLmFkZChfLGEubXVsdGlwbHlCeVNjYWxhcihsLHIqMixnKSxnKSxCb1swXT1hLmNsb25lKG0sQm9bMF0pLEJvWzFdPWEuY2xvbmUoYixCb1sxXSksTT1Bbi5nZW5lcmF0ZUFyYyh7cG9zaXRpb25zOkJvLGdyYW51bGFyaXR5OmUsZWxsaXBzb2lkOm99KSxUPVEwKE0sbCxyLFQpLHMmJihPLnB1c2gobC54LGwueSxsLnopLEUucHVzaChmLngsZi55LGYueikpLGQ9YS5jbG9uZShnLGQpLGw9YS5ub3JtYWxpemUoYS5jcm9zcyhmLHUsbCksbCksZz1hLmFkZChfLGEubXVsdGlwbHlCeVNjYWxhcihsLHIqMixnKSxnKSxtPWEuYWRkKF8sYS5tdWx0aXBseUJ5U2NhbGFyKGwscixtKSxtKSxpPT09Zm4uUk9VTkRFRHx8aT09PWZuLkJFVkVMRUQ/Ti5wdXNoKHtsZWZ0UG9zaXRpb25zOmhkKF8sZCxnLGksRCl9KTpOLnB1c2goe2xlZnRQb3NpdGlvbnM6S3codyxhLm5lZ2F0ZShwLHApLGcsRCl9KSk6KGc9YS5hZGQodyxwLGcpLGI9YS5hZGQoZyxhLm5lZ2F0ZShhLm11bHRpcGx5QnlTY2FsYXIobCxyLGIpLGIpLGIpLF89YS5hZGQoZyxhLm5lZ2F0ZShhLm11bHRpcGx5QnlTY2FsYXIobCxyKjIsXyksXyksXyksQm9bMF09YS5jbG9uZShtLEJvWzBdKSxCb1sxXT1hLmNsb25lKGIsQm9bMV0pLE09QW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczpCbyxncmFudWxhcml0eTplLGVsbGlwc29pZDpvfSksVD1RMChNLGwscixUKSxzJiYoTy5wdXNoKGwueCxsLnksbC56KSxFLnB1c2goZi54LGYueSxmLnopKSxkPWEuY2xvbmUoXyxkKSxsPWEubm9ybWFsaXplKGEuY3Jvc3MoZix1LGwpLGwpLF89YS5hZGQoZyxhLm5lZ2F0ZShhLm11bHRpcGx5QnlTY2FsYXIobCxyKjIsXyksXyksXyksbT1hLmFkZChnLGEubmVnYXRlKGEubXVsdGlwbHlCeVNjYWxhcihsLHIsbSksbSksbSksaT09PWZuLlJPVU5ERUR8fGk9PT1mbi5CRVZFTEVEP04ucHVzaCh7cmlnaHRQb3NpdGlvbnM6aGQoZyxkLF8saSxEKX0pOk4ucHVzaCh7cmlnaHRQb3NpdGlvbnM6S3codyxwLF8sRCl9KSksYz1hLm5lZ2F0ZSh1LGMpfXc9Q31mPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHcsZiksQm9bMF09YS5jbG9uZShtLEJvWzBdKSxCb1sxXT1hLmNsb25lKHcsQm9bMV0pLE09QW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczpCbyxncmFudWxhcml0eTplLGVsbGlwc29pZDpvfSksVD1RMChNLGwscixUKSxzJiYoTy5wdXNoKGwueCxsLnksbC56KSxFLnB1c2goZi54LGYueSxmLnopKTtsZXQgdjtyZXR1cm4gaT09PWZuLlJPVU5ERUQmJih2PVl2KFQpKSx7cG9zaXRpb25zOlQsY29ybmVyczpOLGxlZnRzOk8sbm9ybWFsczpFLGVuZFBvc2l0aW9uczp2fX07cWU9SjB9KTtmdW5jdGlvbiBuTyh0LGUpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXRbbl09ZS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHRbbl0sdFtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gS3IodCxlLG4sbyxyLGkpe2xldCBzPXQubm9ybWFscyxmPXQudGFuZ2VudHMsdT10LmJpdGFuZ2VudHMsYz1hLm5vcm1hbGl6ZShhLmNyb3NzKG4sZSxfcyksX3MpO2kubm9ybWFsJiZxZS5hZGRBdHRyaWJ1dGUocyxlLG8sciksaS50YW5nZW50JiZxZS5hZGRBdHRyaWJ1dGUoZixjLG8sciksaS5iaXRhbmdlbnQmJnFlLmFkZEF0dHJpYnV0ZSh1LG4sbyxyKX1mdW5jdGlvbiBvTyh0LGUsbil7bGV0IG89dC5wb3NpdGlvbnMscj10LmNvcm5lcnMsaT10LmVuZFBvc2l0aW9ucyxzPXQubGVmdHMsZj10Lm5vcm1hbHMsdT1uZXcgcmUsYyxsPTAscD0wLGQsbT0wLF87Zm9yKGQ9MDtkPG8ubGVuZ3RoO2QrPTIpXz1vW2RdLmxlbmd0aC0zLGwrPV8sbSs9XyoyLHArPW9bZCsxXS5sZW5ndGgtMztmb3IobCs9MyxwKz0zLGQ9MDtkPHIubGVuZ3RoO2QrKyl7Yz1yW2RdO2xldCBvdD1yW2RdLmxlZnRQb3NpdGlvbnM7aChvdCk/KF89b3QubGVuZ3RoLGwrPV8sbSs9Xyk6KF89cltkXS5yaWdodFBvc2l0aW9ucy5sZW5ndGgscCs9XyxtKz1fKX1sZXQgZz1oKGkpLGI7ZyYmKGI9aVswXS5sZW5ndGgtMyxsKz1iLHArPWIsYi89MyxtKz1iKjYpO2xldCBUPWwrcCxPPW5ldyBGbG9hdDY0QXJyYXkoVCksRT1lLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KFQpOnZvaWQgMCx3PWUudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KFQpOnZvaWQgMCxDPWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoVCk6dm9pZCAwLE09e25vcm1hbHM6RSx0YW5nZW50czp3LGJpdGFuZ2VudHM6Q30sTj0wLEY9VC0xLEksdixCLEEsUz1Kdyx4PXRPLEQseixqPWIvMixrPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoVC8zLG0pLHE9MDtpZihnKXt6PV9kLEQ9eWQ7bGV0IG90PWlbMF07Zm9yKFM9YS5mcm9tQXJyYXkoZiwwLFMpLHg9YS5mcm9tQXJyYXkocywwLHgpLGQ9MDtkPGo7ZCsrKXo9YS5mcm9tQXJyYXkob3QsKGotMS1kKSozLHopLEQ9YS5mcm9tQXJyYXkob3QsKGorZCkqMyxEKSxxZS5hZGRBdHRyaWJ1dGUoTyxELE4pLHFlLmFkZEF0dHJpYnV0ZShPLHosdm9pZCAwLEYpLEtyKE0sUyx4LE4sRixlKSx2PU4vMyxBPXYrMSxJPShGLTIpLzMsQj1JLTEsa1txKytdPUksa1txKytdPXYsa1txKytdPUIsa1txKytdPUIsa1txKytdPXYsa1txKytdPUEsTis9MyxGLT0zfWxldCBXPTAsUj0wLG50PW9bVysrXSxjdD1vW1crK107Ty5zZXQobnQsTiksTy5zZXQoY3QsRi1jdC5sZW5ndGgrMSkseD1hLmZyb21BcnJheShzLFIseCk7bGV0IGx0LF90O2ZvcihfPWN0Lmxlbmd0aC0zLGQ9MDtkPF87ZCs9MylsdD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChhLmZyb21BcnJheShudCxkLF9zKSxfcyksX3Q9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoYS5mcm9tQXJyYXkoY3QsXy1kLGJhKSxiYSksUz1hLm5vcm1hbGl6ZShhLmFkZChsdCxfdCxTKSxTKSxLcihNLFMseCxOLEYsZSksdj1OLzMsQT12KzEsST0oRi0yKS8zLEI9SS0xLGtbcSsrXT1JLGtbcSsrXT12LGtbcSsrXT1CLGtbcSsrXT1CLGtbcSsrXT12LGtbcSsrXT1BLE4rPTMsRi09Mztmb3IobHQ9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoYS5mcm9tQXJyYXkobnQsXyxfcyksX3MpLF90PW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGEuZnJvbUFycmF5KGN0LF8sYmEpLGJhKSxTPWEubm9ybWFsaXplKGEuYWRkKGx0LF90LFMpLFMpLFIrPTMsZD0wO2Q8ci5sZW5ndGg7ZCsrKXtsZXQgb3Q7Yz1yW2RdO2xldCB4dD1jLmxlZnRQb3NpdGlvbnMseXQ9Yy5yaWdodFBvc2l0aW9ucyxTdCxkdCxmdD1lTyxJdD1fZCxWdD15ZDtpZihTPWEuZnJvbUFycmF5KGYsUixTKSxoKHh0KSl7Zm9yKEtyKE0sUyx4LHZvaWQgMCxGLGUpLEYtPTMsU3Q9QSxkdD1CLG90PTA7b3Q8eHQubGVuZ3RoLzM7b3QrKylmdD1hLmZyb21BcnJheSh4dCxvdCozLGZ0KSxrW3ErK109U3Qsa1txKytdPWR0LW90LTEsa1txKytdPWR0LW90LHFlLmFkZEF0dHJpYnV0ZShPLGZ0LHZvaWQgMCxGKSxJdD1hLmZyb21BcnJheShPLChkdC1vdC0xKSozLEl0KSxWdD1hLmZyb21BcnJheShPLFN0KjMsVnQpLHg9YS5ub3JtYWxpemUoYS5zdWJ0cmFjdChJdCxWdCx4KSx4KSxLcihNLFMseCx2b2lkIDAsRixlKSxGLT0zO2Z0PWEuZnJvbUFycmF5KE8sU3QqMyxmdCksSXQ9YS5zdWJ0cmFjdChhLmZyb21BcnJheShPLGR0KjMsSXQpLGZ0LEl0KSxWdD1hLnN1YnRyYWN0KGEuZnJvbUFycmF5KE8sKGR0LW90KSozLFZ0KSxmdCxWdCkseD1hLm5vcm1hbGl6ZShhLmFkZChJdCxWdCx4KSx4KSxLcihNLFMseCxOLHZvaWQgMCxlKSxOKz0zfWVsc2V7Zm9yKEtyKE0sUyx4LE4sdm9pZCAwLGUpLE4rPTMsU3Q9QixkdD1BLG90PTA7b3Q8eXQubGVuZ3RoLzM7b3QrKylmdD1hLmZyb21BcnJheSh5dCxvdCozLGZ0KSxrW3ErK109U3Qsa1txKytdPWR0K290LGtbcSsrXT1kdCtvdCsxLHFlLmFkZEF0dHJpYnV0ZShPLGZ0LE4pLEl0PWEuZnJvbUFycmF5KE8sU3QqMyxJdCksVnQ9YS5mcm9tQXJyYXkoTywoZHQrb3QpKjMsVnQpLHg9YS5ub3JtYWxpemUoYS5zdWJ0cmFjdChJdCxWdCx4KSx4KSxLcihNLFMseCxOLHZvaWQgMCxlKSxOKz0zO2Z0PWEuZnJvbUFycmF5KE8sU3QqMyxmdCksSXQ9YS5zdWJ0cmFjdChhLmZyb21BcnJheShPLChkdCtvdCkqMyxJdCksZnQsSXQpLFZ0PWEuc3VidHJhY3QoYS5mcm9tQXJyYXkoTyxkdCozLFZ0KSxmdCxWdCkseD1hLm5vcm1hbGl6ZShhLm5lZ2F0ZShhLmFkZChWdCxJdCx4KSx4KSx4KSxLcihNLFMseCx2b2lkIDAsRixlKSxGLT0zfWZvcihudD1vW1crK10sY3Q9b1tXKytdLG50LnNwbGljZSgwLDMpLGN0LnNwbGljZShjdC5sZW5ndGgtMywzKSxPLnNldChudCxOKSxPLnNldChjdCxGLWN0Lmxlbmd0aCsxKSxfPWN0Lmxlbmd0aC0zLFIrPTMseD1hLmZyb21BcnJheShzLFIseCksb3Q9MDtvdDxjdC5sZW5ndGg7b3QrPTMpbHQ9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoYS5mcm9tQXJyYXkobnQsb3QsX3MpLF9zKSxfdD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChhLmZyb21BcnJheShjdCxfLW90LGJhKSxiYSksUz1hLm5vcm1hbGl6ZShhLmFkZChsdCxfdCxTKSxTKSxLcihNLFMseCxOLEYsZSksQT1OLzMsdj1BLTEsQj0oRi0yKS8zLEk9QisxLGtbcSsrXT1JLGtbcSsrXT12LGtbcSsrXT1CLGtbcSsrXT1CLGtbcSsrXT12LGtbcSsrXT1BLE4rPTMsRi09MztOLT0zLEYrPTN9aWYoUz1hLmZyb21BcnJheShmLGYubGVuZ3RoLTMsUyksS3IoTSxTLHgsTixGLGUpLGcpe04rPTMsRi09Myx6PV9kLEQ9eWQ7bGV0IG90PWlbMV07Zm9yKGQ9MDtkPGo7ZCsrKXo9YS5mcm9tQXJyYXkob3QsKGItZC0xKSozLHopLEQ9YS5mcm9tQXJyYXkob3QsZCozLEQpLHFlLmFkZEF0dHJpYnV0ZShPLHosdm9pZCAwLEYpLHFlLmFkZEF0dHJpYnV0ZShPLEQsTiksS3IoTSxTLHgsTixGLGUpLEE9Ti8zLHY9QS0xLEI9KEYtMikvMyxJPUIrMSxrW3ErK109SSxrW3ErK109dixrW3ErK109QixrW3ErK109QixrW3ErK109dixrW3ErK109QSxOKz0zLEYtPTN9aWYodS5wb3NpdGlvbj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk99KSxlLnN0KXtsZXQgb3Q9bmV3IEZsb2F0MzJBcnJheShULzMqMikseHQseXQsU3Q9MDtpZihnKXtsLz0zLHAvPTM7bGV0IGR0PU1hdGguUEkvKGIrMSk7eXQ9MS8obC1iKzEpLHh0PTEvKHAtYisxKTtsZXQgZnQsSXQ9Yi8yO2ZvcihkPUl0KzE7ZDxiKzE7ZCsrKWZ0PVAuUElfT1ZFUl9UV08rZHQqZCxvdFtTdCsrXT14dCooMStNYXRoLmNvcyhmdCkpLG90W1N0KytdPS41KigxK01hdGguc2luKGZ0KSk7Zm9yKGQ9MTtkPHAtYisxO2QrKylvdFtTdCsrXT1kKnh0LG90W1N0KytdPTA7Zm9yKGQ9YjtkPkl0O2QtLSlmdD1QLlBJX09WRVJfVFdPLWQqZHQsb3RbU3QrK109MS14dCooMStNYXRoLmNvcyhmdCkpLG90W1N0KytdPS41KigxK01hdGguc2luKGZ0KSk7Zm9yKGQ9SXQ7ZD4wO2QtLSlmdD1QLlBJX09WRVJfVFdPLWR0KmQsb3RbU3QrK109MS15dCooMStNYXRoLmNvcyhmdCkpLG90W1N0KytdPS41KigxK01hdGguc2luKGZ0KSk7Zm9yKGQ9bC1iO2Q+MDtkLS0pb3RbU3QrK109ZCp5dCxvdFtTdCsrXT0xO2ZvcihkPTE7ZDxJdCsxO2QrKylmdD1QLlBJX09WRVJfVFdPK2R0KmQsb3RbU3QrK109eXQqKDErTWF0aC5jb3MoZnQpKSxvdFtTdCsrXT0uNSooMStNYXRoLnNpbihmdCkpfWVsc2V7Zm9yKGwvPTMscC89Myx5dD0xLyhsLTEpLHh0PTEvKHAtMSksZD0wO2Q8cDtkKyspb3RbU3QrK109ZCp4dCxvdFtTdCsrXT0wO2ZvcihkPWw7ZD4wO2QtLSlvdFtTdCsrXT0oZC0xKSp5dCxvdFtTdCsrXT0xfXUuc3Q9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOm90fSl9cmV0dXJuIGUubm9ybWFsJiYodS5ub3JtYWw9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk0ubm9ybWFsc30pKSxlLnRhbmdlbnQmJih1LnRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk0udGFuZ2VudHN9KSksZS5iaXRhbmdlbnQmJih1LmJpdGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6TS5iaXRhbmdlbnRzfSkpLHthdHRyaWJ1dGVzOnUsaW5kaWNlczprfX1mdW5jdGlvbiBKdih0LGUpe2lmKCFlLm5vcm1hbCYmIWUudGFuZ2VudCYmIWUuYml0YW5nZW50JiYhZS5zdClyZXR1cm4gdDtsZXQgbj10LnBvc2l0aW9uLnZhbHVlcyxvLHI7KGUubm9ybWFsfHxlLmJpdGFuZ2VudCkmJihvPXQubm9ybWFsLnZhbHVlcyxyPXQuYml0YW5nZW50LnZhbHVlcyk7bGV0IGk9dC5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzE4LHM9aSozLGY9aSoyLHU9cyoyLGM7aWYoZS5ub3JtYWx8fGUuYml0YW5nZW50fHxlLnRhbmdlbnQpe2xldCBsPWUubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkocyo2KTp2b2lkIDAscD1lLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShzKjYpOnZvaWQgMCxkPWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkocyo2KTp2b2lkIDAsbT1KdyxfPXRPLGc9X2QsYj15ZCxUPVF2LE89ZU8sRT11O2ZvcihjPTA7YzxzO2MrPTMpe2xldCB3PUUrdTttPWEuZnJvbUFycmF5KG4sYyxtKSxfPWEuZnJvbUFycmF5KG4sYytzLF8pLGc9YS5mcm9tQXJyYXkobiwoYyszKSVzLGcpLF89YS5zdWJ0cmFjdChfLG0sXyksZz1hLnN1YnRyYWN0KGcsbSxnKSxiPWEubm9ybWFsaXplKGEuY3Jvc3MoXyxnLGIpLGIpLGUubm9ybWFsJiYocWUuYWRkQXR0cmlidXRlKGwsYix3KSxxZS5hZGRBdHRyaWJ1dGUobCxiLHcrMykscWUuYWRkQXR0cmlidXRlKGwsYixFKSxxZS5hZGRBdHRyaWJ1dGUobCxiLEUrMykpLChlLnRhbmdlbnR8fGUuYml0YW5nZW50KSYmKE89YS5mcm9tQXJyYXkobyxjLE8pLGUuYml0YW5nZW50JiYocWUuYWRkQXR0cmlidXRlKGQsTyx3KSxxZS5hZGRBdHRyaWJ1dGUoZCxPLHcrMykscWUuYWRkQXR0cmlidXRlKGQsTyxFKSxxZS5hZGRBdHRyaWJ1dGUoZCxPLEUrMykpLGUudGFuZ2VudCYmKFQ9YS5ub3JtYWxpemUoYS5jcm9zcyhPLGIsVCksVCkscWUuYWRkQXR0cmlidXRlKHAsVCx3KSxxZS5hZGRBdHRyaWJ1dGUocCxULHcrMykscWUuYWRkQXR0cmlidXRlKHAsVCxFKSxxZS5hZGRBdHRyaWJ1dGUocCxULEUrMykpKSxFKz02fWlmKGUubm9ybWFsKXtmb3IobC5zZXQobyksYz0wO2M8cztjKz0zKWxbYytzXT0tb1tjXSxsW2MrcysxXT0tb1tjKzFdLGxbYytzKzJdPS1vW2MrMl07dC5ub3JtYWwudmFsdWVzPWx9ZWxzZSB0Lm5vcm1hbD12b2lkIDA7aWYoZS5iaXRhbmdlbnQ/KGQuc2V0KHIpLGQuc2V0KHIscyksdC5iaXRhbmdlbnQudmFsdWVzPWQpOnQuYml0YW5nZW50PXZvaWQgMCxlLnRhbmdlbnQpe2xldCB3PXQudGFuZ2VudC52YWx1ZXM7cC5zZXQodykscC5zZXQodyxzKSx0LnRhbmdlbnQudmFsdWVzPXB9fWlmKGUuc3Qpe2xldCBsPXQuc3QudmFsdWVzLHA9bmV3IEZsb2F0MzJBcnJheShmKjYpO3Auc2V0KGwpLHAuc2V0KGwsZik7bGV0IGQ9ZioyO2ZvcihsZXQgbT0wO208MjttKyspe2ZvcihwW2QrK109bFswXSxwW2QrK109bFsxXSxjPTI7YzxmO2MrPTIpe2xldCBfPWxbY10sZz1sW2MrMV07cFtkKytdPV8scFtkKytdPWcscFtkKytdPV8scFtkKytdPWd9cFtkKytdPWxbMF0scFtkKytdPWxbMV19dC5zdC52YWx1ZXM9cH1yZXR1cm4gdH1mdW5jdGlvbiBlXyh0LGUsbil7bltlKytdPXRbMF0sbltlKytdPXRbMV0sbltlKytdPXRbMl07Zm9yKGxldCBvPTM7bzx0Lmxlbmd0aDtvKz0zKXtsZXQgcj10W29dLGk9dFtvKzFdLHM9dFtvKzJdO25bZSsrXT1yLG5bZSsrXT1pLG5bZSsrXT1zLG5bZSsrXT1yLG5bZSsrXT1pLG5bZSsrXT1zfXJldHVybiBuW2UrK109dFswXSxuW2UrK109dFsxXSxuW2UrK109dFsyXSxufWZ1bmN0aW9uIHRGKHQsZSl7bGV0IG49bmV3IHB0KHtwb3NpdGlvbjplLnBvc2l0aW9uLG5vcm1hbDplLm5vcm1hbHx8ZS5iaXRhbmdlbnR8fHQuc2hhZG93Vm9sdW1lLHRhbmdlbnQ6ZS50YW5nZW50LGJpdGFuZ2VudDplLm5vcm1hbHx8ZS5iaXRhbmdlbnQsc3Q6ZS5zdH0pLG89dC5lbGxpcHNvaWQscj1xZS5jb21wdXRlUG9zaXRpb25zKHQpLGk9b08ocixuLG8pLHM9dC5oZWlnaHQsZj10LmV4dHJ1ZGVkSGVpZ2h0LHU9aS5hdHRyaWJ1dGVzLGM9aS5pbmRpY2VzLGw9dS5wb3NpdGlvbi52YWx1ZXMscD1sLmxlbmd0aCxkPW5ldyBGbG9hdDY0QXJyYXkocCo2KSxtPW5ldyBGbG9hdDY0QXJyYXkocCk7bS5zZXQobCk7bGV0IF89bmV3IEZsb2F0NjRBcnJheShwKjQpO2w9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KGwscyxvKSxfPWVfKGwsMCxfKSxtPVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChtLGYsbyksXz1lXyhtLHAqMixfKSxkLnNldChsKSxkLnNldChtLHApLGQuc2V0KF8scCoyKSx1LnBvc2l0aW9uLnZhbHVlcz1kLHU9SnYodSxlKTtsZXQgZyxiPXAvMztpZih0LnNoYWRvd1ZvbHVtZSl7bGV0IEk9dS5ub3JtYWwudmFsdWVzO3A9SS5sZW5ndGg7bGV0IHY9bmV3IEZsb2F0MzJBcnJheShwKjYpO2ZvcihnPTA7ZzxwO2crKylJW2ddPS1JW2ddO3Yuc2V0KEkscCksdj1lXyhJLHAqNCx2KSx1LmV4dHJ1ZGVEaXJlY3Rpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnZ9KSxlLm5vcm1hbHx8KHUubm9ybWFsPXZvaWQgMCl9aWYoaCh0Lm9mZnNldEF0dHJpYnV0ZSkpe2xldCBJPW5ldyBVaW50OEFycmF5KGIqNik7aWYodC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApST1JLmZpbGwoMSwwLGIpLmZpbGwoMSxiKjIsYio0KTtlbHNle2xldCB2PXQub2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjE7ST1JLmZpbGwodil9dS5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpJfSl9bGV0IFQ9Yy5sZW5ndGgsTz1iK2IsRT1GdC5jcmVhdGVUeXBlZEFycmF5KGQubGVuZ3RoLzMsVCoyK08qMyk7RS5zZXQoYyk7bGV0IHc9VDtmb3IoZz0wO2c8VDtnKz0zKXtsZXQgST1jW2ddLHY9Y1tnKzFdLEI9Y1tnKzJdO0VbdysrXT1CK2IsRVt3KytdPXYrYixFW3crK109SStifWxldCBDLE0sTixGO2ZvcihnPTA7ZzxPO2crPTIpQz1nK08sTT1DK08sTj1DKzEsRj1NKzEsRVt3KytdPUMsRVt3KytdPU0sRVt3KytdPU4sRVt3KytdPU4sRVt3KytdPU0sRVt3KytdPUY7cmV0dXJue2F0dHJpYnV0ZXM6dSxpbmRpY2VzOkV9fWZ1bmN0aW9uIFF3KHQsZSxuLG8scixpKXtsZXQgcz1hLnN1YnRyYWN0KGUsdCxadyk7YS5ub3JtYWxpemUocyxzKTtsZXQgZj1uLmdlb2RldGljU3VyZmFjZU5vcm1hbCh0LFZmKSx1PWEuY3Jvc3MocyxmLFp3KTthLm11bHRpcGx5QnlTY2FsYXIodSxvLHUpO2xldCBjPXIubGF0aXR1ZGUsbD1yLmxvbmdpdHVkZSxwPWkubGF0aXR1ZGUsZD1pLmxvbmdpdHVkZTthLmFkZCh0LHUsVmYpLG4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoVmYsd3IpO2xldCBtPXdyLmxhdGl0dWRlLF89d3IubG9uZ2l0dWRlO2M9TWF0aC5taW4oYyxtKSxsPU1hdGgubWluKGwsXykscD1NYXRoLm1heChwLG0pLGQ9TWF0aC5tYXgoZCxfKSxhLnN1YnRyYWN0KHQsdSxWZiksbi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhWZix3ciksbT13ci5sYXRpdHVkZSxfPXdyLmxvbmdpdHVkZSxjPU1hdGgubWluKGMsbSksbD1NYXRoLm1pbihsLF8pLHA9TWF0aC5tYXgocCxtKSxkPU1hdGgubWF4KGQsXyksci5sYXRpdHVkZT1jLHIubG9uZ2l0dWRlPWwsaS5sYXRpdHVkZT1wLGkubG9uZ2l0dWRlPWR9ZnVuY3Rpb24gck8odCxlLG4sbyxyKXt0PW5PKHQsZSk7bGV0IGk9eG4odCxhLmVxdWFsc0Vwc2lsb24pLHM9aS5sZW5ndGg7aWYoczwyfHxuPD0wKXJldHVybiBuZXcgTXQ7bGV0IGY9biouNTtRby5sYXRpdHVkZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksUW8ubG9uZ2l0dWRlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxKby5sYXRpdHVkZT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksSm8ubG9uZ2l0dWRlPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgdSxjO2lmKG89PT1mbi5ST1VOREVEKXtsZXQgZD1pWzBdO2Euc3VidHJhY3QoZCxpWzFdLFRyKSxhLm5vcm1hbGl6ZShUcixUciksYS5tdWx0aXBseUJ5U2NhbGFyKFRyLGYsVHIpLGEuYWRkKGQsVHIsemYpLGUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoemYsd3IpLHU9d3IubGF0aXR1ZGUsYz13ci5sb25naXR1ZGUsUW8ubGF0aXR1ZGU9TWF0aC5taW4oUW8ubGF0aXR1ZGUsdSksUW8ubG9uZ2l0dWRlPU1hdGgubWluKFFvLmxvbmdpdHVkZSxjKSxKby5sYXRpdHVkZT1NYXRoLm1heChKby5sYXRpdHVkZSx1KSxKby5sb25naXR1ZGU9TWF0aC5tYXgoSm8ubG9uZ2l0dWRlLGMpfWZvcihsZXQgZD0wO2Q8cy0xOysrZClRdyhpW2RdLGlbZCsxXSxlLGYsUW8sSm8pO2xldCBsPWlbcy0xXTthLnN1YnRyYWN0KGwsaVtzLTJdLFRyKSxhLm5vcm1hbGl6ZShUcixUciksYS5tdWx0aXBseUJ5U2NhbGFyKFRyLGYsVHIpLGEuYWRkKGwsVHIsemYpLFF3KGwsemYsZSxmLFFvLEpvKSxvPT09Zm4uUk9VTkRFRCYmKGUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoemYsd3IpLHU9d3IubGF0aXR1ZGUsYz13ci5sb25naXR1ZGUsUW8ubGF0aXR1ZGU9TWF0aC5taW4oUW8ubGF0aXR1ZGUsdSksUW8ubG9uZ2l0dWRlPU1hdGgubWluKFFvLmxvbmdpdHVkZSxjKSxKby5sYXRpdHVkZT1NYXRoLm1heChKby5sYXRpdHVkZSx1KSxKby5sb25naXR1ZGU9TWF0aC5tYXgoSm8ubG9uZ2l0dWRlLGMpKTtsZXQgcD1oKHIpP3I6bmV3IE10O3JldHVybiBwLm5vcnRoPUpvLmxhdGl0dWRlLHAuc291dGg9UW8ubGF0aXR1ZGUscC5lYXN0PUpvLmxvbmdpdHVkZSxwLndlc3Q9UW8ubG9uZ2l0dWRlLHB9ZnVuY3Rpb24gR2kodCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5wb3NpdGlvbnMsbj10LndpZHRoO3kuZGVmaW5lZCgib3B0aW9ucy5wb3NpdGlvbnMiLGUpLHkuZGVmaW5lZCgib3B0aW9ucy53aWR0aCIsbik7bGV0IG89dC5oZWlnaHQ/PzAscj10LmV4dHJ1ZGVkSGVpZ2h0Pz9vO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQpLHRoaXMuX3ZlcnRleEZvcm1hdD1wdC5jbG9uZSh0LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVCksdGhpcy5fd2lkdGg9bix0aGlzLl9oZWlnaHQ9TWF0aC5tYXgobyxyKSx0aGlzLl9leHRydWRlZEhlaWdodD1NYXRoLm1pbihvLHIpLHRoaXMuX2Nvcm5lclR5cGU9dC5jb3JuZXJUeXBlPz9mbi5ST1VOREVELHRoaXMuX2dyYW51bGFyaXR5PXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX3NoYWRvd1ZvbHVtZT10LnNoYWRvd1ZvbHVtZT8/ITEsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ29ycmlkb3JHZW9tZXRyeSIsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3JlY3RhbmdsZT12b2lkIDAsdGhpcy5wYWNrZWRMZW5ndGg9MStlLmxlbmd0aCphLnBhY2tlZExlbmd0aCtZLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrN312YXIgSncsdE8sX2QseWQsUXYsZU8sX3MsYmEsWncsVmYsd3IsVHIsemYsUW8sSm8saU8sc08sa2ksbl8sY089JCgoKT0+e2pyKCk7dmUoKTtMdCgpO0llKCk7V3QoKTtEZSgpO2hjKCk7dF8oKTt5ZSgpO2F0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTtGbygpOyRlKCk7S3QoKTtxcigpO3RuKCk7d24oKTtSbygpO0p3PW5ldyBhLHRPPW5ldyBhLF9kPW5ldyBhLHlkPW5ldyBhLFF2PW5ldyBhLGVPPW5ldyBhLF9zPW5ldyBhLGJhPW5ldyBhO1p3PW5ldyBhLFZmPW5ldyBhLHdyPW5ldyBzdDtUcj1uZXcgYSx6Zj1uZXcgYSxRbz1uZXcgc3QsSm89bmV3IHN0O0dpLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MDtsZXQgbz10Ll9wb3NpdGlvbnMscj1vLmxlbmd0aDtlW24rK109cjtmb3IobGV0IGk9MDtpPHI7KytpLG4rPWEucGFja2VkTGVuZ3RoKWEucGFjayhvW2ldLGUsbik7cmV0dXJuIFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxwdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4pLG4rPXB0LnBhY2tlZExlbmd0aCxlW24rK109dC5fd2lkdGgsZVtuKytdPXQuX2hlaWdodCxlW24rK109dC5fZXh0cnVkZWRIZWlnaHQsZVtuKytdPXQuX2Nvcm5lclR5cGUsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbisrXT10Ll9zaGFkb3dWb2x1bWU/MTowLGVbbl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtpTz1ZLmNsb25lKFkuVU5JVF9TUEhFUkUpLHNPPW5ldyBwdCxraT17cG9zaXRpb25zOnZvaWQgMCxlbGxpcHNvaWQ6aU8sdmVydGV4Rm9ybWF0OnNPLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxjb3JuZXJUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsc2hhZG93Vm9sdW1lOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtHaS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz10W2UrK10scj1uZXcgQXJyYXkobyk7Zm9yKGxldCBfPTA7XzxvOysrXyxlKz1hLnBhY2tlZExlbmd0aClyW19dPWEudW5wYWNrKHQsZSk7bGV0IGk9WS51bnBhY2sodCxlLGlPKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgcz1wdC51bnBhY2sodCxlLHNPKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IGY9dFtlKytdLHU9dFtlKytdLGM9dFtlKytdLGw9dFtlKytdLHA9dFtlKytdLGQ9dFtlKytdPT09MSxtPXRbZV07cmV0dXJuIGgobik/KG4uX3Bvc2l0aW9ucz1yLG4uX2VsbGlwc29pZD1ZLmNsb25lKGksbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUocyxuLl92ZXJ0ZXhGb3JtYXQpLG4uX3dpZHRoPWYsbi5faGVpZ2h0PXUsbi5fZXh0cnVkZWRIZWlnaHQ9YyxuLl9jb3JuZXJUeXBlPWwsbi5fZ3JhbnVsYXJpdHk9cCxuLl9zaGFkb3dWb2x1bWU9ZCxuLl9vZmZzZXRBdHRyaWJ1dGU9bT09PS0xP3ZvaWQgMDptLG4pOihraS5wb3NpdGlvbnM9cixraS53aWR0aD1mLGtpLmhlaWdodD11LGtpLmV4dHJ1ZGVkSGVpZ2h0PWMsa2kuY29ybmVyVHlwZT1sLGtpLmdyYW51bGFyaXR5PXAsa2kuc2hhZG93Vm9sdW1lPWQsa2kub2Zmc2V0QXR0cmlidXRlPW09PT0tMT92b2lkIDA6bSxuZXcgR2koa2kpKX07R2kuY29tcHV0ZVJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBuPXQucG9zaXRpb25zLG89dC53aWR0aDt5LmRlZmluZWQoIm9wdGlvbnMucG9zaXRpb25zIixuKSx5LmRlZmluZWQoIm9wdGlvbnMud2lkdGgiLG8pO2xldCByPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQsaT10LmNvcm5lclR5cGU/P2ZuLlJPVU5ERUQ7cmV0dXJuIHJPKG4scixvLGksZSl9O0dpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3Bvc2l0aW9ucyxuPXQuX3dpZHRoLG89dC5fZWxsaXBzb2lkO2U9bk8oZSxvKTtsZXQgcj14bihlLGEuZXF1YWxzRXBzaWxvbik7aWYoci5sZW5ndGg8Mnx8bjw9MClyZXR1cm47bGV0IGk9dC5faGVpZ2h0LHM9dC5fZXh0cnVkZWRIZWlnaHQsZj0hUC5lcXVhbHNFcHNpbG9uKGkscywwLFAuRVBTSUxPTjIpLHU9dC5fdmVydGV4Rm9ybWF0LGM9e2VsbGlwc29pZDpvLHBvc2l0aW9uczpyLHdpZHRoOm4sY29ybmVyVHlwZTp0Ll9jb3JuZXJUeXBlLGdyYW51bGFyaXR5OnQuX2dyYW51bGFyaXR5LHNhdmVBdHRyaWJ1dGVzOiEwfSxsO2lmKGYpYy5oZWlnaHQ9aSxjLmV4dHJ1ZGVkSGVpZ2h0PXMsYy5zaGFkb3dWb2x1bWU9dC5fc2hhZG93Vm9sdW1lLGMub2Zmc2V0QXR0cmlidXRlPXQuX29mZnNldEF0dHJpYnV0ZSxsPXRGKGMsdSk7ZWxzZXtsZXQgbT1xZS5jb21wdXRlUG9zaXRpb25zKGMpO2lmKGw9b08obSx1LG8pLGwuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KGwuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsaSxvKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBfPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLGc9bC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsYj1uZXcgVWludDhBcnJheShnLzMpLmZpbGwoXyk7bC5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmJ9KX19bGV0IHA9bC5hdHRyaWJ1dGVzLGQ9Z3QuZnJvbVZlcnRpY2VzKHAucG9zaXRpb24udmFsdWVzLHZvaWQgMCwzKTtyZXR1cm4gdS5wb3NpdGlvbnx8KGwuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9dm9pZCAwKSxuZXcgQnQoe2F0dHJpYnV0ZXM6cCxpbmRpY2VzOmwuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpkLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07R2kuY3JlYXRlU2hhZG93Vm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10Ll9ncmFudWxhcml0eSxyPXQuX2VsbGlwc29pZCxpPWUobyxyKSxzPW4obyxyKTtyZXR1cm4gbmV3IEdpKHtwb3NpdGlvbnM6dC5fcG9zaXRpb25zLHdpZHRoOnQuX3dpZHRoLGNvcm5lclR5cGU6dC5fY29ybmVyVHlwZSxlbGxpcHNvaWQ6cixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OmksaGVpZ2h0OnMsdmVydGV4Rm9ybWF0OnB0LlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdpLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLl9yZWN0YW5nbGUpfHwodGhpcy5fcmVjdGFuZ2xlPXJPKHRoaXMuX3Bvc2l0aW9ucyx0aGlzLl9lbGxpcHNvaWQsdGhpcy5fd2lkdGgsdGhpcy5fY29ybmVyVHlwZSkpLHRoaXMuX3JlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVyblswLDAsMCwxLDEsMF19fX0pO25fPUdpfSk7dmFyIG9fPXt9O3BlKG9fLHtkZWZhdWx0OigpPT5uRn0pO2Z1bmN0aW9uIGVGKHQsZSl7cmV0dXJuIGgoZSkmJih0PW5fLnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLG5fLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBuRixyXz0kKCgpPT57Y08oKTthdCgpOyR0KCk7bkY9ZUZ9KTtmdW5jdGlvbiByRih0LGUpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXRbbl09ZS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHRbbl0sdFtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gdU8odCxlKXtsZXQgbj1bXSxvPXQucG9zaXRpb25zLHI9dC5jb3JuZXJzLGk9dC5lbmRQb3NpdGlvbnMscz1uZXcgcmUsZix1PTAsYz0wLGwscD0wLGQ7Zm9yKGw9MDtsPG8ubGVuZ3RoO2wrPTIpZD1vW2xdLmxlbmd0aC0zLHUrPWQscCs9ZC8zKjQsYys9b1tsKzFdLmxlbmd0aC0zO2Zvcih1Kz0zLGMrPTMsbD0wO2w8ci5sZW5ndGg7bCsrKXtmPXJbbF07bGV0IEQ9cltsXS5sZWZ0UG9zaXRpb25zO2goRCk/KGQ9RC5sZW5ndGgsdSs9ZCxwKz1kLzMqMik6KGQ9cltsXS5yaWdodFBvc2l0aW9ucy5sZW5ndGgsYys9ZCxwKz1kLzMqMil9bGV0IG09aChpKSxfO20mJihfPWlbMF0ubGVuZ3RoLTMsdSs9XyxjKz1fLF8vPTMscCs9Xyo0KTtsZXQgZz11K2MsYj1uZXcgRmxvYXQ2NEFycmF5KGcpLFQ9MCxPPWctMSxFLHcsQyxNLE4sRixJPV8vMix2PUZ0LmNyZWF0ZVR5cGVkQXJyYXkoZy8zLHArNCksQj0wO2lmKHZbQisrXT1ULzMsdltCKytdPShPLTIpLzMsbSl7bi5wdXNoKFQvMyksRj1hTyxOPWZPO2xldCBEPWlbMF07Zm9yKGw9MDtsPEk7bCsrKUY9YS5mcm9tQXJyYXkoRCwoSS0xLWwpKjMsRiksTj1hLmZyb21BcnJheShELChJK2wpKjMsTikscWUuYWRkQXR0cmlidXRlKGIsTixUKSxxZS5hZGRBdHRyaWJ1dGUoYixGLHZvaWQgMCxPKSx3PVQvMyxNPXcrMSxFPShPLTIpLzMsQz1FLTEsdltCKytdPUUsdltCKytdPUMsdltCKytdPXcsdltCKytdPU0sVCs9MyxPLT0zfWxldCBBPTAsUz1vW0ErK10seD1vW0ErK107Zm9yKGIuc2V0KFMsVCksYi5zZXQoeCxPLXgubGVuZ3RoKzEpLGQ9eC5sZW5ndGgtMyxuLnB1c2goVC8zLChPLTIpLzMpLGw9MDtsPGQ7bCs9Myl3PVQvMyxNPXcrMSxFPShPLTIpLzMsQz1FLTEsdltCKytdPUUsdltCKytdPUMsdltCKytdPXcsdltCKytdPU0sVCs9MyxPLT0zO2ZvcihsPTA7bDxyLmxlbmd0aDtsKyspe2xldCBEO2Y9cltsXTtsZXQgej1mLmxlZnRQb3NpdGlvbnMsaj1mLnJpZ2h0UG9zaXRpb25zLGsscT1vRjtpZihoKHopKXtmb3IoTy09MyxrPUMsbi5wdXNoKE0pLEQ9MDtEPHoubGVuZ3RoLzM7RCsrKXE9YS5mcm9tQXJyYXkoeixEKjMscSksdltCKytdPWstRC0xLHZbQisrXT1rLUQscWUuYWRkQXR0cmlidXRlKGIscSx2b2lkIDAsTyksTy09MztuLnB1c2goay1NYXRoLmZsb29yKHoubGVuZ3RoLzYpKSxlPT09Zm4uQkVWRUxFRCYmbi5wdXNoKChPLTIpLzMrMSksVCs9M31lbHNle2ZvcihUKz0zLGs9TSxuLnB1c2goQyksRD0wO0Q8ai5sZW5ndGgvMztEKyspcT1hLmZyb21BcnJheShqLEQqMyxxKSx2W0IrK109aytELHZbQisrXT1rK0QrMSxxZS5hZGRBdHRyaWJ1dGUoYixxLFQpLFQrPTM7bi5wdXNoKGsrTWF0aC5mbG9vcihqLmxlbmd0aC82KSksZT09PWZuLkJFVkVMRUQmJm4ucHVzaChULzMtMSksTy09M31mb3IoUz1vW0ErK10seD1vW0ErK10sUy5zcGxpY2UoMCwzKSx4LnNwbGljZSh4Lmxlbmd0aC0zLDMpLGIuc2V0KFMsVCksYi5zZXQoeCxPLXgubGVuZ3RoKzEpLGQ9eC5sZW5ndGgtMyxEPTA7RDx4Lmxlbmd0aDtEKz0zKU09VC8zLHc9TS0xLEM9KE8tMikvMyxFPUMrMSx2W0IrK109RSx2W0IrK109Qyx2W0IrK109dyx2W0IrK109TSxUKz0zLE8tPTM7VC09MyxPKz0zLG4ucHVzaChULzMsKE8tMikvMyl9aWYobSl7VCs9MyxPLT0zLEY9YU8sTj1mTztsZXQgRD1pWzFdO2ZvcihsPTA7bDxJO2wrKylGPWEuZnJvbUFycmF5KEQsKF8tbC0xKSozLEYpLE49YS5mcm9tQXJyYXkoRCxsKjMsTikscWUuYWRkQXR0cmlidXRlKGIsRix2b2lkIDAsTykscWUuYWRkQXR0cmlidXRlKGIsTixUKSxNPVQvMyx3PU0tMSxDPShPLTIpLzMsRT1DKzEsdltCKytdPUUsdltCKytdPUMsdltCKytdPXcsdltCKytdPU0sVCs9MyxPLT0zO24ucHVzaChULzMpfWVsc2Ugbi5wdXNoKFQvMywoTy0yKS8zKTtyZXR1cm4gdltCKytdPVQvMyx2W0IrK109KE8tMikvMyxzLnBvc2l0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Yn0pLHthdHRyaWJ1dGVzOnMsaW5kaWNlczp2LHdhbGxJbmRpY2VzOm59fWZ1bmN0aW9uIGlGKHQpe2xldCBlPXQuZWxsaXBzb2lkLG49cWUuY29tcHV0ZVBvc2l0aW9ucyh0KSxvPXVPKG4sdC5jb3JuZXJUeXBlKSxyPW8ud2FsbEluZGljZXMsaT10LmhlaWdodCxzPXQuZXh0cnVkZWRIZWlnaHQsZj1vLmF0dHJpYnV0ZXMsdT1vLmluZGljZXMsYz1mLnBvc2l0aW9uLnZhbHVlcyxsPWMubGVuZ3RoLHA9bmV3IEZsb2F0NjRBcnJheShsKTtwLnNldChjKTtsZXQgZD1uZXcgRmxvYXQ2NEFycmF5KGwqMik7aWYoYz1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoYyxpLGUpLHA9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KHAscyxlKSxkLnNldChjKSxkLnNldChwLGwpLGYucG9zaXRpb24udmFsdWVzPWQsbC89MyxoKHQub2Zmc2V0QXR0cmlidXRlKSl7bGV0IEU9bmV3IFVpbnQ4QXJyYXkobCoyKTtpZih0Lm9mZnNldEF0dHJpYnV0ZT09PWFlLlRPUClFPUUuZmlsbCgxLDAsbCk7ZWxzZXtsZXQgdz10Lm9mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxO0U9RS5maWxsKHcpfWYuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6RX0pfWxldCBtLF89dS5sZW5ndGgsZz1GdC5jcmVhdGVUeXBlZEFycmF5KGQubGVuZ3RoLzMsKF8rci5sZW5ndGgpKjIpO2cuc2V0KHUpO2xldCBiPV87Zm9yKG09MDttPF87bSs9Mil7bGV0IEU9dVttXSx3PXVbbSsxXTtnW2IrK109RStsLGdbYisrXT13K2x9bGV0IFQsTztmb3IobT0wO208ci5sZW5ndGg7bSsrKVQ9clttXSxPPVQrbCxnW2IrK109VCxnW2IrK109TztyZXR1cm57YXR0cmlidXRlczpmLGluZGljZXM6Z319ZnVuY3Rpb24gamYodCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5wb3NpdGlvbnMsbj10LndpZHRoO3kudHlwZU9mLm9iamVjdCgib3B0aW9ucy5wb3NpdGlvbnMiLGUpLHkudHlwZU9mLm51bWJlcigib3B0aW9ucy53aWR0aCIsbik7bGV0IG89dC5oZWlnaHQ/PzAscj10LmV4dHJ1ZGVkSGVpZ2h0Pz9vO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQpLHRoaXMuX3dpZHRoPW4sdGhpcy5faGVpZ2h0PU1hdGgubWF4KG8sciksdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4obyxyKSx0aGlzLl9jb3JuZXJUeXBlPXQuY29ybmVyVHlwZT8/Zm4uUk9VTkRFRCx0aGlzLl9ncmFudWxhcml0eT10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ29ycmlkb3JPdXRsaW5lR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPTErZS5sZW5ndGgqYS5wYWNrZWRMZW5ndGgrWS5wYWNrZWRMZW5ndGgrNn12YXIgYU8sZk8sb0YsbE8seXMsaV8scE89JCgoKT0+e2pyKCk7dmUoKTtMdCgpO1d0KCk7RGUoKTtoYygpO3RfKCk7eWUoKTthdCgpOyR0KCk7WGUoKTtZZSgpO2FuKCk7Rm8oKTskZSgpO0t0KCk7cXIoKTt0bigpO2FPPW5ldyBhLGZPPW5ldyBhLG9GPW5ldyBhO2pmLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkudHlwZU9mLm9iamVjdCgiYXJyYXkiLGUpLG49bj8/MDtsZXQgbz10Ll9wb3NpdGlvbnMscj1vLmxlbmd0aDtlW24rK109cjtmb3IobGV0IGk9MDtpPHI7KytpLG4rPWEucGFja2VkTGVuZ3RoKWEucGFjayhvW2ldLGUsbik7cmV0dXJuIFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxlW24rK109dC5fd2lkdGgsZVtuKytdPXQuX2hlaWdodCxlW24rK109dC5fZXh0cnVkZWRIZWlnaHQsZVtuKytdPXQuX2Nvcm5lclR5cGUsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtsTz1ZLmNsb25lKFkuVU5JVF9TUEhFUkUpLHlzPXtwb3NpdGlvbnM6dm9pZCAwLGVsbGlwc29pZDpsTyx3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxleHRydWRlZEhlaWdodDp2b2lkIDAsY29ybmVyVHlwZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2pmLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJhcnJheSIsdCksZT1lPz8wO2xldCBvPXRbZSsrXSxyPW5ldyBBcnJheShvKTtmb3IobGV0IGQ9MDtkPG87KytkLGUrPWEucGFja2VkTGVuZ3RoKXJbZF09YS51bnBhY2sodCxlKTtsZXQgaT1ZLnVucGFjayh0LGUsbE8pO2UrPVkucGFja2VkTGVuZ3RoO2xldCBzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZSsrXSxsPXRbZSsrXSxwPXRbZV07cmV0dXJuIGgobik/KG4uX3Bvc2l0aW9ucz1yLG4uX2VsbGlwc29pZD1ZLmNsb25lKGksbi5fZWxsaXBzb2lkKSxuLl93aWR0aD1zLG4uX2hlaWdodD1mLG4uX2V4dHJ1ZGVkSGVpZ2h0PXUsbi5fY29ybmVyVHlwZT1jLG4uX2dyYW51bGFyaXR5PWwsbi5fb2Zmc2V0QXR0cmlidXRlPXA9PT0tMT92b2lkIDA6cCxuKTooeXMucG9zaXRpb25zPXIseXMud2lkdGg9cyx5cy5oZWlnaHQ9Zix5cy5leHRydWRlZEhlaWdodD11LHlzLmNvcm5lclR5cGU9Yyx5cy5ncmFudWxhcml0eT1sLHlzLm9mZnNldEF0dHJpYnV0ZT1wPT09LTE/dm9pZCAwOnAsbmV3IGpmKHlzKSl9O2pmLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3Bvc2l0aW9ucyxuPXQuX3dpZHRoLG89dC5fZWxsaXBzb2lkO2U9ckYoZSxvKTtsZXQgcj14bihlLGEuZXF1YWxzRXBzaWxvbik7aWYoci5sZW5ndGg8Mnx8bjw9MClyZXR1cm47bGV0IGk9dC5faGVpZ2h0LHM9dC5fZXh0cnVkZWRIZWlnaHQsZj0hUC5lcXVhbHNFcHNpbG9uKGkscywwLFAuRVBTSUxPTjIpLHU9e2VsbGlwc29pZDpvLHBvc2l0aW9uczpyLHdpZHRoOm4sY29ybmVyVHlwZTp0Ll9jb3JuZXJUeXBlLGdyYW51bGFyaXR5OnQuX2dyYW51bGFyaXR5LHNhdmVBdHRyaWJ1dGVzOiExfSxjO2lmKGYpdS5oZWlnaHQ9aSx1LmV4dHJ1ZGVkSGVpZ2h0PXMsdS5vZmZzZXRBdHRyaWJ1dGU9dC5fb2Zmc2V0QXR0cmlidXRlLGM9aUYodSk7ZWxzZXtsZXQgZD1xZS5jb21wdXRlUG9zaXRpb25zKHUpO2lmKGM9dU8oZCx1LmNvcm5lclR5cGUpLGMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KGMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsaSxvKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBtPWMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLF89dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsZz1uZXcgVWludDhBcnJheShtLzMpLmZpbGwoXyk7Yy5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmd9KX19bGV0IGw9Yy5hdHRyaWJ1dGVzLHA9Z3QuZnJvbVZlcnRpY2VzKGwucG9zaXRpb24udmFsdWVzLHZvaWQgMCwzKTtyZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOmwsaW5kaWNlczpjLmluZGljZXMscHJpbWl0aXZlVHlwZTpEdC5MSU5FUyxib3VuZGluZ1NwaGVyZTpwLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07aV89amZ9KTt2YXIgc189e307cGUoc18se2RlZmF1bHQ6KCk9PmNGfSk7ZnVuY3Rpb24gc0YodCxlKXtyZXR1cm4gaChlKSYmKHQ9aV8udW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksaV8uY3JlYXRlR2VvbWV0cnkodCl9dmFyIGNGLGNfPSQoKCk9PntwTygpO2F0KCk7JHQoKTtjRj1zRn0pO3ZhciBkTyxnZCxhXz0kKCgpPT57S3QoKTtkTz17fTtkTy5jb21wdXRlUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9dCouNSxzPS1pLGY9bytvLHU9cj8yKmY6ZixjPW5ldyBGbG9hdDY0QXJyYXkodSozKSxsLHA9MCxkPTAsbT1yP2YqMzowLF89cj8oZitvKSozOm8qMztmb3IobD0wO2w8bztsKyspe2xldCBnPWwvbypQLlRXT19QSSxiPU1hdGguY29zKGcpLFQ9TWF0aC5zaW4oZyksTz1iKm4sRT1UKm4sdz1iKmUsQz1UKmU7Y1tkK21dPU8sY1tkK20rMV09RSxjW2QrbSsyXT1zLGNbZCtfXT13LGNbZCtfKzFdPUMsY1tkK18rMl09aSxkKz0zLHImJihjW3ArK109TyxjW3ArK109RSxjW3ArK109cyxjW3ArK109dyxjW3ArK109QyxjW3ArK109aSl9cmV0dXJuIGN9O2dkPWRPfSk7ZnVuY3Rpb24gVmkodCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5sZW5ndGgsbj10LnRvcFJhZGl1cyxvPXQuYm90dG9tUmFkaXVzLHI9dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQsaT10LnNsaWNlcz8/MTI4O2lmKCFoKGUpKXRocm93IG5ldyBMKCJvcHRpb25zLmxlbmd0aCBtdXN0IGJlIGRlZmluZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEwoIm9wdGlvbnMudG9wUmFkaXVzIG11c3QgYmUgZGVmaW5lZC4iKTtpZighaChvKSl0aHJvdyBuZXcgTCgib3B0aW9ucy5ib3R0b21SYWRpdXMgbXVzdCBiZSBkZWZpbmVkLiIpO2lmKGk8Myl0aHJvdyBuZXcgTCgib3B0aW9ucy5zbGljZXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMy4iKTtpZihoKHQub2Zmc2V0QXR0cmlidXRlKSYmdC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApdGhyb3cgbmV3IEwoIkdlb21ldHJ5T2Zmc2V0QXR0cmlidXRlLlRPUCBpcyBub3QgYSBzdXBwb3J0ZWQgb3B0aW9ucy5vZmZzZXRBdHRyaWJ1dGUgZm9yIHRoaXMgZ2VvbWV0cnkuIik7dGhpcy5fbGVuZ3RoPWUsdGhpcy5fdG9wUmFkaXVzPW4sdGhpcy5fYm90dG9tUmFkaXVzPW8sdGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKHIpLHRoaXMuX3NsaWNlcz1pLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDeWxpbmRlckdlb21ldHJ5In12YXIgZl8sYUYsZkYsdUYsbEYsbU8sVGEsdV8sSGYsbF89JCgoKT0+e3ZlKCk7VWUoKTtMdCgpO0RlKCk7YV8oKTt5ZSgpO2F0KCk7anQoKTtYZSgpO1llKCk7YW4oKTtGbygpOyRlKCk7S3QoKTt0bigpO1JvKCk7Zl89bmV3IEosYUY9bmV3IGEsZkY9bmV3IGEsdUY9bmV3IGEsbEY9bmV3IGE7VmkucGFja2VkTGVuZ3RoPXB0LnBhY2tlZExlbmd0aCs1O1ZpLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJhcnJheSBpcyByZXF1aXJlZCIpO3JldHVybiBuPW4/PzAscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2xlbmd0aCxlW24rK109dC5fdG9wUmFkaXVzLGVbbisrXT10Ll9ib3R0b21SYWRpdXMsZVtuKytdPXQuX3NsaWNlcyxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07bU89bmV3IHB0LFRhPXt2ZXJ0ZXhGb3JtYXQ6bU8sbGVuZ3RoOnZvaWQgMCx0b3BSYWRpdXM6dm9pZCAwLGJvdHRvbVJhZGl1czp2b2lkIDAsc2xpY2VzOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtWaS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9ZT8/MDtsZXQgbz1wdC51bnBhY2sodCxlLG1PKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IHI9dFtlKytdLGk9dFtlKytdLHM9dFtlKytdLGY9dFtlKytdLHU9dFtlXTtyZXR1cm4gaChuKT8obi5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKG8sbi5fdmVydGV4Rm9ybWF0KSxuLl9sZW5ndGg9cixuLl90b3BSYWRpdXM9aSxuLl9ib3R0b21SYWRpdXM9cyxuLl9zbGljZXM9ZixuLl9vZmZzZXRBdHRyaWJ1dGU9dT09PS0xP3ZvaWQgMDp1LG4pOihUYS5sZW5ndGg9cixUYS50b3BSYWRpdXM9aSxUYS5ib3R0b21SYWRpdXM9cyxUYS5zbGljZXM9ZixUYS5vZmZzZXRBdHRyaWJ1dGU9dT09PS0xP3ZvaWQgMDp1LG5ldyBWaShUYSkpfTtWaS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9sZW5ndGgsbj10Ll90b3BSYWRpdXMsbz10Ll9ib3R0b21SYWRpdXMscj10Ll92ZXJ0ZXhGb3JtYXQsaT10Ll9zbGljZXM7aWYoZTw9MHx8bjwwfHxvPDB8fG49PT0wJiZvPT09MClyZXR1cm47bGV0IHM9aStpLGY9aStzLHU9cytzLGM9Z2QuY29tcHV0ZVBvc2l0aW9ucyhlLG4sbyxpLCEwKSxsPXIuc3Q/bmV3IEZsb2F0MzJBcnJheSh1KjIpOnZvaWQgMCxwPXIubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkodSozKTp2b2lkIDAsZD1yLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheSh1KjMpOnZvaWQgMCxtPXIuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkodSozKTp2b2lkIDAsXyxnPXIubm9ybWFsfHxyLnRhbmdlbnR8fHIuYml0YW5nZW50O2lmKGcpe2xldCBOPXIudGFuZ2VudHx8ci5iaXRhbmdlbnQsRj0wLEk9MCx2PTAsQj1NYXRoLmF0YW4yKG8tbixlKSxBPWFGO0Euej1NYXRoLnNpbihCKTtsZXQgUz1NYXRoLmNvcyhCKSx4PXVGLEQ9ZkY7Zm9yKF89MDtfPGk7XysrKXtsZXQgej1fL2kqUC5UV09fUEksaj1TKk1hdGguY29zKHopLGs9UypNYXRoLnNpbih6KTtnJiYoQS54PWosQS55PWssTiYmKHg9YS5ub3JtYWxpemUoYS5jcm9zcyhhLlVOSVRfWixBLHgpLHgpKSxyLm5vcm1hbCYmKHBbRisrXT1BLngscFtGKytdPUEueSxwW0YrK109QS56LHBbRisrXT1BLngscFtGKytdPUEueSxwW0YrK109QS56KSxyLnRhbmdlbnQmJihkW0krK109eC54LGRbSSsrXT14LnksZFtJKytdPXgueixkW0krK109eC54LGRbSSsrXT14LnksZFtJKytdPXgueiksci5iaXRhbmdlbnQmJihEPWEubm9ybWFsaXplKGEuY3Jvc3MoQSx4LEQpLEQpLG1bdisrXT1ELngsbVt2KytdPUQueSxtW3YrK109RC56LG1bdisrXT1ELngsbVt2KytdPUQueSxtW3YrK109RC56KSl9Zm9yKF89MDtfPGk7XysrKXIubm9ybWFsJiYocFtGKytdPTAscFtGKytdPTAscFtGKytdPS0xKSxyLnRhbmdlbnQmJihkW0krK109MSxkW0krK109MCxkW0krK109MCksci5iaXRhbmdlbnQmJihtW3YrK109MCxtW3YrK109LTEsbVt2KytdPTApO2ZvcihfPTA7XzxpO18rKylyLm5vcm1hbCYmKHBbRisrXT0wLHBbRisrXT0wLHBbRisrXT0xKSxyLnRhbmdlbnQmJihkW0krK109MSxkW0krK109MCxkW0krK109MCksci5iaXRhbmdlbnQmJihtW3YrK109MCxtW3YrK109MSxtW3YrK109MCl9bGV0IGI9MTIqaS0xMixUPUZ0LmNyZWF0ZVR5cGVkQXJyYXkodSxiKSxPPTAsRT0wO2ZvcihfPTA7XzxpLTE7XysrKVRbTysrXT1FLFRbTysrXT1FKzIsVFtPKytdPUUrMyxUW08rK109RSxUW08rK109RSszLFRbTysrXT1FKzEsRSs9Mjtmb3IoVFtPKytdPXMtMixUW08rK109MCxUW08rK109MSxUW08rK109cy0yLFRbTysrXT0xLFRbTysrXT1zLTEsXz0xO188aS0xO18rKylUW08rK109cytfKzEsVFtPKytdPXMrXyxUW08rK109cztmb3IoXz0xO188aS0xO18rKylUW08rK109ZixUW08rK109ZitfLFRbTysrXT1mK18rMTtsZXQgdz0wO2lmKHIuc3Qpe2xldCBOPU1hdGgubWF4KG4sbyk7Zm9yKF89MDtfPHU7XysrKXtsZXQgRj1hLmZyb21BcnJheShjLF8qMyxsRik7bFt3KytdPShGLngrTikvKDIqTiksbFt3KytdPShGLnkrTikvKDIqTil9fWxldCBDPW5ldyByZTtyLnBvc2l0aW9uJiYoQy5wb3NpdGlvbj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KSksci5ub3JtYWwmJihDLm5vcm1hbD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pKSxyLnRhbmdlbnQmJihDLnRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmR9KSksci5iaXRhbmdlbnQmJihDLmJpdGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pKSxyLnN0JiYoQy5zdD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6bH0pKSxmXy54PWUqLjUsZl8ueT1NYXRoLm1heChvLG4pO2xldCBNPW5ldyBndChhLlpFUk8sSi5tYWduaXR1ZGUoZl8pKTtpZihoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2U9Yy5sZW5ndGg7bGV0IE49dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsRj1uZXcgVWludDhBcnJheShlLzMpLmZpbGwoTik7Qy5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpGfSl9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpDLGluZGljZXM6VCxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpNLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07VmkuZ2V0VW5pdEN5bGluZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGgodV8pfHwodV89VmkuY3JlYXRlR2VvbWV0cnkobmV3IFZpKHt0b3BSYWRpdXM6MSxib3R0b21SYWRpdXM6MSxsZW5ndGg6MSx2ZXJ0ZXhGb3JtYXQ6cHQuUE9TSVRJT05fT05MWX0pKSksdV99O0hmPVZpfSk7dmFyIHBfPXt9O3BlKHBfLHtkZWZhdWx0OigpPT5kRn0pO2Z1bmN0aW9uIHBGKHQsZSl7cmV0dXJuIGgoZSkmJih0PUhmLnVucGFjayh0LGUpKSxIZi5jcmVhdGVHZW9tZXRyeSh0KX12YXIgZEYsZF89JCgoKT0+e2xfKCk7YXQoKTtkRj1wRn0pO2Z1bmN0aW9uIHdhKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBlPXQubGVuZ3RoLG49dC50b3BSYWRpdXMsbz10LmJvdHRvbVJhZGl1cyxyPXQuc2xpY2VzPz8xMjgsaT1NYXRoLm1heCh0Lm51bWJlck9mVmVydGljYWxMaW5lcz8/MTYsMCk7aWYoeS50eXBlT2YubnVtYmVyKCJvcHRpb25zLnBvc2l0aW9ucyIsZSkseS50eXBlT2YubnVtYmVyKCJvcHRpb25zLnRvcFJhZGl1cyIsbikseS50eXBlT2YubnVtYmVyKCJvcHRpb25zLmJvdHRvbVJhZGl1cyIsbykseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIm9wdGlvbnMuc2xpY2VzIixyLDMpLGgodC5vZmZzZXRBdHRyaWJ1dGUpJiZ0Lm9mZnNldEF0dHJpYnV0ZT09PWFlLlRPUCl0aHJvdyBuZXcgTCgiR2VvbWV0cnlPZmZzZXRBdHRyaWJ1dGUuVE9QIGlzIG5vdCBhIHN1cHBvcnRlZCBvcHRpb25zLm9mZnNldEF0dHJpYnV0ZSBmb3IgdGhpcyBnZW9tZXRyeS4iKTt0aGlzLl9sZW5ndGg9ZSx0aGlzLl90b3BSYWRpdXM9bix0aGlzLl9ib3R0b21SYWRpdXM9byx0aGlzLl9zbGljZXM9cix0aGlzLl9udW1iZXJPZlZlcnRpY2FsTGluZXM9aSx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ3lsaW5kZXJPdXRsaW5lR2VvbWV0cnkifXZhciBtXyx5YyxoXyxoTz0kKCgpPT57dmUoKTtVZSgpO0x0KCk7V3QoKTtEZSgpO2FfKCk7eWUoKTthdCgpO2p0KCk7WGUoKTtZZSgpO2FuKCk7Rm8oKTskZSgpO3RuKCk7bV89bmV3IEo7d2EucGFja2VkTGVuZ3RoPTY7d2EucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxlW24rK109dC5fbGVuZ3RoLGVbbisrXT10Ll90b3BSYWRpdXMsZVtuKytdPXQuX2JvdHRvbVJhZGl1cyxlW24rK109dC5fc2xpY2VzLGVbbisrXT10Ll9udW1iZXJPZlZlcnRpY2FsTGluZXMsZVtuXT10Ll9vZmZzZXRBdHRyaWJ1dGU/Py0xLGV9O3ljPXtsZW5ndGg6dm9pZCAwLHRvcFJhZGl1czp2b2lkIDAsYm90dG9tUmFkaXVzOnZvaWQgMCxzbGljZXM6dm9pZCAwLG51bWJlck9mVmVydGljYWxMaW5lczp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07d2EudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89dFtlKytdLHI9dFtlKytdLGk9dFtlKytdLHM9dFtlKytdLGY9dFtlKytdLHU9dFtlXTtyZXR1cm4gaChuKT8obi5fbGVuZ3RoPW8sbi5fdG9wUmFkaXVzPXIsbi5fYm90dG9tUmFkaXVzPWksbi5fc2xpY2VzPXMsbi5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzPWYsbi5fb2Zmc2V0QXR0cmlidXRlPXU9PT0tMT92b2lkIDA6dSxuKTooeWMubGVuZ3RoPW8seWMudG9wUmFkaXVzPXIseWMuYm90dG9tUmFkaXVzPWkseWMuc2xpY2VzPXMseWMubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPWYseWMub2Zmc2V0QXR0cmlidXRlPXU9PT0tMT92b2lkIDA6dSxuZXcgd2EoeWMpKX07d2EuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fbGVuZ3RoLG49dC5fdG9wUmFkaXVzLG89dC5fYm90dG9tUmFkaXVzLHI9dC5fc2xpY2VzLGk9dC5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzO2lmKGU8PTB8fG48MHx8bzwwfHxuPT09MCYmbz09PTApcmV0dXJuO2xldCBzPXIqMixmPWdkLmNvbXB1dGVQb3NpdGlvbnMoZSxuLG8sciwhMSksdT1yKjIsYztpZihpPjApe2xldCBnPU1hdGgubWluKGkscik7Yz1NYXRoLnJvdW5kKHIvZyksdSs9Z31sZXQgbD1GdC5jcmVhdGVUeXBlZEFycmF5KHMsdSoyKSxwPTAsZDtmb3IoZD0wO2Q8ci0xO2QrKylsW3ArK109ZCxsW3ArK109ZCsxLGxbcCsrXT1kK3IsbFtwKytdPWQrMStyO2lmKGxbcCsrXT1yLTEsbFtwKytdPTAsbFtwKytdPXIrci0xLGxbcCsrXT1yLGk+MClmb3IoZD0wO2Q8cjtkKz1jKWxbcCsrXT1kLGxbcCsrXT1kK3I7bGV0IG09bmV3IHJlO20ucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpmfSksbV8ueD1lKi41LG1fLnk9TWF0aC5tYXgobyxuKTtsZXQgXz1uZXcgZ3QoYS5aRVJPLEoubWFnbml0dWRlKG1fKSk7aWYoaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtlPWYubGVuZ3RoO2xldCBnPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLGI9bmV3IFVpbnQ4QXJyYXkoZS8zKS5maWxsKGcpO20uYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6Yn0pfXJldHVybiBuZXcgQnQoe2F0dHJpYnV0ZXM6bSxpbmRpY2VzOmwscHJpbWl0aXZlVHlwZTpEdC5MSU5FUyxib3VuZGluZ1NwaGVyZTpfLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07aF89d2F9KTt2YXIgX189e307cGUoX18se2RlZmF1bHQ6KCk9PmhGfSk7ZnVuY3Rpb24gbUYodCxlKXtyZXR1cm4gaChlKSYmKHQ9aF8udW5wYWNrKHQsZSkpLGhfLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBoRix5Xz0kKCgpPT57aE8oKTthdCgpO2hGPW1GfSk7dmFyIGdfPXt9O3BlKGdfLHtkZWZhdWx0OigpPT55Rn0pO2Z1bmN0aW9uIF9GKHQsZSl7cmV0dXJuIGgoZSkmJih0PVZyLnVucGFjayh0LGUpKSx0Ll9jZW50ZXI9YS5jbG9uZSh0Ll9jZW50ZXIpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksVnIuY3JlYXRlR2VvbWV0cnkodCl9dmFyIHlGLEFfPSQoKCk9PntMdCgpO2F0KCk7QTAoKTskdCgpO3lGPV9GfSk7dmFyIGJfPXt9O3BlKGJfLHtkZWZhdWx0OigpPT5BRn0pO2Z1bmN0aW9uIGdGKHQsZSl7cmV0dXJuIGgoZSkmJih0PXpyLnVucGFjayh0LGUpKSx0Ll9jZW50ZXI9YS5jbG9uZSh0Ll9jZW50ZXIpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksenIuY3JlYXRlR2VvbWV0cnkodCl9dmFyIEFGLFRfPSQoKCk9PntMdCgpO2F0KCk7TzAoKTskdCgpO0FGPWdGfSk7ZnVuY3Rpb24gemkodCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5yYWRpaT8/UkYsbj10LmlubmVyUmFkaWk/P2Usbz10Lm1pbmltdW1DbG9jaz8/MCxyPXQubWF4aW11bUNsb2NrPz9QLlRXT19QSSxpPXQubWluaW11bUNvbmU/PzAscz10Lm1heGltdW1Db25lPz9QLlBJLGY9TWF0aC5yb3VuZCh0LnN0YWNrUGFydGl0aW9ucz8/NjQpLHU9TWF0aC5yb3VuZCh0LnNsaWNlUGFydGl0aW9ucz8/NjQpLGM9dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQ7aWYodTwzKXRocm93IG5ldyBMKCJvcHRpb25zLnNsaWNlUGFydGl0aW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIHRocmVlLiIpO2lmKGY8Myl0aHJvdyBuZXcgTCgib3B0aW9ucy5zdGFja1BhcnRpdGlvbnMgY2Fubm90IGJlIGxlc3MgdGhhbiB0aHJlZS4iKTt0aGlzLl9yYWRpaT1hLmNsb25lKGUpLHRoaXMuX2lubmVyUmFkaWk9YS5jbG9uZShuKSx0aGlzLl9taW5pbXVtQ2xvY2s9byx0aGlzLl9tYXhpbXVtQ2xvY2s9cix0aGlzLl9taW5pbXVtQ29uZT1pLHRoaXMuX21heGltdW1Db25lPXMsdGhpcy5fc3RhY2tQYXJ0aXRpb25zPWYsdGhpcy5fc2xpY2VQYXJ0aXRpb25zPXUsdGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKGMpLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNvaWRHZW9tZXRyeSJ9dmFyIGJGLFRGLHdGLE9GLEVGLFJGLF9PLHlPLGdPLEFPLGJPLGdzLHdfLHNyLEFkPSQoKCk9Pnt2ZSgpO1VlKCk7THQoKTtEZSgpO3llKCk7YXQoKTtqdCgpOyR0KCk7WGUoKTtZZSgpO2FuKCk7Rm8oKTskZSgpO0t0KCk7dG4oKTtSbygpO2JGPW5ldyBhLFRGPW5ldyBhLHdGPW5ldyBhLE9GPW5ldyBhLEVGPW5ldyBhLFJGPW5ldyBhKDEsMSwxKSxfTz1NYXRoLmNvcyx5Tz1NYXRoLnNpbjt6aS5wYWNrZWRMZW5ndGg9MiphLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrNzt6aS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgTCgidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighaChlKSl0aHJvdyBuZXcgTCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtyZXR1cm4gbj1uPz8wLGEucGFjayh0Ll9yYWRpaSxlLG4pLG4rPWEucGFja2VkTGVuZ3RoLGEucGFjayh0Ll9pbm5lclJhZGlpLGUsbiksbis9YS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX21pbmltdW1DbG9jayxlW24rK109dC5fbWF4aW11bUNsb2NrLGVbbisrXT10Ll9taW5pbXVtQ29uZSxlW24rK109dC5fbWF4aW11bUNvbmUsZVtuKytdPXQuX3N0YWNrUGFydGl0aW9ucyxlW24rK109dC5fc2xpY2VQYXJ0aXRpb25zLGVbbl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtnTz1uZXcgYSxBTz1uZXcgYSxiTz1uZXcgcHQsZ3M9e3JhZGlpOmdPLGlubmVyUmFkaWk6QU8sdmVydGV4Rm9ybWF0OmJPLG1pbmltdW1DbG9jazp2b2lkIDAsbWF4aW11bUNsb2NrOnZvaWQgMCxtaW5pbXVtQ29uZTp2b2lkIDAsbWF4aW11bUNvbmU6dm9pZCAwLHN0YWNrUGFydGl0aW9uczp2b2lkIDAsc2xpY2VQYXJ0aXRpb25zOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTt6aS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9ZT8/MDtsZXQgbz1hLnVucGFjayh0LGUsZ08pO2UrPWEucGFja2VkTGVuZ3RoO2xldCByPWEudW5wYWNrKHQsZSxBTyk7ZSs9YS5wYWNrZWRMZW5ndGg7bGV0IGk9cHQudW5wYWNrKHQsZSxiTyk7ZSs9cHQucGFja2VkTGVuZ3RoO2xldCBzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZSsrXSxsPXRbZSsrXSxwPXRbZSsrXSxkPXRbZV07cmV0dXJuIGgobik/KG4uX3JhZGlpPWEuY2xvbmUobyxuLl9yYWRpaSksbi5faW5uZXJSYWRpaT1hLmNsb25lKHIsbi5faW5uZXJSYWRpaSksbi5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKGksbi5fdmVydGV4Rm9ybWF0KSxuLl9taW5pbXVtQ2xvY2s9cyxuLl9tYXhpbXVtQ2xvY2s9ZixuLl9taW5pbXVtQ29uZT11LG4uX21heGltdW1Db25lPWMsbi5fc3RhY2tQYXJ0aXRpb25zPWwsbi5fc2xpY2VQYXJ0aXRpb25zPXAsbi5fb2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuKTooZ3MubWluaW11bUNsb2NrPXMsZ3MubWF4aW11bUNsb2NrPWYsZ3MubWluaW11bUNvbmU9dSxncy5tYXhpbXVtQ29uZT1jLGdzLnN0YWNrUGFydGl0aW9ucz1sLGdzLnNsaWNlUGFydGl0aW9ucz1wLGdzLm9mZnNldEF0dHJpYnV0ZT1kPT09LTE/dm9pZCAwOmQsbmV3IHppKGdzKSl9O3ppLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3JhZGlpO2lmKGUueDw9MHx8ZS55PD0wfHxlLno8PTApcmV0dXJuO2xldCBuPXQuX2lubmVyUmFkaWk7aWYobi54PD0wfHxuLnk8PTB8fG4uejw9MClyZXR1cm47bGV0IG89dC5fbWluaW11bUNsb2NrLHI9dC5fbWF4aW11bUNsb2NrLGk9dC5fbWluaW11bUNvbmUscz10Ll9tYXhpbXVtQ29uZSxmPXQuX3ZlcnRleEZvcm1hdCx1PXQuX3NsaWNlUGFydGl0aW9ucysxLGM9dC5fc3RhY2tQYXJ0aXRpb25zKzE7dT1NYXRoLnJvdW5kKHUqTWF0aC5hYnMoci1vKS9QLlRXT19QSSksYz1NYXRoLnJvdW5kKGMqTWF0aC5hYnMocy1pKS9QLlBJKSx1PDImJih1PTIpLGM8MiYmKGM9Mik7bGV0IGwscCxkPTAsbT1baV0sXz1bb107Zm9yKGw9MDtsPGM7bCsrKW0ucHVzaChpK2wqKHMtaSkvKGMtMSkpO2ZvcihtLnB1c2gocykscD0wO3A8dTtwKyspXy5wdXNoKG8rcCooci1vKS8odS0xKSk7Xy5wdXNoKHIpO2xldCBnPW0ubGVuZ3RoLGI9Xy5sZW5ndGgsVD0wLE89MSxFPW4ueCE9PWUueHx8bi55IT09ZS55fHxuLnohPT1lLnosdz0hMSxDPSExLE09ITE7RSYmKE89MixpPjAmJih3PSEwLFQrPXUtMSksczxNYXRoLlBJJiYoQz0hMCxUKz11LTEpLChyLW8pJVAuVFdPX1BJPyhNPSEwLFQrPShjLTEpKjIrMSk6VCs9MSk7bGV0IE49YipnKk8sRj1uZXcgRmxvYXQ2NEFycmF5KE4qMyksST1uZXcgQXJyYXkoTikuZmlsbCghMSksdj1uZXcgQXJyYXkoTikuZmlsbCghMSksQj11KmMqTyxBPTYqKEIrVCsxLSh1K2MpKk8pLFM9RnQuY3JlYXRlVHlwZWRBcnJheShCLEEpLHg9Zi5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShOKjMpOnZvaWQgMCxEPWYudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KE4qMyk6dm9pZCAwLHo9Zi5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShOKjMpOnZvaWQgMCxqPWYuc3Q/bmV3IEZsb2F0MzJBcnJheShOKjIpOnZvaWQgMCxrPW5ldyBBcnJheShnKSxxPW5ldyBBcnJheShnKTtmb3IobD0wO2w8ZztsKyspa1tsXT15TyhtW2xdKSxxW2xdPV9PKG1bbF0pO2xldCBXPW5ldyBBcnJheShiKSxSPW5ldyBBcnJheShiKTtmb3IocD0wO3A8YjtwKyspUltwXT1fTyhfW3BdKSxXW3BdPXlPKF9bcF0pO2ZvcihsPTA7bDxnO2wrKylmb3IocD0wO3A8YjtwKyspRltkKytdPWUueCprW2xdKlJbcF0sRltkKytdPWUueSprW2xdKldbcF0sRltkKytdPWUueipxW2xdO2xldCBudD1OLzI7aWYoRSlmb3IobD0wO2w8ZztsKyspZm9yKHA9MDtwPGI7cCsrKUZbZCsrXT1uLngqa1tsXSpSW3BdLEZbZCsrXT1uLnkqa1tsXSpXW3BdLEZbZCsrXT1uLnoqcVtsXSxJW250XT0hMCxsPjAmJmwhPT1nLTEmJnAhPT0wJiZwIT09Yi0xJiYodltudF09ITApLG50Kys7ZD0wO2xldCBjdCxsdDtmb3IobD0xO2w8Zy0yO2wrKylmb3IoY3Q9bCpiLGx0PShsKzEpKmIscD0xO3A8Yi0yO3ArKylTW2QrK109bHQrcCxTW2QrK109bHQrcCsxLFNbZCsrXT1jdCtwKzEsU1tkKytdPWx0K3AsU1tkKytdPWN0K3ArMSxTW2QrK109Y3QrcDtpZihFKXtsZXQgbGU9ZypiO2ZvcihsPTE7bDxnLTI7bCsrKWZvcihjdD1sZStsKmIsbHQ9bGUrKGwrMSkqYixwPTE7cDxiLTI7cCsrKVNbZCsrXT1sdCtwLFNbZCsrXT1jdCtwLFNbZCsrXT1jdCtwKzEsU1tkKytdPWx0K3AsU1tkKytdPWN0K3ArMSxTW2QrK109bHQrcCsxfWxldCBfdCxvdDtpZihFKXtpZih3KWZvcihvdD1nKmIsbD0xO2w8Yi0yO2wrKylTW2QrK109bCxTW2QrK109bCsxLFNbZCsrXT1vdCtsKzEsU1tkKytdPWwsU1tkKytdPW90K2wrMSxTW2QrK109b3QrbDtpZihDKWZvcihfdD1nKmItYixvdD1nKmIqTy1iLGw9MTtsPGItMjtsKyspU1tkKytdPV90K2wrMSxTW2QrK109X3QrbCxTW2QrK109b3QrbCxTW2QrK109X3QrbCsxLFNbZCsrXT1vdCtsLFNbZCsrXT1vdCtsKzF9aWYoTSl7Zm9yKGw9MTtsPGctMjtsKyspb3Q9YipnK2IqbCxfdD1iKmwsU1tkKytdPW90LFNbZCsrXT1fdCtiLFNbZCsrXT1fdCxTW2QrK109b3QsU1tkKytdPW90K2IsU1tkKytdPV90K2I7Zm9yKGw9MTtsPGctMjtsKyspb3Q9YipnK2IqKGwrMSktMSxfdD1iKihsKzEpLTEsU1tkKytdPV90K2IsU1tkKytdPW90LFNbZCsrXT1fdCxTW2QrK109X3QrYixTW2QrK109b3QrYixTW2QrK109b3R9bGV0IHh0PW5ldyByZTtmLnBvc2l0aW9uJiYoeHQucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpGfSkpO2xldCB5dD0wLFN0PTAsZHQ9MCxmdD0wLEl0PU4vMixWdCxkZT1ZLmZyb21DYXJ0ZXNpYW4zKGUpLHNlPVkuZnJvbUNhcnRlc2lhbjMobik7aWYoZi5zdHx8Zi5ub3JtYWx8fGYudGFuZ2VudHx8Zi5iaXRhbmdlbnQpe2ZvcihsPTA7bDxOO2wrKyl7VnQ9SVtsXT9zZTpkZTtsZXQgbGU9YS5mcm9tQXJyYXkoRixsKjMsYkYpLGZlPVZ0Lmdlb2RldGljU3VyZmFjZU5vcm1hbChsZSxURik7aWYodltsXSYmYS5uZWdhdGUoZmUsZmUpLGYuc3Qpe2xldCBadD1KLm5lZ2F0ZShmZSxFRik7alt5dCsrXT1NYXRoLmF0YW4yKFp0LnksWnQueCkvUC5UV09fUEkrLjUsalt5dCsrXT1NYXRoLmFzaW4oZmUueikvTWF0aC5QSSsuNX1pZihmLm5vcm1hbCYmKHhbU3QrK109ZmUueCx4W1N0KytdPWZlLnkseFtTdCsrXT1mZS56KSxmLnRhbmdlbnR8fGYuYml0YW5nZW50KXtsZXQgWnQ9d0YsUXQ9MCxOZTtpZihJW2xdJiYoUXQ9SXQpLCF3JiZsPj1RdCYmbDxRdCtiKjI/TmU9YS5VTklUX1g6TmU9YS5VTklUX1osYS5jcm9zcyhOZSxmZSxadCksYS5ub3JtYWxpemUoWnQsWnQpLGYudGFuZ2VudCYmKERbZHQrK109WnQueCxEW2R0KytdPVp0LnksRFtkdCsrXT1adC56KSxmLmJpdGFuZ2VudCl7bGV0IGdlPWEuY3Jvc3MoZmUsWnQsT0YpO2Eubm9ybWFsaXplKGdlLGdlKSx6W2Z0KytdPWdlLngseltmdCsrXT1nZS55LHpbZnQrK109Z2Uuen19fWYuc3QmJih4dC5zdD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6an0pKSxmLm5vcm1hbCYmKHh0Lm5vcm1hbD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6eH0pKSxmLnRhbmdlbnQmJih4dC50YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpEfSkpLGYuYml0YW5nZW50JiYoeHQuYml0YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp6fSkpfWlmKGgodC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGxlPUYubGVuZ3RoLGZlPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLFp0PW5ldyBVaW50OEFycmF5KGxlLzMpLmZpbGwoZmUpO3h0LmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOlp0fSl9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczp4dCxpbmRpY2VzOlMscHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6Z3QuZnJvbUVsbGlwc29pZChkZSksb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTt6aS5nZXRVbml0RWxsaXBzb2lkPWZ1bmN0aW9uKCl7cmV0dXJuIGgod18pfHwod189emkuY3JlYXRlR2VvbWV0cnkobmV3IHppKHtyYWRpaTpuZXcgYSgxLDEsMSksdmVydGV4Rm9ybWF0OnB0LlBPU0lUSU9OX09OTFl9KSkpLHdffTtzcj16aX0pO3ZhciBPXz17fTtwZShPXyx7ZGVmYXVsdDooKT0+Q0Z9KTtmdW5jdGlvbiBTRih0LGUpe3JldHVybiBoKGUpJiYodD1zci51bnBhY2sodCxlKSksc3IuY3JlYXRlR2VvbWV0cnkodCl9dmFyIENGLEVfPSQoKCk9PnthdCgpO0FkKCk7Q0Y9U0Z9KTtmdW5jdGlvbiBPYSh0KXt0PXQ/P050LkVNUFRZX09CSkVDVDtsZXQgZT10LnJhZGlpPz94RixuPXQuaW5uZXJSYWRpaT8/ZSxvPXQubWluaW11bUNsb2NrPz8wLHI9dC5tYXhpbXVtQ2xvY2s/P1AuVFdPX1BJLGk9dC5taW5pbXVtQ29uZT8/MCxzPXQubWF4aW11bUNvbmU/P1AuUEksZj1NYXRoLnJvdW5kKHQuc3RhY2tQYXJ0aXRpb25zPz8xMCksdT1NYXRoLnJvdW5kKHQuc2xpY2VQYXJ0aXRpb25zPz84KSxjPU1hdGgucm91bmQodC5zdWJkaXZpc2lvbnM/PzEyOCk7aWYoZjwxKXRocm93IG5ldyBMKCJvcHRpb25zLnN0YWNrUGFydGl0aW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIDEiKTtpZih1PDApdGhyb3cgbmV3IEwoIm9wdGlvbnMuc2xpY2VQYXJ0aXRpb25zIGNhbm5vdCBiZSBsZXNzIHRoYW4gMCIpO2lmKGM8MCl0aHJvdyBuZXcgTCgib3B0aW9ucy5zdWJkaXZpc2lvbnMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4iKTtpZihoKHQub2Zmc2V0QXR0cmlidXRlKSYmdC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApdGhyb3cgbmV3IEwoIkdlb21ldHJ5T2Zmc2V0QXR0cmlidXRlLlRPUCBpcyBub3QgYSBzdXBwb3J0ZWQgb3B0aW9ucy5vZmZzZXRBdHRyaWJ1dGUgZm9yIHRoaXMgZ2VvbWV0cnkuIik7dGhpcy5fcmFkaWk9YS5jbG9uZShlKSx0aGlzLl9pbm5lclJhZGlpPWEuY2xvbmUobiksdGhpcy5fbWluaW11bUNsb2NrPW8sdGhpcy5fbWF4aW11bUNsb2NrPXIsdGhpcy5fbWluaW11bUNvbmU9aSx0aGlzLl9tYXhpbXVtQ29uZT1zLHRoaXMuX3N0YWNrUGFydGl0aW9ucz1mLHRoaXMuX3NsaWNlUGFydGl0aW9ucz11LHRoaXMuX3N1YmRpdmlzaW9ucz1jLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNvaWRPdXRsaW5lR2VvbWV0cnkifXZhciB4RixiZCxUZCxUTyx3TyxqaSxXcixSXz0kKCgpPT57dmUoKTtMdCgpO0RlKCk7eWUoKTthdCgpO2p0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTtGbygpOyRlKCk7S3QoKTt0bigpO3hGPW5ldyBhKDEsMSwxKSxiZD1NYXRoLmNvcyxUZD1NYXRoLnNpbjtPYS5wYWNrZWRMZW5ndGg9MiphLnBhY2tlZExlbmd0aCs4O09hLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJhcnJheSBpcyByZXF1aXJlZCIpO3JldHVybiBuPW4/PzAsYS5wYWNrKHQuX3JhZGlpLGUsbiksbis9YS5wYWNrZWRMZW5ndGgsYS5wYWNrKHQuX2lubmVyUmFkaWksZSxuKSxuKz1hLnBhY2tlZExlbmd0aCxlW24rK109dC5fbWluaW11bUNsb2NrLGVbbisrXT10Ll9tYXhpbXVtQ2xvY2ssZVtuKytdPXQuX21pbmltdW1Db25lLGVbbisrXT10Ll9tYXhpbXVtQ29uZSxlW24rK109dC5fc3RhY2tQYXJ0aXRpb25zLGVbbisrXT10Ll9zbGljZVBhcnRpdGlvbnMsZVtuKytdPXQuX3N1YmRpdmlzaW9ucyxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07VE89bmV3IGEsd089bmV3IGEsamk9e3JhZGlpOlRPLGlubmVyUmFkaWk6d08sbWluaW11bUNsb2NrOnZvaWQgMCxtYXhpbXVtQ2xvY2s6dm9pZCAwLG1pbmltdW1Db25lOnZvaWQgMCxtYXhpbXVtQ29uZTp2b2lkIDAsc3RhY2tQYXJ0aXRpb25zOnZvaWQgMCxzbGljZVBhcnRpdGlvbnM6dm9pZCAwLHN1YmRpdmlzaW9uczp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07T2EudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPWU/PzA7bGV0IG89YS51bnBhY2sodCxlLFRPKTtlKz1hLnBhY2tlZExlbmd0aDtsZXQgcj1hLnVucGFjayh0LGUsd08pO2UrPWEucGFja2VkTGVuZ3RoO2xldCBpPXRbZSsrXSxzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZSsrXSxsPXRbZSsrXSxwPXRbZSsrXSxkPXRbZV07cmV0dXJuIGgobik/KG4uX3JhZGlpPWEuY2xvbmUobyxuLl9yYWRpaSksbi5faW5uZXJSYWRpaT1hLmNsb25lKHIsbi5faW5uZXJSYWRpaSksbi5fbWluaW11bUNsb2NrPWksbi5fbWF4aW11bUNsb2NrPXMsbi5fbWluaW11bUNvbmU9ZixuLl9tYXhpbXVtQ29uZT11LG4uX3N0YWNrUGFydGl0aW9ucz1jLG4uX3NsaWNlUGFydGl0aW9ucz1sLG4uX3N1YmRpdmlzaW9ucz1wLG4uX29mZnNldEF0dHJpYnV0ZT1kPT09LTE/dm9pZCAwOmQsbik6KGppLm1pbmltdW1DbG9jaz1pLGppLm1heGltdW1DbG9jaz1zLGppLm1pbmltdW1Db25lPWYsamkubWF4aW11bUNvbmU9dSxqaS5zdGFja1BhcnRpdGlvbnM9YyxqaS5zbGljZVBhcnRpdGlvbnM9bCxqaS5zdWJkaXZpc2lvbnM9cCxqaS5vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG5ldyBPYShqaSkpfTtPYS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9yYWRpaTtpZihlLng8PTB8fGUueTw9MHx8ZS56PD0wKXJldHVybjtsZXQgbj10Ll9pbm5lclJhZGlpO2lmKG4ueDw9MHx8bi55PD0wfHxuLno8PTApcmV0dXJuO2xldCBvPXQuX21pbmltdW1DbG9jayxyPXQuX21heGltdW1DbG9jayxpPXQuX21pbmltdW1Db25lLHM9dC5fbWF4aW11bUNvbmUsZj10Ll9zdWJkaXZpc2lvbnMsdT1ZLmZyb21DYXJ0ZXNpYW4zKGUpLGM9dC5fc2xpY2VQYXJ0aXRpb25zKzEsbD10Ll9zdGFja1BhcnRpdGlvbnMrMTtjPU1hdGgucm91bmQoYypNYXRoLmFicyhyLW8pL1AuVFdPX1BJKSxsPU1hdGgucm91bmQobCpNYXRoLmFicyhzLWkpL1AuUEkpLGM8MiYmKGM9MiksbDwyJiYobD0yKTtsZXQgcD0wLGQ9MSxtPW4ueCE9PWUueHx8bi55IT09ZS55fHxuLnohPT1lLnosXz0hMSxnPSExO20mJihkPTIsaT4wJiYoXz0hMCxwKz1jKSxzPE1hdGguUEkmJihnPSEwLHArPWMpKTtsZXQgYj1mKmQqKGwrYyksVD1uZXcgRmxvYXQ2NEFycmF5KGIqMyksTz0yKihiK3AtKGMrbCkqZCksRT1GdC5jcmVhdGVUeXBlZEFycmF5KGIsTyksdyxDLE0sTixGPTAsST1uZXcgQXJyYXkobCksdj1uZXcgQXJyYXkobCk7Zm9yKHc9MDt3PGw7dysrKU49aSt3KihzLWkpLyhsLTEpLElbd109VGQoTiksdlt3XT1iZChOKTtsZXQgQj1uZXcgQXJyYXkoZiksQT1uZXcgQXJyYXkoZik7Zm9yKHc9MDt3PGY7dysrKU09byt3KihyLW8pLyhmLTEpLEJbd109VGQoTSksQVt3XT1iZChNKTtmb3Iodz0wO3c8bDt3KyspZm9yKEM9MDtDPGY7QysrKVRbRisrXT1lLngqSVt3XSpBW0NdLFRbRisrXT1lLnkqSVt3XSpCW0NdLFRbRisrXT1lLnoqdlt3XTtpZihtKWZvcih3PTA7dzxsO3crKylmb3IoQz0wO0M8ZjtDKyspVFtGKytdPW4ueCpJW3ddKkFbQ10sVFtGKytdPW4ueSpJW3ddKkJbQ10sVFtGKytdPW4ueip2W3ddO2ZvcihJLmxlbmd0aD1mLHYubGVuZ3RoPWYsdz0wO3c8Zjt3KyspTj1pK3cqKHMtaSkvKGYtMSksSVt3XT1UZChOKSx2W3ddPWJkKE4pO2ZvcihCLmxlbmd0aD1jLEEubGVuZ3RoPWMsdz0wO3c8Yzt3KyspTT1vK3cqKHItbykvKGMtMSksQlt3XT1UZChNKSxBW3ddPWJkKE0pO2Zvcih3PTA7dzxmO3crKylmb3IoQz0wO0M8YztDKyspVFtGKytdPWUueCpJW3ddKkFbQ10sVFtGKytdPWUueSpJW3ddKkJbQ10sVFtGKytdPWUueip2W3ddO2lmKG0pZm9yKHc9MDt3PGY7dysrKWZvcihDPTA7QzxjO0MrKylUW0YrK109bi54Kklbd10qQVtDXSxUW0YrK109bi55Kklbd10qQltDXSxUW0YrK109bi56KnZbd107Zm9yKEY9MCx3PTA7dzxsKmQ7dysrKXtsZXQgRD13KmY7Zm9yKEM9MDtDPGYtMTtDKyspRVtGKytdPUQrQyxFW0YrK109RCtDKzF9bGV0IFM9bCpmKmQ7Zm9yKHc9MDt3PGM7dysrKWZvcihDPTA7QzxmLTE7QysrKUVbRisrXT1TK3crQypjLEVbRisrXT1TK3crKEMrMSkqYztpZihtKWZvcihTPWwqZipkK2MqZix3PTA7dzxjO3crKylmb3IoQz0wO0M8Zi0xO0MrKylFW0YrK109Uyt3K0MqYyxFW0YrK109Uyt3KyhDKzEpKmM7aWYobSl7bGV0IEQ9bCpmKmQsej1EK2YqYztpZihfKWZvcih3PTA7dzxjO3crKylFW0YrK109RCt3LEVbRisrXT16K3c7aWYoZylmb3IoRCs9ZipjLWMseis9ZipjLWMsdz0wO3c8Yzt3KyspRVtGKytdPUQrdyxFW0YrK109eit3fWxldCB4PW5ldyByZSh7cG9zaXRpb246bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpUfSl9KTtpZihoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBEPVQubGVuZ3RoLHo9dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsaj1uZXcgVWludDhBcnJheShELzMpLmZpbGwoeik7eC5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpqfSl9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczp4LGluZGljZXM6RSxwcmltaXRpdmVUeXBlOkR0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOmd0LmZyb21FbGxpcHNvaWQodSksb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtXcj1PYX0pO3ZhciBTXz17fTtwZShTXyx7ZGVmYXVsdDooKT0+TUZ9KTtmdW5jdGlvbiBQRih0LGUpe3JldHVybiBoKHQuYnVmZmVyLGUpJiYodD1Xci51bnBhY2sodCxlKSksV3IuY3JlYXRlR2VvbWV0cnkodCl9dmFyIE1GLENfPSQoKCk9PnthdCgpO1JfKCk7TUY9UEZ9KTtmdW5jdGlvbiBPcih0KXt0aGlzLnBsYW5lcz10Pz9bXX12YXIgcWYsQXMsTkYsT08sd2QseF89JCgoKT0+e0x0KCk7aHIoKTthdCgpO2p0KCk7R3MoKTtmcygpO3FmPVtuZXcgYSxuZXcgYSxuZXcgYV07YS5jbG9uZShhLlVOSVRfWCxxZlswXSk7YS5jbG9uZShhLlVOSVRfWSxxZlsxXSk7YS5jbG9uZShhLlVOSVRfWixxZlsyXSk7QXM9bmV3IGEsTkY9bmV3IGEsT089bmV3IG9uKG5ldyBhKDEsMCwwKSwwKTtPci5mcm9tQm91bmRpbmdTcGhlcmU9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiYm91bmRpbmdTcGhlcmUgaXMgcmVxdWlyZWQuIik7aChlKXx8KGU9bmV3IE9yKTtsZXQgbj1xZi5sZW5ndGgsbz1lLnBsYW5lcztvLmxlbmd0aD0yKm47bGV0IHI9dC5jZW50ZXIsaT10LnJhZGl1cyxzPTA7Zm9yKGxldCBmPTA7ZjxuOysrZil7bGV0IHU9cWZbZl0sYz1vW3NdLGw9b1tzKzFdO2goYyl8fChjPW9bc109bmV3IG1lKSxoKGwpfHwobD1vW3MrMV09bmV3IG1lKSxhLm11bHRpcGx5QnlTY2FsYXIodSwtaSxBcyksYS5hZGQocixBcyxBcyksYy54PXUueCxjLnk9dS55LGMuej11LnosYy53PS1hLmRvdCh1LEFzKSxhLm11bHRpcGx5QnlTY2FsYXIodSxpLEFzKSxhLmFkZChyLEFzLEFzKSxsLng9LXUueCxsLnk9LXUueSxsLno9LXUueixsLnc9LWEuZG90KGEubmVnYXRlKHUsTkYpLEFzKSxzKz0yfXJldHVybiBlfTtPci5wcm90b3R5cGUuY29tcHV0ZVZpc2liaWxpdHk9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEwoImJvdW5kaW5nVm9sdW1lIGlzIHJlcXVpcmVkLiIpO2xldCBlPXRoaXMucGxhbmVzLG49ITE7Zm9yKGxldCBvPTAscj1lLmxlbmd0aDtvPHI7KytvKXtsZXQgaT10LmludGVyc2VjdFBsYW5lKG9uLmZyb21DYXJ0ZXNpYW40KGVbb10sT08pKTtpZihpPT09U24uT1VUU0lERSlyZXR1cm4gU24uT1VUU0lERTtpPT09U24uSU5URVJTRUNUSU5HJiYobj0hMCl9cmV0dXJuIG4/U24uSU5URVJTRUNUSU5HOlNuLklOU0lERX07T3IucHJvdG90eXBlLmNvbXB1dGVWaXNpYmlsaXR5V2l0aFBsYW5lTWFzaz1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJib3VuZGluZ1ZvbHVtZSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgTCgicGFyZW50UGxhbmVNYXNrIGlzIHJlcXVpcmVkLiIpO2lmKGU9PT1Pci5NQVNLX09VVFNJREV8fGU9PT1Pci5NQVNLX0lOU0lERSlyZXR1cm4gZTtsZXQgbj1Pci5NQVNLX0lOU0lERSxvPXRoaXMucGxhbmVzO2ZvcihsZXQgcj0wLGk9by5sZW5ndGg7cjxpOysrcil7bGV0IHM9cjwzMT8xPDxyOjA7aWYocjwzMSYmIShlJnMpKWNvbnRpbnVlO2xldCBmPXQuaW50ZXJzZWN0UGxhbmUob24uZnJvbUNhcnRlc2lhbjQob1tyXSxPTykpO2lmKGY9PT1Tbi5PVVRTSURFKXJldHVybiBPci5NQVNLX09VVFNJREU7Zj09PVNuLklOVEVSU0VDVElORyYmKG58PXMpfXJldHVybiBufTtPci5NQVNLX09VVFNJREU9NDI5NDk2NzI5NTtPci5NQVNLX0lOU0lERT0wO09yLk1BU0tfSU5ERVRFUk1JTkFURT0yMTQ3NDgzNjQ3O3dkPU9yfSk7ZnVuY3Rpb24gbGkodCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1QsdGhpcy5sZWZ0PXQubGVmdCx0aGlzLl9sZWZ0PXZvaWQgMCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy5fcmlnaHQ9dm9pZCAwLHRoaXMudG9wPXQudG9wLHRoaXMuX3RvcD12b2lkIDAsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5fYm90dG9tPXZvaWQgMCx0aGlzLm5lYXI9dC5uZWFyPz8xLHRoaXMuX25lYXI9dGhpcy5uZWFyLHRoaXMuZmFyPXQuZmFyPz81ZTgsdGhpcy5fZmFyPXRoaXMuZmFyLHRoaXMuX2N1bGxpbmdWb2x1bWU9bmV3IHdkLHRoaXMuX29ydGhvZ3JhcGhpY01hdHJpeD1uZXcgaXR9ZnVuY3Rpb24gRU8odCl7aWYoIWgodC5yaWdodCl8fCFoKHQubGVmdCl8fCFoKHQudG9wKXx8IWgodC5ib3R0b20pfHwhaCh0Lm5lYXIpfHwhaCh0LmZhcikpdGhyb3cgbmV3IEwoInJpZ2h0LCBsZWZ0LCB0b3AsIGJvdHRvbSwgbmVhciwgb3IgZmFyIHBhcmFtZXRlcnMgYXJlIG5vdCBzZXQuIik7aWYodC50b3AhPT10Ll90b3B8fHQuYm90dG9tIT09dC5fYm90dG9tfHx0LmxlZnQhPT10Ll9sZWZ0fHx0LnJpZ2h0IT09dC5fcmlnaHR8fHQubmVhciE9PXQuX25lYXJ8fHQuZmFyIT09dC5fZmFyKXtpZih0LmxlZnQ+dC5yaWdodCl0aHJvdyBuZXcgTCgicmlnaHQgbXVzdCBiZSBncmVhdGVyIHRoYW4gbGVmdC4iKTtpZih0LmJvdHRvbT50LnRvcCl0aHJvdyBuZXcgTCgidG9wIG11c3QgYmUgZ3JlYXRlciB0aGFuIGJvdHRvbS4iKTtpZih0Lm5lYXI8PTB8fHQubmVhcj50LmZhcil0aHJvdyBuZXcgTCgibmVhciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBsZXNzIHRoYW4gZmFyLiIpO3QuX2xlZnQ9dC5sZWZ0LHQuX3JpZ2h0PXQucmlnaHQsdC5fdG9wPXQudG9wLHQuX2JvdHRvbT10LmJvdHRvbSx0Ll9uZWFyPXQubmVhcix0Ll9mYXI9dC5mYXIsdC5fb3J0aG9ncmFwaGljTWF0cml4PWl0LmNvbXB1dGVPcnRob2dyYXBoaWNPZmZDZW50ZXIodC5sZWZ0LHQucmlnaHQsdC5ib3R0b20sdC50b3AsdC5uZWFyLHQuZmFyLHQuX29ydGhvZ3JhcGhpY01hdHJpeCl9fXZhciBJRix2RixGRixQXyxSTyxTTz0kKCgpPT57THQoKTtocigpO3hfKCk7eWUoKTthdCgpO2p0KCk7S3QoKTtVbigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxpLnByb3RvdHlwZSx7cHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEVPKHRoaXMpLHRoaXMuX29ydGhvZ3JhcGhpY01hdHJpeH19fSk7SUY9bmV3IGEsdkY9bmV3IGEsRkY9bmV3IGEsUF89bmV3IGE7bGkucHJvdG90eXBlLmNvbXB1dGVDdWxsaW5nVm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgTCgicG9zaXRpb24gaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoImRpcmVjdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgTCgidXAgaXMgcmVxdWlyZWQuIik7bGV0IG89dGhpcy5fY3VsbGluZ1ZvbHVtZS5wbGFuZXMscj10aGlzLnRvcCxpPXRoaXMuYm90dG9tLHM9dGhpcy5yaWdodCxmPXRoaXMubGVmdCx1PXRoaXMubmVhcixjPXRoaXMuZmFyLGw9YS5jcm9zcyhlLG4sSUYpO2Eubm9ybWFsaXplKGwsbCk7bGV0IHA9dkY7YS5tdWx0aXBseUJ5U2NhbGFyKGUsdSxwKSxhLmFkZCh0LHAscCk7bGV0IGQ9RkY7YS5tdWx0aXBseUJ5U2NhbGFyKGwsZixkKSxhLmFkZChwLGQsZCk7bGV0IG09b1swXTtyZXR1cm4gaChtKXx8KG09b1swXT1uZXcgbWUpLG0ueD1sLngsbS55PWwueSxtLno9bC56LG0udz0tYS5kb3QobCxkKSxhLm11bHRpcGx5QnlTY2FsYXIobCxzLGQpLGEuYWRkKHAsZCxkKSxtPW9bMV0saChtKXx8KG09b1sxXT1uZXcgbWUpLG0ueD0tbC54LG0ueT0tbC55LG0uej0tbC56LG0udz0tYS5kb3QoYS5uZWdhdGUobCxQXyksZCksYS5tdWx0aXBseUJ5U2NhbGFyKG4saSxkKSxhLmFkZChwLGQsZCksbT1vWzJdLGgobSl8fChtPW9bMl09bmV3IG1lKSxtLng9bi54LG0ueT1uLnksbS56PW4ueixtLnc9LWEuZG90KG4sZCksYS5tdWx0aXBseUJ5U2NhbGFyKG4scixkKSxhLmFkZChwLGQsZCksbT1vWzNdLGgobSl8fChtPW9bM109bmV3IG1lKSxtLng9LW4ueCxtLnk9LW4ueSxtLno9LW4ueixtLnc9LWEuZG90KGEubmVnYXRlKG4sUF8pLGQpLG09b1s0XSxoKG0pfHwobT1vWzRdPW5ldyBtZSksbS54PWUueCxtLnk9ZS55LG0uej1lLnosbS53PS1hLmRvdChlLHApLGEubXVsdGlwbHlCeVNjYWxhcihlLGMsZCksYS5hZGQodCxkLGQpLG09b1s1XSxoKG0pfHwobT1vWzVdPW5ldyBtZSksbS54PS1lLngsbS55PS1lLnksbS56PS1lLnosbS53PS1hLmRvdChhLm5lZ2F0ZShlLFBfKSxkKSx0aGlzLl9jdWxsaW5nVm9sdW1lfTtsaS5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7aWYoRU8odGhpcyksIWgodCl8fCFoKGUpKXRocm93IG5ldyBMKCJCb3RoIGRyYXdpbmdCdWZmZXJXaWR0aCBhbmQgZHJhd2luZ0J1ZmZlckhlaWdodCBhcmUgcmVxdWlyZWQuIik7aWYodDw9MCl0aHJvdyBuZXcgTCgiZHJhd2luZ0J1ZmZlcldpZHRoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYoZTw9MCl0aHJvdyBuZXcgTCgiZHJhd2luZ0J1ZmZlckhlaWdodCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpO2lmKCFoKG4pKXRocm93IG5ldyBMKCJkaXN0YW5jZSBpcyByZXF1aXJlZC4iKTtpZighaChvKSl0aHJvdyBuZXcgTCgicGl4ZWxSYXRpbyBpcyByZXF1aXJlZC4iKTtpZihvPD0wKXRocm93IG5ldyBMKCJwaXhlbFJhdGlvIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYoIWgocikpdGhyb3cgbmV3IEwoIkEgcmVzdWx0IG9iamVjdCBpcyByZXF1aXJlZC4iKTtsZXQgaT10aGlzLnJpZ2h0LXRoaXMubGVmdCxzPXRoaXMudG9wLXRoaXMuYm90dG9tLGY9byppL3QsdT1vKnMvZTtyZXR1cm4gci54PWYsci55PXUscn07bGkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpfHwodD1uZXcgbGkpLHQubGVmdD10aGlzLmxlZnQsdC5yaWdodD10aGlzLnJpZ2h0LHQudG9wPXRoaXMudG9wLHQuYm90dG9tPXRoaXMuYm90dG9tLHQubmVhcj10aGlzLm5lYXIsdC5mYXI9dGhpcy5mYXIsdC5fbGVmdD12b2lkIDAsdC5fcmlnaHQ9dm9pZCAwLHQuX3RvcD12b2lkIDAsdC5fYm90dG9tPXZvaWQgMCx0Ll9uZWFyPXZvaWQgMCx0Ll9mYXI9dm9pZCAwLHR9O2xpLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGgodCkmJnQgaW5zdGFuY2VvZiBsaSYmdGhpcy5yaWdodD09PXQucmlnaHQmJnRoaXMubGVmdD09PXQubGVmdCYmdGhpcy50b3A9PT10LnRvcCYmdGhpcy5ib3R0b209PT10LmJvdHRvbSYmdGhpcy5uZWFyPT09dC5uZWFyJiZ0aGlzLmZhcj09PXQuZmFyfTtsaS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9PT10aGlzfHxoKHQpJiZ0IGluc3RhbmNlb2YgbGkmJlAuZXF1YWxzRXBzaWxvbih0aGlzLnJpZ2h0LHQucmlnaHQsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMubGVmdCx0LmxlZnQsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMudG9wLHQudG9wLGUsbikmJlAuZXF1YWxzRXBzaWxvbih0aGlzLmJvdHRvbSx0LmJvdHRvbSxlLG4pJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5uZWFyLHQubmVhcixlLG4pJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5mYXIsdC5mYXIsZSxuKX07Uk89bGl9KTtmdW5jdGlvbiB0cih0KXt0PXQ/P050LkVNUFRZX09CSkVDVCx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtPW5ldyBSTyx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5fd2lkdGg9dm9pZCAwLHRoaXMuYXNwZWN0UmF0aW89dC5hc3BlY3RSYXRpbyx0aGlzLl9hc3BlY3RSYXRpbz12b2lkIDAsdGhpcy5uZWFyPXQubmVhcj8/MSx0aGlzLl9uZWFyPXRoaXMubmVhcix0aGlzLmZhcj10LmZhcj8/NWU4LHRoaXMuX2Zhcj10aGlzLmZhcn1mdW5jdGlvbiBicyh0KXtpZighaCh0LndpZHRoKXx8IWgodC5hc3BlY3RSYXRpbyl8fCFoKHQubmVhcil8fCFoKHQuZmFyKSl0aHJvdyBuZXcgTCgid2lkdGgsIGFzcGVjdFJhdGlvLCBuZWFyLCBvciBmYXIgcGFyYW1ldGVycyBhcmUgbm90IHNldC4iKTtsZXQgZT10Ll9vZmZDZW50ZXJGcnVzdHVtO2lmKHQud2lkdGghPT10Ll93aWR0aHx8dC5hc3BlY3RSYXRpbyE9PXQuX2FzcGVjdFJhdGlvfHx0Lm5lYXIhPT10Ll9uZWFyfHx0LmZhciE9PXQuX2Zhcil7aWYodC5hc3BlY3RSYXRpbzwwKXRocm93IG5ldyBMKCJhc3BlY3RSYXRpbyBtdXN0IGJlIHBvc2l0aXZlLiIpO2lmKHQubmVhcjwwfHx0Lm5lYXI+dC5mYXIpdGhyb3cgbmV3IEwoIm5lYXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyBhbmQgbGVzcyB0aGFuIGZhci4iKTt0Ll9hc3BlY3RSYXRpbz10LmFzcGVjdFJhdGlvLHQuX3dpZHRoPXQud2lkdGgsdC5fbmVhcj10Lm5lYXIsdC5fZmFyPXQuZmFyO2xldCBuPTEvdC5hc3BlY3RSYXRpbztlLnJpZ2h0PXQud2lkdGgqLjUsZS5sZWZ0PS1lLnJpZ2h0LGUudG9wPW4qZS5yaWdodCxlLmJvdHRvbT0tZS50b3AsZS5uZWFyPXQubmVhcixlLmZhcj10LmZhcn19dmFyIHhvLE1fPSQoKCk9PntXdCgpO3llKCk7YXQoKTtqdCgpO0t0KCk7U08oKTt0ci5wYWNrZWRMZW5ndGg9NDt0ci5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGVbbisrXT10LndpZHRoLGVbbisrXT10LmFzcGVjdFJhdGlvLGVbbisrXT10Lm5lYXIsZVtuXT10LmZhcixlfTt0ci51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IHRyKSxuLndpZHRoPXRbZSsrXSxuLmFzcGVjdFJhdGlvPXRbZSsrXSxuLm5lYXI9dFtlKytdLG4uZmFyPXRbZV0sbn07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModHIucHJvdG90eXBlLHtwcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYnModGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5wcm9qZWN0aW9uTWF0cml4fX0sb2ZmQ2VudGVyRnJ1c3R1bTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGJzKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW19fX0pO3RyLnByb3RvdHlwZS5jb21wdXRlQ3VsbGluZ1ZvbHVtZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGJzKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uY29tcHV0ZUN1bGxpbmdWb2x1bWUodCxlLG4pfTt0ci5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIGJzKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uZ2V0UGl4ZWxEaW1lbnNpb25zKHQsZSxuLG8scil9O3RyLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KXx8KHQ9bmV3IHRyKSx0LmFzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sdC53aWR0aD10aGlzLndpZHRoLHQubmVhcj10aGlzLm5lYXIsdC5mYXI9dGhpcy5mYXIsdC5fYXNwZWN0UmF0aW89dm9pZCAwLHQuX3dpZHRoPXZvaWQgMCx0Ll9uZWFyPXZvaWQgMCx0Ll9mYXI9dm9pZCAwLHRoaXMuX29mZkNlbnRlckZydXN0dW0uY2xvbmUodC5fb2ZmQ2VudGVyRnJ1c3R1bSksdH07dHIucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4haCh0KXx8ISh0IGluc3RhbmNlb2YgdHIpPyExOihicyh0aGlzKSxicyh0KSx0aGlzLndpZHRoPT09dC53aWR0aCYmdGhpcy5hc3BlY3RSYXRpbz09PXQuYXNwZWN0UmF0aW8mJnRoaXMuX29mZkNlbnRlckZydXN0dW0uZXF1YWxzKHQuX29mZkNlbnRlckZydXN0dW0pKX07dHIucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiFoKHQpfHwhKHQgaW5zdGFuY2VvZiB0cik/ITE6KGJzKHRoaXMpLGJzKHQpLFAuZXF1YWxzRXBzaWxvbih0aGlzLndpZHRoLHQud2lkdGgsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMuYXNwZWN0UmF0aW8sdC5hc3BlY3RSYXRpbyxlLG4pJiZ0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmVxdWFsc0Vwc2lsb24odC5fb2ZmQ2VudGVyRnJ1c3R1bSxlLG4pKX07eG89dHJ9KTtmdW5jdGlvbiBwaSh0KXt0PXQ/P050LkVNUFRZX09CSkVDVCx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMuX2xlZnQ9dm9pZCAwLHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLl9yaWdodD12b2lkIDAsdGhpcy50b3A9dC50b3AsdGhpcy5fdG9wPXZvaWQgMCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLl9ib3R0b209dm9pZCAwLHRoaXMubmVhcj10Lm5lYXI/PzEsdGhpcy5fbmVhcj10aGlzLm5lYXIsdGhpcy5mYXI9dC5mYXI/PzVlOCx0aGlzLl9mYXI9dGhpcy5mYXIsdGhpcy5fY3VsbGluZ1ZvbHVtZT1uZXcgd2QsdGhpcy5fcGVyc3BlY3RpdmVNYXRyaXg9bmV3IGl0LHRoaXMuX2luZmluaXRlUGVyc3BlY3RpdmU9bmV3IGl0fWZ1bmN0aW9uIE5fKHQpe2lmKCFoKHQucmlnaHQpfHwhaCh0LmxlZnQpfHwhaCh0LnRvcCl8fCFoKHQuYm90dG9tKXx8IWgodC5uZWFyKXx8IWgodC5mYXIpKXRocm93IG5ldyBMKCJyaWdodCwgbGVmdCwgdG9wLCBib3R0b20sIG5lYXIsIG9yIGZhciBwYXJhbWV0ZXJzIGFyZSBub3Qgc2V0LiIpO2xldHt0b3A6ZSxib3R0b206bixyaWdodDpvLGxlZnQ6cixuZWFyOmksZmFyOnN9PXQ7aWYoZSE9PXQuX3RvcHx8biE9PXQuX2JvdHRvbXx8ciE9PXQuX2xlZnR8fG8hPT10Ll9yaWdodHx8aSE9PXQuX25lYXJ8fHMhPT10Ll9mYXIpe2lmKHQubmVhcjw9MHx8dC5uZWFyPnQuZmFyKXRocm93IG5ldyBMKCJuZWFyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGxlc3MgdGhhbiBmYXIuIik7dC5fbGVmdD1yLHQuX3JpZ2h0PW8sdC5fdG9wPWUsdC5fYm90dG9tPW4sdC5fbmVhcj1pLHQuX2Zhcj1zLHQuX3BlcnNwZWN0aXZlTWF0cml4PWl0LmNvbXB1dGVQZXJzcGVjdGl2ZU9mZkNlbnRlcihyLG8sbixlLGkscyx0Ll9wZXJzcGVjdGl2ZU1hdHJpeCksdC5faW5maW5pdGVQZXJzcGVjdGl2ZT1pdC5jb21wdXRlSW5maW5pdGVQZXJzcGVjdGl2ZU9mZkNlbnRlcihyLG8sbixlLGksdC5faW5maW5pdGVQZXJzcGVjdGl2ZSl9fXZhciBMRixERixCRixVRixDTyx4Tz0kKCgpPT57THQoKTtocigpO3hfKCk7eWUoKTthdCgpO2p0KCk7S3QoKTtVbigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHBpLnByb3RvdHlwZSx7cHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5fKHRoaXMpLHRoaXMuX3BlcnNwZWN0aXZlTWF0cml4fX0saW5maW5pdGVQcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTl8odGhpcyksdGhpcy5faW5maW5pdGVQZXJzcGVjdGl2ZX19fSk7TEY9bmV3IGEsREY9bmV3IGEsQkY9bmV3IGEsVUY9bmV3IGE7cGkucHJvdG90eXBlLmNvbXB1dGVDdWxsaW5nVm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgTCgicG9zaXRpb24gaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoImRpcmVjdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgTCgidXAgaXMgcmVxdWlyZWQuIik7bGV0IG89dGhpcy5fY3VsbGluZ1ZvbHVtZS5wbGFuZXMscj10aGlzLnRvcCxpPXRoaXMuYm90dG9tLHM9dGhpcy5yaWdodCxmPXRoaXMubGVmdCx1PXRoaXMubmVhcixjPXRoaXMuZmFyLGw9YS5jcm9zcyhlLG4sTEYpLHA9REY7YS5tdWx0aXBseUJ5U2NhbGFyKGUsdSxwKSxhLmFkZCh0LHAscCk7bGV0IGQ9QkY7YS5tdWx0aXBseUJ5U2NhbGFyKGUsYyxkKSxhLmFkZCh0LGQsZCk7bGV0IG09VUY7YS5tdWx0aXBseUJ5U2NhbGFyKGwsZixtKSxhLmFkZChwLG0sbSksYS5zdWJ0cmFjdChtLHQsbSksYS5ub3JtYWxpemUobSxtKSxhLmNyb3NzKG0sbixtKSxhLm5vcm1hbGl6ZShtLG0pO2xldCBfPW9bMF07cmV0dXJuIGgoXyl8fChfPW9bMF09bmV3IG1lKSxfLng9bS54LF8ueT1tLnksXy56PW0ueixfLnc9LWEuZG90KG0sdCksYS5tdWx0aXBseUJ5U2NhbGFyKGwscyxtKSxhLmFkZChwLG0sbSksYS5zdWJ0cmFjdChtLHQsbSksYS5jcm9zcyhuLG0sbSksYS5ub3JtYWxpemUobSxtKSxfPW9bMV0saChfKXx8KF89b1sxXT1uZXcgbWUpLF8ueD1tLngsXy55PW0ueSxfLno9bS56LF8udz0tYS5kb3QobSx0KSxhLm11bHRpcGx5QnlTY2FsYXIobixpLG0pLGEuYWRkKHAsbSxtKSxhLnN1YnRyYWN0KG0sdCxtKSxhLmNyb3NzKGwsbSxtKSxhLm5vcm1hbGl6ZShtLG0pLF89b1syXSxoKF8pfHwoXz1vWzJdPW5ldyBtZSksXy54PW0ueCxfLnk9bS55LF8uej1tLnosXy53PS1hLmRvdChtLHQpLGEubXVsdGlwbHlCeVNjYWxhcihuLHIsbSksYS5hZGQocCxtLG0pLGEuc3VidHJhY3QobSx0LG0pLGEuY3Jvc3MobSxsLG0pLGEubm9ybWFsaXplKG0sbSksXz1vWzNdLGgoXyl8fChfPW9bM109bmV3IG1lKSxfLng9bS54LF8ueT1tLnksXy56PW0ueixfLnc9LWEuZG90KG0sdCksXz1vWzRdLGgoXyl8fChfPW9bNF09bmV3IG1lKSxfLng9ZS54LF8ueT1lLnksXy56PWUueixfLnc9LWEuZG90KGUscCksYS5uZWdhdGUoZSxtKSxfPW9bNV0saChfKXx8KF89b1s1XT1uZXcgbWUpLF8ueD1tLngsXy55PW0ueSxfLno9bS56LF8udz0tYS5kb3QobSxkKSx0aGlzLl9jdWxsaW5nVm9sdW1lfTtwaS5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7aWYoTl8odGhpcyksIWgodCl8fCFoKGUpKXRocm93IG5ldyBMKCJCb3RoIGRyYXdpbmdCdWZmZXJXaWR0aCBhbmQgZHJhd2luZ0J1ZmZlckhlaWdodCBhcmUgcmVxdWlyZWQuIik7aWYodDw9MCl0aHJvdyBuZXcgTCgiZHJhd2luZ0J1ZmZlcldpZHRoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYoZTw9MCl0aHJvdyBuZXcgTCgiZHJhd2luZ0J1ZmZlckhlaWdodCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpO2lmKCFoKG4pKXRocm93IG5ldyBMKCJkaXN0YW5jZSBpcyByZXF1aXJlZC4iKTtpZighaChvKSl0aHJvdyBuZXcgTCgicGl4ZWxSYXRpbyBpcyByZXF1aXJlZCIpO2lmKG88PTApdGhyb3cgbmV3IEwoInBpeGVsUmF0aW8gbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtpZighaChyKSl0aHJvdyBuZXcgTCgiQSByZXN1bHQgb2JqZWN0IGlzIHJlcXVpcmVkLiIpO2xldCBpPTEvdGhpcy5uZWFyLHM9dGhpcy50b3AqaSxmPTIqbypuKnMvZTtzPXRoaXMucmlnaHQqaTtsZXQgdT0yKm8qbipzL3Q7cmV0dXJuIHIueD11LHIueT1mLHJ9O3BpLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KXx8KHQ9bmV3IHBpKSx0LnJpZ2h0PXRoaXMucmlnaHQsdC5sZWZ0PXRoaXMubGVmdCx0LnRvcD10aGlzLnRvcCx0LmJvdHRvbT10aGlzLmJvdHRvbSx0Lm5lYXI9dGhpcy5uZWFyLHQuZmFyPXRoaXMuZmFyLHQuX2xlZnQ9dm9pZCAwLHQuX3JpZ2h0PXZvaWQgMCx0Ll90b3A9dm9pZCAwLHQuX2JvdHRvbT12b2lkIDAsdC5fbmVhcj12b2lkIDAsdC5fZmFyPXZvaWQgMCx0fTtwaS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpJiZ0IGluc3RhbmNlb2YgcGkmJnRoaXMucmlnaHQ9PT10LnJpZ2h0JiZ0aGlzLmxlZnQ9PT10LmxlZnQmJnRoaXMudG9wPT09dC50b3AmJnRoaXMuYm90dG9tPT09dC5ib3R0b20mJnRoaXMubmVhcj09PXQubmVhciYmdGhpcy5mYXI9PT10LmZhcn07cGkucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PT09dGhpc3x8aCh0KSYmdCBpbnN0YW5jZW9mIHBpJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5yaWdodCx0LnJpZ2h0LGUsbikmJlAuZXF1YWxzRXBzaWxvbih0aGlzLmxlZnQsdC5sZWZ0LGUsbikmJlAuZXF1YWxzRXBzaWxvbih0aGlzLnRvcCx0LnRvcCxlLG4pJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5ib3R0b20sdC5ib3R0b20sZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMubmVhcix0Lm5lYXIsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMuZmFyLHQuZmFyLGUsbil9O0NPPXBpfSk7ZnVuY3Rpb24gZXIodCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1QsdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bT1uZXcgQ08sdGhpcy5mb3Y9dC5mb3YsdGhpcy5fZm92PXZvaWQgMCx0aGlzLl9mb3Z5PXZvaWQgMCx0aGlzLl9zc2VEZW5vbWluYXRvcj12b2lkIDAsdGhpcy5hc3BlY3RSYXRpbz10LmFzcGVjdFJhdGlvLHRoaXMuX2FzcGVjdFJhdGlvPXZvaWQgMCx0aGlzLm5lYXI9dC5uZWFyPz8xLHRoaXMuX25lYXI9dGhpcy5uZWFyLHRoaXMuZmFyPXQuZmFyPz81ZTgsdGhpcy5fZmFyPXRoaXMuZmFyLHRoaXMueE9mZnNldD10LnhPZmZzZXQ/PzAsdGhpcy5feE9mZnNldD10aGlzLnhPZmZzZXQsdGhpcy55T2Zmc2V0PXQueU9mZnNldD8/MCx0aGlzLl95T2Zmc2V0PXRoaXMueU9mZnNldH1mdW5jdGlvbiBYcih0KXtpZighaCh0LmZvdil8fCFoKHQuYXNwZWN0UmF0aW8pfHwhaCh0Lm5lYXIpfHwhaCh0LmZhcikpdGhyb3cgbmV3IEwoImZvdiwgYXNwZWN0UmF0aW8sIG5lYXIsIG9yIGZhciBwYXJhbWV0ZXJzIGFyZSBub3Qgc2V0LiIpO2lmKCEodC5mb3YhPT10Ll9mb3Z8fHQuYXNwZWN0UmF0aW8hPT10Ll9hc3BlY3RSYXRpb3x8dC5uZWFyIT09dC5fbmVhcnx8dC5mYXIhPT10Ll9mYXJ8fHQueE9mZnNldCE9PXQuX3hPZmZzZXR8fHQueU9mZnNldCE9PXQuX3lPZmZzZXQpKXJldHVybjtpZih5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZm92Iix0LmZvdiwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW4oImZvdiIsdC5mb3YsTWF0aC5QSSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImFzcGVjdFJhdGlvIix0LmFzcGVjdFJhdGlvLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJuZWFyIix0Lm5lYXIsMCksdC5uZWFyPnQuZmFyKXRocm93IG5ldyBMKCJuZWFyIG11c3QgYmUgbGVzcyB0aGFuIGZhci4iKTt0Ll9hc3BlY3RSYXRpbz10LmFzcGVjdFJhdGlvLHQuX2Zvdj10LmZvdix0Ll9mb3Z5PXQuYXNwZWN0UmF0aW88PTE/dC5mb3Y6TWF0aC5hdGFuKE1hdGgudGFuKHQuZm92Ki41KS90LmFzcGVjdFJhdGlvKSoyLHQuX25lYXI9dC5uZWFyLHQuX2Zhcj10LmZhcix0Ll9zc2VEZW5vbWluYXRvcj0yKk1hdGgudGFuKC41KnQuX2ZvdnkpLHQuX3hPZmZzZXQ9dC54T2Zmc2V0LHQuX3lPZmZzZXQ9dC55T2Zmc2V0O2xldCBuPXQuX29mZkNlbnRlckZydXN0dW07bi50b3A9dC5uZWFyKk1hdGgudGFuKC41KnQuX2ZvdnkpLG4uYm90dG9tPS1uLnRvcCxuLnJpZ2h0PXQuYXNwZWN0UmF0aW8qbi50b3Asbi5sZWZ0PS1uLnJpZ2h0LG4ubmVhcj10Lm5lYXIsbi5mYXI9dC5mYXIsbi5yaWdodCs9dC54T2Zmc2V0LG4ubGVmdCs9dC54T2Zmc2V0LG4udG9wKz10LnlPZmZzZXQsbi5ib3R0b20rPXQueU9mZnNldH12YXIgUG8sSV89JCgoKT0+e1d0KCk7eWUoKTthdCgpO2p0KCk7S3QoKTt4TygpO2VyLnBhY2tlZExlbmd0aD02O2VyLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXQuZm92LGVbbisrXT10LmFzcGVjdFJhdGlvLGVbbisrXT10Lm5lYXIsZVtuKytdPXQuZmFyLGVbbisrXT10LnhPZmZzZXQsZVtuXT10LnlPZmZzZXQsZX07ZXIudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLGgobil8fChuPW5ldyBlciksbi5mb3Y9dFtlKytdLG4uYXNwZWN0UmF0aW89dFtlKytdLG4ubmVhcj10W2UrK10sbi5mYXI9dFtlKytdLG4ueE9mZnNldD10W2UrK10sbi55T2Zmc2V0PXRbZV0sbn07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZXIucHJvdG90eXBlLHtwcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5wcm9qZWN0aW9uTWF0cml4fX0saW5maW5pdGVQcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5pbmZpbml0ZVByb2plY3Rpb25NYXRyaXh9fSxmb3Z5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fZm92eX19LHNzZURlbm9taW5hdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fc3NlRGVub21pbmF0b3J9fSxvZmZDZW50ZXJGcnVzdHVtOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bX19fSk7ZXIucHJvdG90eXBlLmNvbXB1dGVDdWxsaW5nVm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5jb21wdXRlQ3VsbGluZ1ZvbHVtZSh0LGUsbil9O2VyLnByb3RvdHlwZS5nZXRQaXhlbERpbWVuc2lvbnM9ZnVuY3Rpb24odCxlLG4sbyxyKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5nZXRQaXhlbERpbWVuc2lvbnModCxlLG4sbyxyKX07ZXIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpfHwodD1uZXcgZXIpLHQuYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyx0LmZvdj10aGlzLmZvdix0Lm5lYXI9dGhpcy5uZWFyLHQuZmFyPXRoaXMuZmFyLHQuX2FzcGVjdFJhdGlvPXZvaWQgMCx0Ll9mb3Y9dm9pZCAwLHQuX25lYXI9dm9pZCAwLHQuX2Zhcj12b2lkIDAsdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5jbG9uZSh0Ll9vZmZDZW50ZXJGcnVzdHVtKSx0fTtlci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiFoKHQpfHwhKHQgaW5zdGFuY2VvZiBlcik/ITE6KFhyKHRoaXMpLFhyKHQpLHRoaXMuZm92PT09dC5mb3YmJnRoaXMuYXNwZWN0UmF0aW89PT10LmFzcGVjdFJhdGlvJiZ0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmVxdWFscyh0Ll9vZmZDZW50ZXJGcnVzdHVtKSl9O2VyLnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4haCh0KXx8ISh0IGluc3RhbmNlb2YgZXIpPyExOihYcih0aGlzKSxYcih0KSxQLmVxdWFsc0Vwc2lsb24odGhpcy5mb3YsdC5mb3YsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMuYXNwZWN0UmF0aW8sdC5hc3BlY3RSYXRpbyxlLG4pJiZ0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmVxdWFsc0Vwc2lsb24odC5fb2ZmQ2VudGVyRnJ1c3R1bSxlLG4pKX07UG89ZXJ9KTtmdW5jdGlvbiBnYyh0KXt5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMiLHQpLHkudHlwZU9mLm9iamVjdCgib3B0aW9ucy5mcnVzdHVtIix0LmZydXN0dW0pLHkudHlwZU9mLm9iamVjdCgib3B0aW9ucy5vcmlnaW4iLHQub3JpZ2luKSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMub3JpZW50YXRpb24iLHQub3JpZW50YXRpb24pO2xldCBlPXQuZnJ1c3R1bSxuPXQub3JpZW50YXRpb24sbz10Lm9yaWdpbixyPXQudmVydGV4Rm9ybWF0Pz9wdC5ERUZBVUxULGk9dC5fZHJhd05lYXJQbGFuZT8/ITAscyxmO2UgaW5zdGFuY2VvZiBQbz8ocz1PZCxmPVBvLnBhY2tlZExlbmd0aCk6ZSBpbnN0YW5jZW9mIHhvJiYocz1rRixmPXhvLnBhY2tlZExlbmd0aCksdGhpcy5fZnJ1c3R1bVR5cGU9cyx0aGlzLl9mcnVzdHVtPWUuY2xvbmUoKSx0aGlzLl9vcmlnaW49YS5jbG9uZShvKSx0aGlzLl9vcmllbnRhdGlvbj10ZS5jbG9uZShuKSx0aGlzLl9kcmF3TmVhclBsYW5lPWksdGhpcy5fdmVydGV4Rm9ybWF0PXIsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlRnJ1c3R1bUdlb21ldHJ5Iix0aGlzLnBhY2tlZExlbmd0aD0yK2YrYS5wYWNrZWRMZW5ndGgrdGUucGFja2VkTGVuZ3RoK3B0LnBhY2tlZExlbmd0aH1mdW5jdGlvbiBFYSh0LGUsbixvLHIsaSxzLGYpe2xldCB1PXQvMyoyO2ZvcihsZXQgYz0wO2M8NDsrK2MpaChlKSYmKGVbdF09aS54LGVbdCsxXT1pLnksZVt0KzJdPWkueiksaChuKSYmKG5bdF09cy54LG5bdCsxXT1zLnksblt0KzJdPXMueiksaChvKSYmKG9bdF09Zi54LG9bdCsxXT1mLnksb1t0KzJdPWYueiksdCs9MztyW3VdPTAsclt1KzFdPTAsclt1KzJdPTEsclt1KzNdPTAsclt1KzRdPTEsclt1KzVdPTEsclt1KzZdPTAsclt1KzddPTF9dmFyIE9kLGtGLEdGLFZGLHpGLGpGLEhGLHFGLEtGLHZfLFBPLE1PLE5PLFdGLFhGLFlGLFRzLEtmLElPLFdmLEZfPSQoKCk9Pnt2ZSgpO0x0KCk7aHIoKTtXdCgpO0RlKCk7YXQoKTtYZSgpO1llKCk7YW4oKTtCbigpO1VuKCk7TV8oKTtJXygpO3RuKCk7S28oKTtSbygpO09kPTAsa0Y9MTtnYy5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzA7bGV0IG89dC5fZnJ1c3R1bVR5cGUscj10Ll9mcnVzdHVtO3JldHVybiBlW24rK109byxvPT09T2Q/KFBvLnBhY2socixlLG4pLG4rPVBvLnBhY2tlZExlbmd0aCk6KHhvLnBhY2socixlLG4pLG4rPXhvLnBhY2tlZExlbmd0aCksYS5wYWNrKHQuX29yaWdpbixlLG4pLG4rPWEucGFja2VkTGVuZ3RoLHRlLnBhY2sodC5fb3JpZW50YXRpb24sZSxuKSxuKz10ZS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuXT10Ll9kcmF3TmVhclBsYW5lPzE6MCxlfTtHRj1uZXcgUG8sVkY9bmV3IHhvLHpGPW5ldyB0ZSxqRj1uZXcgYSxIRj1uZXcgcHQ7Z2MudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89dFtlKytdLHI7bz09PU9kPyhyPVBvLnVucGFjayh0LGUsR0YpLGUrPVBvLnBhY2tlZExlbmd0aCk6KHI9eG8udW5wYWNrKHQsZSxWRiksZSs9eG8ucGFja2VkTGVuZ3RoKTtsZXQgaT1hLnVucGFjayh0LGUsakYpO2UrPWEucGFja2VkTGVuZ3RoO2xldCBzPXRlLnVucGFjayh0LGUsekYpO2UrPXRlLnBhY2tlZExlbmd0aDtsZXQgZj1wdC51bnBhY2sodCxlLEhGKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IHU9dFtlXT09PTE7aWYoIWgobikpcmV0dXJuIG5ldyBnYyh7ZnJ1c3R1bTpyLG9yaWdpbjppLG9yaWVudGF0aW9uOnMsdmVydGV4Rm9ybWF0OmYsX2RyYXdOZWFyUGxhbmU6dX0pO2xldCBjPW89PT1uLl9mcnVzdHVtVHlwZT9uLl9mcnVzdHVtOnZvaWQgMDtyZXR1cm4gbi5fZnJ1c3R1bT1yLmNsb25lKGMpLG4uX2ZydXN0dW1UeXBlPW8sbi5fb3JpZ2luPWEuY2xvbmUoaSxuLl9vcmlnaW4pLG4uX29yaWVudGF0aW9uPXRlLmNsb25lKHMsbi5fb3JpZW50YXRpb24pLG4uX3ZlcnRleEZvcm1hdD1wdC5jbG9uZShmLG4uX3ZlcnRleEZvcm1hdCksbi5fZHJhd05lYXJQbGFuZT11LG59O3FGPW5ldyBaLEtGPW5ldyBpdCx2Xz1uZXcgaXQsUE89bmV3IGEsTU89bmV3IGEsTk89bmV3IGEsV0Y9bmV3IGEsWEY9bmV3IGEsWUY9bmV3IGEsVHM9bmV3IEFycmF5KDMpLEtmPW5ldyBBcnJheSg0KTtLZlswXT1uZXcgbWUoLTEsLTEsMSwxKTtLZlsxXT1uZXcgbWUoMSwtMSwxLDEpO0tmWzJdPW5ldyBtZSgxLDEsMSwxKTtLZlszXT1uZXcgbWUoLTEsMSwxLDEpO0lPPW5ldyBBcnJheSg0KTtmb3IobGV0IHQ9MDt0PDQ7Kyt0KUlPW3RdPW5ldyBtZTtnYy5fY29tcHV0ZU5lYXJGYXJQbGFuZXM9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyxmKXtsZXQgdT1aLmZyb21RdWF0ZXJuaW9uKGUscUYpLGM9aT8/UE8sbD1zPz9NTyxwPWY/P05PO2M9Wi5nZXRDb2x1bW4odSwwLGMpLGw9Wi5nZXRDb2x1bW4odSwxLGwpLHA9Wi5nZXRDb2x1bW4odSwyLHApLGEubm9ybWFsaXplKGMsYyksYS5ub3JtYWxpemUobCxsKSxhLm5vcm1hbGl6ZShwLHApLGEubmVnYXRlKGMsYyk7bGV0IGQ9aXQuY29tcHV0ZVZpZXcodCxwLGwsYyxLRiksbSxfLGc9by5wcm9qZWN0aW9uTWF0cml4O2lmKG49PT1PZCl7bGV0IGI9aXQubXVsdGlwbHkoZyxkLHZfKTtfPWl0LmludmVyc2UoYix2Xyl9ZWxzZSBtPWl0LmludmVyc2VUcmFuc2Zvcm1hdGlvbihkLHZfKTtoKF8pPyhUc1swXT1vLm5lYXIsVHNbMV09by5mYXIpOihUc1swXT0wLFRzWzFdPW8ubmVhcixUc1syXT1vLmZhcik7Zm9yKGxldCBiPTA7YjwyOysrYilmb3IobGV0IFQ9MDtUPDQ7KytUKXtsZXQgTz1tZS5jbG9uZShLZltUXSxJT1tUXSk7aWYoaChfKSl7Tz1pdC5tdWx0aXBseUJ5VmVjdG9yKF8sTyxPKTtsZXQgRT0xL08udzthLm11bHRpcGx5QnlTY2FsYXIoTyxFLE8pLGEuc3VidHJhY3QoTyx0LE8pLGEubm9ybWFsaXplKE8sTyk7bGV0IHc9YS5kb3QocCxPKTthLm11bHRpcGx5QnlTY2FsYXIoTyxUc1tiXS93LE8pLGEuYWRkKE8sdCxPKX1lbHNle2xldCBFPW8ub2ZmQ2VudGVyRnJ1c3R1bTtoKEUpJiYobz1FKTtsZXQgdz1Uc1tiXSxDPVRzW2IrMV07Ty54PShPLngqKG8ucmlnaHQtby5sZWZ0KStvLmxlZnQrby5yaWdodCkqLjUsTy55PShPLnkqKG8udG9wLW8uYm90dG9tKStvLmJvdHRvbStvLnRvcCkqLjUsTy56PShPLnoqKHctQyktdy1DKSouNSxPLnc9MSxpdC5tdWx0aXBseUJ5VmVjdG9yKG0sTyxPKX1yWzEyKmIrVCozXT1PLngsclsxMipiK1QqMysxXT1PLnksclsxMipiK1QqMysyXT1PLnp9fTtnYy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9mcnVzdHVtVHlwZSxuPXQuX2ZydXN0dW0sbz10Ll9vcmlnaW4scj10Ll9vcmllbnRhdGlvbixpPXQuX2RyYXdOZWFyUGxhbmUscz10Ll92ZXJ0ZXhGb3JtYXQsZj1pPzY6NSx1PW5ldyBGbG9hdDY0QXJyYXkoMyo0KjYpO2djLl9jb21wdXRlTmVhckZhclBsYW5lcyhvLHIsZSxuLHUpO2xldCBjPTMqNCoyO3VbY109dVszKjRdLHVbYysxXT11WzMqNCsxXSx1W2MrMl09dVszKjQrMl0sdVtjKzNdPXVbMF0sdVtjKzRdPXVbMV0sdVtjKzVdPXVbMl0sdVtjKzZdPXVbMyozXSx1W2MrN109dVszKjMrMV0sdVtjKzhdPXVbMyozKzJdLHVbYys5XT11WzMqN10sdVtjKzEwXT11WzMqNysxXSx1W2MrMTFdPXVbMyo3KzJdLGMrPTMqNCx1W2NdPXVbMyo1XSx1W2MrMV09dVszKjUrMV0sdVtjKzJdPXVbMyo1KzJdLHVbYyszXT11WzNdLHVbYys0XT11WzRdLHVbYys1XT11WzVdLHVbYys2XT11WzBdLHVbYys3XT11WzFdLHVbYys4XT11WzJdLHVbYys5XT11WzMqNF0sdVtjKzEwXT11WzMqNCsxXSx1W2MrMTFdPXVbMyo0KzJdLGMrPTMqNCx1W2NdPXVbM10sdVtjKzFdPXVbNF0sdVtjKzJdPXVbNV0sdVtjKzNdPXVbMyo1XSx1W2MrNF09dVszKjUrMV0sdVtjKzVdPXVbMyo1KzJdLHVbYys2XT11WzMqNl0sdVtjKzddPXVbMyo2KzFdLHVbYys4XT11WzMqNisyXSx1W2MrOV09dVszKjJdLHVbYysxMF09dVszKjIrMV0sdVtjKzExXT11WzMqMisyXSxjKz0zKjQsdVtjXT11WzMqMl0sdVtjKzFdPXVbMyoyKzFdLHVbYysyXT11WzMqMisyXSx1W2MrM109dVszKjZdLHVbYys0XT11WzMqNisxXSx1W2MrNV09dVszKjYrMl0sdVtjKzZdPXVbMyo3XSx1W2MrN109dVszKjcrMV0sdVtjKzhdPXVbMyo3KzJdLHVbYys5XT11WzMqM10sdVtjKzEwXT11WzMqMysxXSx1W2MrMTFdPXVbMyozKzJdLGl8fCh1PXUuc3ViYXJyYXkoMyo0KSk7bGV0IGw9bmV3IHJlKHtwb3NpdGlvbjpuZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnV9KX0pO2lmKGgocy5ub3JtYWwpfHxoKHMudGFuZ2VudCl8fGgocy5iaXRhbmdlbnQpfHxoKHMuc3QpKXtsZXQgZD1oKHMubm9ybWFsKT9uZXcgRmxvYXQzMkFycmF5KDEyKmYpOnZvaWQgMCxtPWgocy50YW5nZW50KT9uZXcgRmxvYXQzMkFycmF5KDMqNCpmKTp2b2lkIDAsXz1oKHMuYml0YW5nZW50KT9uZXcgRmxvYXQzMkFycmF5KDMqNCpmKTp2b2lkIDAsZz1oKHMuc3QpP25ldyBGbG9hdDMyQXJyYXkoMio0KmYpOnZvaWQgMCxiPVBPLFQ9TU8sTz1OTyxFPWEubmVnYXRlKGIsV0YpLHc9YS5uZWdhdGUoVCxYRiksQz1hLm5lZ2F0ZShPLFlGKTtjPTAsaSYmKEVhKGMsZCxtLF8sZyxDLGIsVCksYys9Myo0KSxFYShjLGQsbSxfLGcsTyxFLFQpLGMrPTMqNCxFYShjLGQsbSxfLGcsRSxDLFQpLGMrPTMqNCxFYShjLGQsbSxfLGcsdyxDLEUpLGMrPTMqNCxFYShjLGQsbSxfLGcsYixPLFQpLGMrPTMqNCxFYShjLGQsbSxfLGcsVCxPLEUpLGgoZCkmJihsLm5vcm1hbD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZH0pKSxoKG0pJiYobC50YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczptfSkpLGgoXykmJihsLmJpdGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6X30pKSxoKGcpJiYobC5zdD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6Z30pKX1sZXQgcD1uZXcgVWludDE2QXJyYXkoNipmKTtmb3IobGV0IGQ9MDtkPGY7KytkKXtsZXQgbT1kKjYsXz1kKjQ7cFttXT1fLHBbbSsxXT1fKzEscFttKzJdPV8rMixwW20rM109XyxwW20rNF09XysyLHBbbSs1XT1fKzN9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpsLGluZGljZXM6cCxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpndC5mcm9tVmVydGljZXModSl9KX07V2Y9Z2N9KTt2YXIgTF89e307cGUoTF8se2RlZmF1bHQ6KCk9PlpGfSk7ZnVuY3Rpb24gJEYodCxlKXtyZXR1cm4gaChlKSYmKHQ9V2YudW5wYWNrKHQsZSkpLFdmLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBaRixEXz0kKCgpPT57YXQoKTtGXygpO1pGPSRGfSk7ZnVuY3Rpb24gWGYodCl7eS50eXBlT2Yub2JqZWN0KCJvcHRpb25zIix0KSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMuZnJ1c3R1bSIsdC5mcnVzdHVtKSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMub3JpZ2luIix0Lm9yaWdpbikseS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLm9yaWVudGF0aW9uIix0Lm9yaWVudGF0aW9uKTtsZXQgZT10LmZydXN0dW0sbj10Lm9yaWVudGF0aW9uLG89dC5vcmlnaW4scj10Ll9kcmF3TmVhclBsYW5lPz8hMCxpLHM7ZSBpbnN0YW5jZW9mIFBvPyhpPUJfLHM9UG8ucGFja2VkTGVuZ3RoKTplIGluc3RhbmNlb2YgeG8mJihpPVFGLHM9eG8ucGFja2VkTGVuZ3RoKSx0aGlzLl9mcnVzdHVtVHlwZT1pLHRoaXMuX2ZydXN0dW09ZS5jbG9uZSgpLHRoaXMuX29yaWdpbj1hLmNsb25lKG8pLHRoaXMuX29yaWVudGF0aW9uPXRlLmNsb25lKG4pLHRoaXMuX2RyYXdOZWFyUGxhbmU9cix0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVGcnVzdHVtT3V0bGluZUdlb21ldHJ5Iix0aGlzLnBhY2tlZExlbmd0aD0yK3MrYS5wYWNrZWRMZW5ndGgrdGUucGFja2VkTGVuZ3RofXZhciBCXyxRRixKRix0TCxlTCxuTCxVXyx2Tz0kKCgpPT57dmUoKTtMdCgpO1d0KCk7RGUoKTthdCgpO0ZfKCk7WGUoKTtZZSgpO2FuKCk7TV8oKTtJXygpO3RuKCk7S28oKTtCXz0wLFFGPTE7WGYucGFjaz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wO2xldCBvPXQuX2ZydXN0dW1UeXBlLHI9dC5fZnJ1c3R1bTtyZXR1cm4gZVtuKytdPW8sbz09PUJfPyhQby5wYWNrKHIsZSxuKSxuKz1Qby5wYWNrZWRMZW5ndGgpOih4by5wYWNrKHIsZSxuKSxuKz14by5wYWNrZWRMZW5ndGgpLGEucGFjayh0Ll9vcmlnaW4sZSxuKSxuKz1hLnBhY2tlZExlbmd0aCx0ZS5wYWNrKHQuX29yaWVudGF0aW9uLGUsbiksbis9dGUucGFja2VkTGVuZ3RoLGVbbl09dC5fZHJhd05lYXJQbGFuZT8xOjAsZX07SkY9bmV3IFBvLHRMPW5ldyB4byxlTD1uZXcgdGUsbkw9bmV3IGE7WGYudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89dFtlKytdLHI7bz09PUJfPyhyPVBvLnVucGFjayh0LGUsSkYpLGUrPVBvLnBhY2tlZExlbmd0aCk6KHI9eG8udW5wYWNrKHQsZSx0TCksZSs9eG8ucGFja2VkTGVuZ3RoKTtsZXQgaT1hLnVucGFjayh0LGUsbkwpO2UrPWEucGFja2VkTGVuZ3RoO2xldCBzPXRlLnVucGFjayh0LGUsZUwpO2UrPXRlLnBhY2tlZExlbmd0aDtsZXQgZj10W2VdPT09MTtpZighaChuKSlyZXR1cm4gbmV3IFhmKHtmcnVzdHVtOnIsb3JpZ2luOmksb3JpZW50YXRpb246cyxfZHJhd05lYXJQbGFuZTpmfSk7bGV0IHU9bz09PW4uX2ZydXN0dW1UeXBlP24uX2ZydXN0dW06dm9pZCAwO3JldHVybiBuLl9mcnVzdHVtPXIuY2xvbmUodSksbi5fZnJ1c3R1bVR5cGU9byxuLl9vcmlnaW49YS5jbG9uZShpLG4uX29yaWdpbiksbi5fb3JpZW50YXRpb249dGUuY2xvbmUocyxuLl9vcmllbnRhdGlvbiksbi5fZHJhd05lYXJQbGFuZT1mLG59O1hmLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX2ZydXN0dW1UeXBlLG49dC5fZnJ1c3R1bSxvPXQuX29yaWdpbixyPXQuX29yaWVudGF0aW9uLGk9dC5fZHJhd05lYXJQbGFuZSxzPW5ldyBGbG9hdDY0QXJyYXkoMyo0KjIpO1dmLl9jb21wdXRlTmVhckZhclBsYW5lcyhvLHIsZSxuLHMpO2xldCBmPW5ldyByZSh7cG9zaXRpb246bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpzfSl9KSx1LGMsbD1pPzI6MSxwPW5ldyBVaW50MTZBcnJheSg4KihsKzEpKSxkPWk/MDoxO2Zvcig7ZDwyOysrZCl1PWk/ZCo4OjAsYz1kKjQscFt1XT1jLHBbdSsxXT1jKzEscFt1KzJdPWMrMSxwW3UrM109YysyLHBbdSs0XT1jKzIscFt1KzVdPWMrMyxwW3UrNl09YyszLHBbdSs3XT1jO2ZvcihkPTA7ZDwyOysrZCl1PShsK2QpKjgsYz1kKjQscFt1XT1jLHBbdSsxXT1jKzQscFt1KzJdPWMrMSxwW3UrM109Yys1LHBbdSs0XT1jKzIscFt1KzVdPWMrNixwW3UrNl09YyszLHBbdSs3XT1jKzc7cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpmLGluZGljZXM6cCxwcmltaXRpdmVUeXBlOkR0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOmd0LmZyb21WZXJ0aWNlcyhzKX0pfTtVXz1YZn0pO3ZhciBrXz17fTtwZShrXyx7ZGVmYXVsdDooKT0+ckx9KTtmdW5jdGlvbiBvTCh0LGUpe3JldHVybiBoKGUpJiYodD1VXy51bnBhY2sodCxlKSksVV8uY3JlYXRlR2VvbWV0cnkodCl9dmFyIHJMLEdfPSQoKCk9PnthdCgpO3ZPKCk7ckw9b0x9KTtmdW5jdGlvbiB3cyh0KXt0PXQ/P050LkVNUFRZX09CSkVDVCx0aGlzLl9lbGxpcHNvaWQ9dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCx0aGlzLl9yZWN0YW5nbGU9dC5yZWN0YW5nbGU/P010Lk1BWF9WQUxVRSx0aGlzLl9wcm9qZWN0aW9uPW5ldyBKbih0aGlzLl9lbGxpcHNvaWQpLHRoaXMuX251bWJlck9mTGV2ZWxaZXJvVGlsZXNYPXQubnVtYmVyT2ZMZXZlbFplcm9UaWxlc1g/PzIsdGhpcy5fbnVtYmVyT2ZMZXZlbFplcm9UaWxlc1k9dC5udW1iZXJPZkxldmVsWmVyb1RpbGVzWT8/MX12YXIgRk8sTE89JCgoKT0+e1VlKCk7V3QoKTt5ZSgpO2F0KCk7JHQoKTtTaSgpO0t0KCk7d24oKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3cy5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc29pZH19LHJlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlY3RhbmdsZX19LHByb2plY3Rpb246e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcm9qZWN0aW9ufX19KTt3cy5wcm90b3R5cGUuZ2V0TnVtYmVyT2ZYVGlsZXNBdExldmVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9udW1iZXJPZkxldmVsWmVyb1RpbGVzWDw8dH07d3MucHJvdG90eXBlLmdldE51bWJlck9mWVRpbGVzQXRMZXZlbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbnVtYmVyT2ZMZXZlbFplcm9UaWxlc1k8PHR9O3dzLnByb3RvdHlwZS5yZWN0YW5nbGVUb05hdGl2ZVJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgicmVjdGFuZ2xlIix0KTtsZXQgbj1QLnRvRGVncmVlcyh0Lndlc3QpLG89UC50b0RlZ3JlZXModC5zb3V0aCkscj1QLnRvRGVncmVlcyh0LmVhc3QpLGk9UC50b0RlZ3JlZXModC5ub3J0aCk7cmV0dXJuIGgoZSk/KGUud2VzdD1uLGUuc291dGg9byxlLmVhc3Q9cixlLm5vcnRoPWksZSk6bmV3IE10KG4sbyxyLGkpfTt3cy5wcm90b3R5cGUudGlsZVhZVG9OYXRpdmVSZWN0YW5nbGU9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9dGhpcy50aWxlWFlUb1JlY3RhbmdsZSh0LGUsbixvKTtyZXR1cm4gci53ZXN0PVAudG9EZWdyZWVzKHIud2VzdCksci5zb3V0aD1QLnRvRGVncmVlcyhyLnNvdXRoKSxyLmVhc3Q9UC50b0RlZ3JlZXMoci5lYXN0KSxyLm5vcnRoPVAudG9EZWdyZWVzKHIubm9ydGgpLHJ9O3dzLnByb3RvdHlwZS50aWxlWFlUb1JlY3RhbmdsZT1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj10aGlzLl9yZWN0YW5nbGUsaT10aGlzLmdldE51bWJlck9mWFRpbGVzQXRMZXZlbChuKSxzPXRoaXMuZ2V0TnVtYmVyT2ZZVGlsZXNBdExldmVsKG4pLGY9ci53aWR0aC9pLHU9dCpmK3Iud2VzdCxjPSh0KzEpKmYrci53ZXN0LGw9ci5oZWlnaHQvcyxwPXIubm9ydGgtZSpsLGQ9ci5ub3J0aC0oZSsxKSpsO3JldHVybiBoKG8pfHwobz1uZXcgTXQodSxkLGMscCkpLG8ud2VzdD11LG8uc291dGg9ZCxvLmVhc3Q9YyxvLm5vcnRoPXAsb307d3MucHJvdG90eXBlLnBvc2l0aW9uVG9UaWxlWFk9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXRoaXMuX3JlY3RhbmdsZTtpZighTXQuY29udGFpbnMobyx0KSlyZXR1cm47bGV0IHI9dGhpcy5nZXROdW1iZXJPZlhUaWxlc0F0TGV2ZWwoZSksaT10aGlzLmdldE51bWJlck9mWVRpbGVzQXRMZXZlbChlKSxzPW8ud2lkdGgvcixmPW8uaGVpZ2h0L2ksdT10LmxvbmdpdHVkZTtvLmVhc3Q8by53ZXN0JiYodSs9UC5UV09fUEkpO2xldCBjPSh1LW8ud2VzdCkvc3wwO2M+PXImJihjPXItMSk7bGV0IGw9KG8ubm9ydGgtdC5sYXRpdHVkZSkvZnwwO3JldHVybiBsPj1pJiYobD1pLTEpLGgobik/KG4ueD1jLG4ueT1sLG4pOm5ldyBKKGMsbCl9O0ZPPXdzfSk7ZnVuY3Rpb24gR08odCl7c3QuZnJvbVJhZGlhbnModC5lYXN0LHQubm9ydGgsMCxZZlswXSksc3QuZnJvbVJhZGlhbnModC53ZXN0LHQubm9ydGgsMCxZZlsxXSksc3QuZnJvbVJhZGlhbnModC5lYXN0LHQuc291dGgsMCxZZlsyXSksc3QuZnJvbVJhZGlhbnModC53ZXN0LHQuc291dGgsMCxZZlszXSk7bGV0IGU9MCxuPTAsbz0wLHI9MCxpPVBuLl90ZXJyYWluSGVpZ2h0c01heExldmVsLHM7Zm9yKHM9MDtzPD1pOysrcyl7bGV0IGY9ITE7Zm9yKGxldCB1PTA7dTw0OysrdSl7bGV0IGM9WWZbdV07aWYoc0wucG9zaXRpb25Ub1RpbGVYWShjLHMsJGYpLHU9PT0wKW89JGYueCxyPSRmLnk7ZWxzZSBpZihvIT09JGYueHx8ciE9PSRmLnkpe2Y9ITA7YnJlYWt9fWlmKGYpYnJlYWs7ZT1vLG49cn1pZihzIT09MClyZXR1cm57eDplLHk6bixsZXZlbDpzPmk/aTpzLTF9fXZhciBETyxCTyxVTyxWXyxpTCxrTyxzTCxZZiwkZixQbixFZCx6Xz0kKCgpPT57dmUoKTtYbSgpO1VlKCk7THQoKTtJZSgpO1d0KCk7YXQoKTtqdCgpOyR0KCk7TE8oKTt3bigpO2RmKCk7RE89bmV3IGEsQk89bmV3IGEsVU89bmV3IHN0LFZfPW5ldyBhLGlMPW5ldyBhLGtPPW5ldyBndCxzTD1uZXcgRk8sWWY9W25ldyBzdCxuZXcgc3QsbmV3IHN0LG5ldyBzdF0sJGY9bmV3IEosUG49e307UG4uaW5pdGlhbGl6ZT1mdW5jdGlvbigpe2xldCB0PVBuLl9pbml0UHJvbWlzZTtyZXR1cm4gaCh0KXx8KHQ9b2kuZmV0Y2hKc29uKHlwKCJBc3NldHMvYXBwcm94aW1hdGVUZXJyYWluSGVpZ2h0cy5qc29uIikpLnRoZW4oZnVuY3Rpb24oZSl7UG4uX3RlcnJhaW5IZWlnaHRzPWV9KSxQbi5faW5pdFByb21pc2U9dCksdH07UG4uZ2V0TWluaW11bU1heGltdW1IZWlnaHRzPWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJyZWN0YW5nbGUiLHQpLCFoKFBuLl90ZXJyYWluSGVpZ2h0cykpdGhyb3cgbmV3IEwoIllvdSBtdXN0IGNhbGwgQXBwcm94aW1hdGVUZXJyYWluSGVpZ2h0cy5pbml0aWFsaXplIGFuZCB3YWl0IGZvciB0aGUgcHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uIik7ZT1lPz9ZLmRlZmF1bHQ7bGV0IG49R08odCksbz1Qbi5fZGVmYXVsdE1pblRlcnJhaW5IZWlnaHQscj1Qbi5fZGVmYXVsdE1heFRlcnJhaW5IZWlnaHQ7aWYoaChuKSl7bGV0IGk9YCR7bi5sZXZlbH0tJHtuLnh9LSR7bi55fWAscz1Qbi5fdGVycmFpbkhlaWdodHNbaV07aChzKSYmKG89c1swXSxyPXNbMV0pLGUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTXQubm9ydGhlYXN0KHQsVU8pLERPKSxlLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKE10LnNvdXRod2VzdCh0LFVPKSxCTyksYS5taWRwb2ludChCTyxETyxWXyk7bGV0IGY9ZS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKFZfLGlMKTtpZihoKGYpKXtsZXQgdT1hLmRpc3RhbmNlKFZfLGYpO289TWF0aC5taW4obywtdSl9ZWxzZSBvPVBuLl9kZWZhdWx0TWluVGVycmFpbkhlaWdodH1yZXR1cm4gbz1NYXRoLm1heChQbi5fZGVmYXVsdE1pblRlcnJhaW5IZWlnaHQsbykse21pbmltdW1UZXJyYWluSGVpZ2h0Om8sbWF4aW11bVRlcnJhaW5IZWlnaHQ6cn19O1BuLmdldEJvdW5kaW5nU3BoZXJlPWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJyZWN0YW5nbGUiLHQpLCFoKFBuLl90ZXJyYWluSGVpZ2h0cykpdGhyb3cgbmV3IEwoIllvdSBtdXN0IGNhbGwgQXBwcm94aW1hdGVUZXJyYWluSGVpZ2h0cy5pbml0aWFsaXplIGFuZCB3YWl0IGZvciB0aGUgcHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uIik7ZT1lPz9ZLmRlZmF1bHQ7bGV0IG49R08odCksbz1Qbi5fZGVmYXVsdE1heFRlcnJhaW5IZWlnaHQ7aWYoaChuKSl7bGV0IGk9YCR7bi5sZXZlbH0tJHtuLnh9LSR7bi55fWAscz1Qbi5fdGVycmFpbkhlaWdodHNbaV07aChzKSYmKG89c1sxXSl9bGV0IHI9Z3QuZnJvbVJlY3RhbmdsZTNEKHQsZSwwKTtyZXR1cm4gZ3QuZnJvbVJlY3RhbmdsZTNEKHQsZSxvLGtPKSxndC51bmlvbihyLGtPLHIpfTtQbi5fdGVycmFpbkhlaWdodHNNYXhMZXZlbD02O1BuLl9kZWZhdWx0TWF4VGVycmFpbkhlaWdodD05ZTM7UG4uX2RlZmF1bHRNaW5UZXJyYWluSGVpZ2h0PS0xZTU7UG4uX3RlcnJhaW5IZWlnaHRzPXZvaWQgMDtQbi5faW5pdFByb21pc2U9dm9pZCAwO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBuLHtpbml0aWFsaXplZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgoUG4uX3RlcnJhaW5IZWlnaHRzKX19fSk7RWQ9UG59KTtmdW5jdGlvbiBFcyh0KXt0PXQ/P050LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvc2l0aW9ucztpZighaChlKXx8ZS5sZW5ndGg8Mil0aHJvdyBuZXcgTCgiQXQgbGVhc3QgdHdvIHBvc2l0aW9ucyBhcmUgcmVxdWlyZWQuIik7aWYoaCh0LmFyY1R5cGUpJiZ0LmFyY1R5cGUhPT1oZS5HRU9ERVNJQyYmdC5hcmNUeXBlIT09aGUuUkhVTUIpdGhyb3cgbmV3IEwoIlZhbGlkIG9wdGlvbnMgZm9yIGFyY1R5cGUgYXJlIEFyY1R5cGUuR0VPREVTSUMgYW5kIEFyY1R5cGUuUkhVTUIuIik7dGhpcy53aWR0aD10LndpZHRoPz8xLHRoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuZ3JhbnVsYXJpdHk9dC5ncmFudWxhcml0eT8/OTk5OSx0aGlzLmxvb3A9dC5sb29wPz8hMSx0aGlzLmFyY1R5cGU9dC5hcmNUeXBlPz9oZS5HRU9ERVNJQyx0aGlzLl9lbGxpcHNvaWQ9WS5kZWZhdWx0LHRoaXMuX3Byb2plY3Rpb25JbmRleD0wLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUdyb3VuZFBvbHlsaW5lR2VvbWV0cnkiLHRoaXMuX3NjZW5lM0RPbmx5PSExfWZ1bmN0aW9uIFlfKHQsZSxuLG8scil7bGV0IGk9VW8obyx0LDAsYUwpLHM9VW8obyx0LG4sek8pLGY9VW8obyxlLDAsak8pLHU9SGkocyxpLHpPKSxjPUhpKGYsaSxqTyk7cmV0dXJuIGEuY3Jvc3MoYyx1LHIpLGEubm9ybWFsaXplKHIscil9ZnVuY3Rpb24gal8odCxlLG4sbyxyLGkscyxmLHUsYyxsKXtpZihyPT09MClyZXR1cm47bGV0IHA7aT09PWhlLkdFT0RFU0lDP3A9bmV3IGNkKHQsZSxzKTppPT09aGUuUkhVTUImJihwPW5ldyBabyh0LGUscykpO2xldCBkPXAuc3VyZmFjZURpc3RhbmNlO2lmKGQ8cilyZXR1cm47bGV0IG09WV8odCxlLG8scyxwTCksXz1NYXRoLmNlaWwoZC9yKSxnPWQvXyxiPWcsVD1fLTEsTz1mLmxlbmd0aDtmb3IobGV0IEU9MDtFPFQ7RSsrKXtsZXQgdz1wLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoYixmTCksQz1VbyhzLHcsbix1TCksTT1VbyhzLHcsbyxsTCk7YS5wYWNrKG0sZixPKSxhLnBhY2soQyx1LE8pLGEucGFjayhNLGMsTyksbC5wdXNoKHcubGF0aXR1ZGUpLGwucHVzaCh3LmxvbmdpdHVkZSksTys9MyxiKz1nfX1mdW5jdGlvbiBVbyh0LGUsbixvKXtyZXR1cm4gc3QuY2xvbmUoZSxIXyksSF8uaGVpZ2h0PW4sc3QudG9DYXJ0ZXNpYW4oSF8sdCxvKX1mdW5jdGlvbiBIaSh0LGUsbil7cmV0dXJuIGEuc3VidHJhY3QodCxlLG4pLGEubm9ybWFsaXplKG4sbiksbn1mdW5jdGlvbiBITyh0LGUsbixvKXtyZXR1cm4gbz1IaSh0LGUsbyksbz1hLmNyb3NzKG8sbixvKSxvPWEubm9ybWFsaXplKG8sbyksbz1hLmNyb3NzKG4sbyxvKSxvfWZ1bmN0aW9uIHFfKHQsZSxuLG8scil7bGV0IGk9SGkobixlLGZFKSxzPUhPKHQsZSxpLGRMKSxmPUhPKG8sZSxpLG1MKTtpZihQLmVxdWFsc0Vwc2lsb24oYS5kb3QocyxmKSx5TCxQLkVQU0lMT041KSlyZXR1cm4gcj1hLmNyb3NzKGkscyxyKSxyPWEubm9ybWFsaXplKHIscikscjtyPWEuYWRkKGYscyxyKSxyPWEubm9ybWFsaXplKHIscik7bGV0IHU9YS5jcm9zcyhpLHIsaEwpO3JldHVybiBhLmRvdChmLHUpPF9MJiYocj1hLm5lZ2F0ZShyLHIpKSxyfWZ1bmN0aW9uIFdPKHQsZSxuLG8pe2xldCByPUhpKG4sZSxPTCksaT1hLmRvdChyLHQpO2lmKGk+c0V8fGk8Vk8pe2xldCBzPUhpKG8sbixmRSksZj1pPFZPP1AuUElfT1ZFUl9UV086LVAuUElfT1ZFUl9UV08sdT10ZS5mcm9tQXhpc0FuZ2xlKHMsZixSTCksYz1aLmZyb21RdWF0ZXJuaW9uKHUsRUwpO3JldHVybiBaLm11bHRpcGx5QnlWZWN0b3IoYyx0LHQpLCEwfXJldHVybiExfWZ1bmN0aW9uIFpmKHQsZSxuLG8scil7bGV0IGk9c3QudG9DYXJ0ZXNpYW4oZSx0Ll9lbGxpcHNvaWQsU0wpLHM9YS5hZGQoaSxuLFlPKSxmPSExLHU9dC5fZWxsaXBzb2lkLGM9dS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhzLFhPKTtNYXRoLmFicyhlLmxvbmdpdHVkZS1jLmxvbmdpdHVkZSk+UC5QSV9PVkVSX1RXTyYmKGY9ITAscz1hLnN1YnRyYWN0KGksbixZTyksYz11LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHMsWE8pKSxjLmhlaWdodD0wO2xldCBsPXQucHJvamVjdChjLHIpO3JldHVybiByPWEuc3VidHJhY3QobCxvLHIpLHIuej0wLHI9YS5ub3JtYWxpemUocixyKSxmJiZhLm5lZ2F0ZShyLHIpLHJ9ZnVuY3Rpb24gWk8odCxlLG4sbyxyLGkpe2xldCBzPWEuc3VidHJhY3QoZSx0LENMKTthLm5vcm1hbGl6ZShzLHMpO2xldCBmPW4tY0UsdT1hLm11bHRpcGx5QnlTY2FsYXIocyxmLCRPKTthLmFkZCh0LHUscik7bGV0IGM9by1hRTt1PWEubXVsdGlwbHlCeVNjYWxhcihzLGMsJE8pLGEuYWRkKGUsdSxpKX1mdW5jdGlvbiBDZCh0LGUpe2xldCBuPW9uLmdldFBvaW50RGlzdGFuY2UoeGQsdCksbz1vbi5nZXRQb2ludERpc3RhbmNlKHhkLGUpLHI9eEw7UC5lcXVhbHNFcHNpbG9uKG4sMCxQLkVQU0lMT04yKT8ocj1IaShlLHQsciksYS5tdWx0aXBseUJ5U2NhbGFyKHIsUC5FUFNJTE9OMixyKSxhLmFkZCh0LHIsdCkpOlAuZXF1YWxzRXBzaWxvbihvLDAsUC5FUFNJTE9OMikmJihyPUhpKHQsZSxyKSxhLm11bHRpcGx5QnlTY2FsYXIocixQLkVQU0lMT04yLHIpLGEuYWRkKGUscixlKSl9ZnVuY3Rpb24gUEwodCxlKXtsZXQgbj1NYXRoLmFicyh0LmxvbmdpdHVkZSksbz1NYXRoLmFicyhlLmxvbmdpdHVkZSk7aWYoUC5lcXVhbHNFcHNpbG9uKG4sUC5QSSxQLkVQU0lMT04xMSkpe2xldCByPVAuc2lnbihlLmxvbmdpdHVkZSk7cmV0dXJuIHQubG9uZ2l0dWRlPXIqKG4tUC5FUFNJTE9OMTEpLDF9ZWxzZSBpZihQLmVxdWFsc0Vwc2lsb24obyxQLlBJLFAuRVBTSUxPTjExKSl7bGV0IHI9UC5zaWduKHQubG9uZ2l0dWRlKTtyZXR1cm4gZS5sb25naXR1ZGU9ciooby1QLkVQU0lMT04xMSksMn1yZXR1cm4gMH1mdW5jdGlvbiBYTCh0LGUsbixvLHIsaSxzKXtsZXQgZix1LGM9ZS5fZWxsaXBzb2lkLGw9bi5sZW5ndGgvMy0xLHA9bCo4LGQ9cCo0LG09bCozNixfPXA+NjU1MzU/bmV3IFVpbnQzMkFycmF5KG0pOm5ldyBVaW50MTZBcnJheShtKSxnPW5ldyBGbG9hdDY0QXJyYXkocCozKSxiPW5ldyBGbG9hdDMyQXJyYXkoZCksVD1uZXcgRmxvYXQzMkFycmF5KGQpLE89bmV3IEZsb2F0MzJBcnJheShkKSxFPW5ldyBGbG9hdDMyQXJyYXkoZCksdz1uZXcgRmxvYXQzMkFycmF5KGQpLEMsTSxOLEY7cyYmKEM9bmV3IEZsb2F0MzJBcnJheShkKSxNPW5ldyBGbG9hdDMyQXJyYXkoZCksTj1uZXcgRmxvYXQzMkFycmF5KGQpLEY9bmV3IEZsb2F0MzJBcnJheShwKjIpKTtsZXQgST1pLmxlbmd0aC8yLHY9MCxCPXVFO0IuaGVpZ2h0PTA7bGV0IEE9bEU7QS5oZWlnaHQ9MDtsZXQgUz1RTyx4PUtfO2lmKHMpZm9yKHU9MCxmPTE7ZjxJO2YrKylCLmxhdGl0dWRlPWlbdV0sQi5sb25naXR1ZGU9aVt1KzFdLEEubGF0aXR1ZGU9aVt1KzJdLEEubG9uZ2l0dWRlPWlbdSszXSxTPWUucHJvamVjdChCLFMpLHg9ZS5wcm9qZWN0KEEseCksdis9YS5kaXN0YW5jZShTLHgpLHUrPTI7bGV0IEQ9by5sZW5ndGgvMzt4PWEudW5wYWNrKG8sMCx4KTtsZXQgej0wO2Zvcih1PTMsZj0xO2Y8RDtmKyspUz1hLmNsb25lKHgsUykseD1hLnVucGFjayhvLHUseCkseis9YS5kaXN0YW5jZShTLHgpLHUrPTM7bGV0IGo7dT0zO2xldCBrPTAscT0wLFc9MCxSPTAsbnQ9ITEsY3Q9YS51bnBhY2sobiwwLHRFKSxsdD1hLnVucGFjayhvLDAsS18pLF90PWEudW5wYWNrKHIsMCxlRSk7aWYodCl7bGV0IFZ0PWEudW5wYWNrKG4sbi5sZW5ndGgtNixKTyk7V08oX3QsVnQsY3QsbHQpJiYoX3Q9YS5uZWdhdGUoX3QsX3QpKX1sZXQgb3Q9MCx4dD0wLHl0PTA7Zm9yKGY9MDtmPGw7ZisrKXtsZXQgVnQ9YS5jbG9uZShjdCxKTyksZGU9YS5jbG9uZShsdCxRTyksc2U9YS5jbG9uZShfdCxNTCk7bnQmJihzZT1hLm5lZ2F0ZShzZSxzZSkpLGN0PWEudW5wYWNrKG4sdSx0RSksbHQ9YS51bnBhY2sobyx1LEtfKSxfdD1hLnVucGFjayhyLHUsZUUpLG50PVdPKF90LFZ0LGN0LGx0KSxCLmxhdGl0dWRlPWlba10sQi5sb25naXR1ZGU9aVtrKzFdLEEubGF0aXR1ZGU9aVtrKzJdLEEubG9uZ2l0dWRlPWlbayszXTtsZXQgbGUsZmUsWnQsUXQ7aWYocyl7bGV0IEZlPVBMKEIsQSk7bGU9ZS5wcm9qZWN0KEIsQkwpLGZlPWUucHJvamVjdChBLFVMKTtsZXQgTG49SGkoZmUsbGUsb0UpO0xuLnk9TWF0aC5hYnMoTG4ueSksWnQ9V18sUXQ9WF8sRmU9PT0wfHxhLmRvdChMbixhLlVOSVRfWSk+c0U/KFp0PVpmKGUsQixzZSxsZSxXXyksUXQ9WmYoZSxBLF90LGZlLFhfKSk6RmU9PT0xPyhRdD1aZihlLEEsX3QsZmUsWF8pLFp0Lng9MCxadC55PVAuc2lnbihCLmxvbmdpdHVkZS1NYXRoLmFicyhBLmxvbmdpdHVkZSkpLFp0Lno9MCk6KFp0PVpmKGUsQixzZSxsZSxXXyksUXQueD0wLFF0Lnk9UC5zaWduKEIubG9uZ2l0dWRlLUEubG9uZ2l0dWRlKSxRdC56PTApfWxldCBOZT1hLmRpc3RhbmNlKGRlLGx0KSxnZT1acy5mcm9tQ2FydGVzaWFuKFZ0LEhMKSxFZT1hLnN1YnRyYWN0KGN0LFZ0LGtMKSx1bj1hLm5vcm1hbGl6ZShFZSxuRSksR2U9YS5zdWJ0cmFjdChkZSxWdCxHTCk7R2U9YS5ub3JtYWxpemUoR2UsR2UpO2xldCBiZT1hLmNyb3NzKHVuLEdlLG5FKTtiZT1hLm5vcm1hbGl6ZShiZSxiZSk7bGV0IGxuPWEuY3Jvc3MoR2Usc2UsekwpO2xuPWEubm9ybWFsaXplKGxuLGxuKTtsZXQgcG49YS5zdWJ0cmFjdChsdCxjdCxWTCk7cG49YS5ub3JtYWxpemUocG4scG4pO2xldCBFbj1hLmNyb3NzKF90LHBuLGpMKTtFbj1hLm5vcm1hbGl6ZShFbixFbik7bGV0IG9lPU5lL3osWXQ9b3QveixWZT0wLGRuLHNuLG1uLGZvPTAsSG49MDtpZihzKXtWZT1hLmRpc3RhbmNlKGxlLGZlKSxkbj1acy5mcm9tQ2FydGVzaWFuKGxlLHFMKSxzbj1hLnN1YnRyYWN0KGZlLGxlLG9FKSxtbj1hLm5vcm1hbGl6ZShzbixLTCk7bGV0IEZlPW1uLng7bW4ueD1tbi55LG1uLnk9LUZlLGZvPVZlL3YsSG49eHQvdn1mb3Ioaj0wO2o8ODtqKyspe2xldCBGZT1SK2oqNCxMbj1xK2oqMixXbj1GZSszLHpvPWo8ND8xOi0xLHJuPWo9PT0yfHxqPT09M3x8aj09PTZ8fGo9PT03PzE6LTE7YS5wYWNrKGdlLmhpZ2gsYixGZSksYltXbl09RWUueCxhLnBhY2soZ2UubG93LFQsRmUpLFRbV25dPUVlLnksYS5wYWNrKGxuLE8sRmUpLE9bV25dPUVlLnosYS5wYWNrKEVuLEUsRmUpLEVbV25dPW9lKnpvLGEucGFjayhiZSx3LEZlKTtsZXQgUm49WXQqcm47Um49PT0wJiZybjwwJiYoUm49OSksd1tXbl09Um4scyYmKENbRmVdPWRuLmhpZ2gueCxDW0ZlKzFdPWRuLmhpZ2gueSxDW0ZlKzJdPWRuLmxvdy54LENbRmUrM109ZG4ubG93LnksTltGZV09LVp0LnksTltGZSsxXT1adC54LE5bRmUrMl09UXQueSxOW0ZlKzNdPS1RdC54LE1bRmVdPXNuLngsTVtGZSsxXT1zbi55LE1bRmUrMl09bW4ueCxNW0ZlKzNdPW1uLnksRltMbl09Zm8qem8sUm49SG4qcm4sUm49PT0wJiZybjwwJiYoUm49OSksRltMbisxXT1Sbil9bGV0IFplPUxMLGNuPURMLEtlPXZMLGhuPUZMLHVvPU10LmZyb21DYXJ0b2dyYXBoaWNBcnJheShOTCxJTCkscW49RWQuZ2V0TWluaW11bU1heGltdW1IZWlnaHRzKHVvLGMpLEtuPXFuLm1pbmltdW1UZXJyYWluSGVpZ2h0LGxvPXFuLm1heGltdW1UZXJyYWluSGVpZ2h0O3l0Kz1NYXRoLmFicyhLbikseXQrPU1hdGguYWJzKGxvKSxaTyhWdCxkZSxLbixsbyxaZSxLZSksWk8oY3QsbHQsS24sbG8sY24saG4pO2xldCB6ZT1hLm11bHRpcGx5QnlTY2FsYXIoYmUsUC5FUFNJTE9ONSxyRSk7YS5hZGQoWmUsemUsWmUpLGEuYWRkKGNuLHplLGNuKSxhLmFkZChLZSx6ZSxLZSksYS5hZGQoaG4semUsaG4pLENkKFplLGNuKSxDZChLZSxobiksYS5wYWNrKFplLGcsVyksYS5wYWNrKGNuLGcsVyszKSxhLnBhY2soaG4sZyxXKzYpLGEucGFjayhLZSxnLFcrOSksemU9YS5tdWx0aXBseUJ5U2NhbGFyKGJlLC0yKlAuRVBTSUxPTjUsckUpLGEuYWRkKFplLHplLFplKSxhLmFkZChjbix6ZSxjbiksYS5hZGQoS2UsemUsS2UpLGEuYWRkKGhuLHplLGhuKSxDZChaZSxjbiksQ2QoS2UsaG4pLGEucGFjayhaZSxnLFcrMTIpLGEucGFjayhjbixnLFcrMTUpLGEucGFjayhobixnLFcrMTgpLGEucGFjayhLZSxnLFcrMjEpLGsrPTIsdSs9MyxxKz0xNixXKz0yNCxSKz0zMixvdCs9TmUseHQrPVZlfXU9MDtsZXQgU3Q9MDtmb3IoZj0wO2Y8bDtmKyspe2ZvcihqPTA7ajxpRTtqKyspX1t1K2pdPXBFW2pdK1N0O1N0Kz04LHUrPWlFfWxldCBkdD1XTDtndC5mcm9tVmVydGljZXMobixhLlpFUk8sMyxkdFswXSksZ3QuZnJvbVZlcnRpY2VzKG8sYS5aRVJPLDMsZHRbMV0pO2xldCBmdD1ndC5mcm9tQm91bmRpbmdTcGhlcmVzKGR0KTtmdC5yYWRpdXMrPXl0LyhsKjIpO2xldCBJdD17cG9zaXRpb246bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLG5vcm1hbGl6ZTohMSx2YWx1ZXM6Z30pLHN0YXJ0SGlBbmRGb3J3YXJkT2Zmc2V0WDpPcyhiKSxzdGFydExvQW5kRm9yd2FyZE9mZnNldFk6T3MoVCksc3RhcnROb3JtYWxBbmRGb3J3YXJkT2Zmc2V0WjpPcyhPKSxlbmROb3JtYWxBbmRUZXh0dXJlQ29vcmRpbmF0ZU5vcm1hbGl6YXRpb25YOk9zKEUpLHJpZ2h0Tm9ybWFsQW5kVGV4dHVyZUNvb3JkaW5hdGVOb3JtYWxpemF0aW9uWTpPcyh3KX07cmV0dXJuIHMmJihJdC5zdGFydEhpTG8yRD1PcyhDKSxJdC5vZmZzZXRBbmRSaWdodDJEPU9zKE0pLEl0LnN0YXJ0RW5kTm9ybWFsczJEPU9zKE4pLEl0LnRleGNvb3JkTm9ybWFsaXphdGlvbjJEPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLG5vcm1hbGl6ZTohMSx2YWx1ZXM6Rn0pKSxuZXcgQnQoe2F0dHJpYnV0ZXM6SXQsaW5kaWNlczpfLGJvdW5kaW5nU3BoZXJlOmZ0fSl9ZnVuY3Rpb24gT3ModCl7cmV0dXJuIG5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTo0LG5vcm1hbGl6ZTohMSx2YWx1ZXM6dH0pfXZhciAkXyxjTCxzRSxWTyxjRSxhRSxhTCx6TyxqTyxmTCx1TCxsTCxwTCxIXyxkTCxtTCxoTCxmRSxfTCx5TCx4ZCxnTCxBTCxiTCxUTCx3TCxSZCxTZCxxTyxLTyxPTCxFTCxSTCxYTyxTTCxZTyxDTCwkTyx4TCx1RSxsRSxRTyxLXyxKTyx0RSxNTCxlRSxOTCxJTCx2TCxGTCxMTCxETCxCTCxVTCxXXyxYXyxrTCxHTCxWTCxuRSx6TCxqTCxITCxxTCxvRSxLTCxyRSxXTCxwRSxpRSxaXyxkRT0kKCgpPT57el8oKTtmYygpO2pyKCk7dmUoKTtMdCgpO0llKCk7V3QoKTtEZSgpO3llKCk7YXQoKTtqdCgpOyR0KCk7ajAoKTtNZigpO0JoKCk7U2koKTtYZSgpO1llKCk7dGMoKTtLdCgpO0JuKCk7ZnMoKTtLbygpO3duKCk7aWMoKTskXz1bSm4sbm9dLGNMPSRfLmxlbmd0aCxzRT1NYXRoLmNvcyhQLnRvUmFkaWFucygzMCkpLFZPPU1hdGguY29zKFAudG9SYWRpYW5zKDE1MCkpLGNFPTAsYUU9MWUzO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEVzLnByb3RvdHlwZSx7cGFja2VkTGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMSt0aGlzLl9wb3NpdGlvbnMubGVuZ3RoKjMrMSsxKzErWS5wYWNrZWRMZW5ndGgrMSsxfX19KTtFcy5zZXRQcm9qZWN0aW9uQW5kRWxsaXBzb2lkPWZ1bmN0aW9uKHQsZSl7bGV0IG49MDtmb3IobGV0IG89MDtvPGNMO28rKylpZihlIGluc3RhbmNlb2YgJF9bb10pe249bzticmVha310Ll9wcm9qZWN0aW9uSW5kZXg9bix0Ll9lbGxpcHNvaWQ9ZS5lbGxpcHNvaWR9O2FMPW5ldyBhLHpPPW5ldyBhLGpPPW5ldyBhO2ZMPW5ldyBzdCx1TD1uZXcgYSxsTD1uZXcgYSxwTD1uZXcgYTtIXz1uZXcgc3Q7RXMucGFjaz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSk7bGV0IG89bj8/MCxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2VbbysrXT1pO2ZvcihsZXQgcz0wO3M8aTsrK3Mpe2xldCBmPXJbc107YS5wYWNrKGYsZSxvKSxvKz0zfXJldHVybiBlW28rK109dC5ncmFudWxhcml0eSxlW28rK109dC5sb29wPzE6MCxlW28rK109dC5hcmNUeXBlLFkucGFjayh0Ll9lbGxpcHNvaWQsZSxvKSxvKz1ZLnBhY2tlZExlbmd0aCxlW28rK109dC5fcHJvamVjdGlvbkluZGV4LGVbbysrXT10Ll9zY2VuZTNET25seT8xOjAsZX07RXMudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KTtsZXQgbz1lPz8wLHI9dFtvKytdLGk9bmV3IEFycmF5KHIpO2ZvcihsZXQgZD0wO2Q8cjtkKyspaVtkXT1hLnVucGFjayh0LG8pLG8rPTM7bGV0IHM9dFtvKytdLGY9dFtvKytdPT09MSx1PXRbbysrXSxjPVkudW5wYWNrKHQsbyk7bys9WS5wYWNrZWRMZW5ndGg7bGV0IGw9dFtvKytdLHA9dFtvKytdPT09MTtyZXR1cm4gaChuKXx8KG49bmV3IEVzKHtwb3NpdGlvbnM6aX0pKSxuLl9wb3NpdGlvbnM9aSxuLmdyYW51bGFyaXR5PXMsbi5sb29wPWYsbi5hcmNUeXBlPXUsbi5fZWxsaXBzb2lkPWMsbi5fcHJvamVjdGlvbkluZGV4PWwsbi5fc2NlbmUzRE9ubHk9cCxufTtkTD1uZXcgYSxtTD1uZXcgYSxoTD1uZXcgYSxmRT1uZXcgYSxfTD0wLHlMPS0xO3hkPW9uLmZyb21Qb2ludE5vcm1hbChhLlpFUk8sYS5VTklUX1kpLGdMPW5ldyBhLEFMPW5ldyBhLGJMPW5ldyBhLFRMPW5ldyBhLHdMPW5ldyBhLFJkPW5ldyBhLFNkPW5ldyBzdCxxTz1uZXcgc3QsS089bmV3IHN0O0VzLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPSF0Ll9zY2VuZTNET25seSxuPXQubG9vcCxvPXQuX2VsbGlwc29pZCxyPXQuZ3JhbnVsYXJpdHksaT10LmFyY1R5cGUscz1uZXcgJF9bdC5fcHJvamVjdGlvbkluZGV4XShvKSxmPWNFLHU9YUUsYyxsLHA9dC5fcG9zaXRpb25zLGQ9cC5sZW5ndGg7ZD09PTImJihuPSExKTtsZXQgbSxfLGcsYixUPW5ldyBabyh2b2lkIDAsdm9pZCAwLG8pLE8sRSx3LEM9W3BbMF1dO2ZvcihsPTA7bDxkLTE7bCsrKW09cFtsXSxfPXBbbCsxXSxPPWhvLmxpbmVTZWdtZW50UGxhbmUobSxfLHhkLFJkKSxoKE8pJiYhYS5lcXVhbHNFcHNpbG9uKE8sbSxQLkVQU0lMT043KSYmIWEuZXF1YWxzRXBzaWxvbihPLF8sUC5FUFNJTE9ONykmJih0LmFyY1R5cGU9PT1oZS5HRU9ERVNJQz9DLnB1c2goYS5jbG9uZShPKSk6dC5hcmNUeXBlPT09aGUuUkhVTUImJih3PW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoTyxTZCkubG9uZ2l0dWRlLGc9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhtLFNkKSxiPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoXyxxTyksVC5zZXRFbmRQb2ludHMoZyxiKSxFPVQuZmluZEludGVyc2VjdGlvbldpdGhMb25naXR1ZGUodyxLTyksTz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEUsUmQpLGgoTykmJiFhLmVxdWFsc0Vwc2lsb24oTyxtLFAuRVBTSUxPTjcpJiYhYS5lcXVhbHNFcHNpbG9uKE8sXyxQLkVQU0lMT043KSYmQy5wdXNoKGEuY2xvbmUoTykpKSksQy5wdXNoKF8pO24mJihtPXBbZC0xXSxfPXBbMF0sTz1oby5saW5lU2VnbWVudFBsYW5lKG0sXyx4ZCxSZCksaChPKSYmIWEuZXF1YWxzRXBzaWxvbihPLG0sUC5FUFNJTE9ONykmJiFhLmVxdWFsc0Vwc2lsb24oTyxfLFAuRVBTSUxPTjcpJiYodC5hcmNUeXBlPT09aGUuR0VPREVTSUM/Qy5wdXNoKGEuY2xvbmUoTykpOnQuYXJjVHlwZT09PWhlLlJIVU1CJiYodz1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKE8sU2QpLmxvbmdpdHVkZSxnPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobSxTZCksYj1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKF8scU8pLFQuc2V0RW5kUG9pbnRzKGcsYiksRT1ULmZpbmRJbnRlcnNlY3Rpb25XaXRoTG9uZ2l0dWRlKHcsS08pLE89by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihFLFJkKSxoKE8pJiYhYS5lcXVhbHNFcHNpbG9uKE8sbSxQLkVQU0lMT043KSYmIWEuZXF1YWxzRXBzaWxvbihPLF8sUC5FUFNJTE9ONykmJkMucHVzaChhLmNsb25lKE8pKSkpKTtsZXQgTT1DLmxlbmd0aCxOPW5ldyBBcnJheShNKTtmb3IobD0wO2w8TTtsKyspe2xldCBudD1zdC5mcm9tQ2FydGVzaWFuKENbbF0sbyk7bnQuaGVpZ2h0PTAsTltsXT1udH1pZihOPXhuKE4sc3QuZXF1YWxzRXBzaWxvbiksTT1OLmxlbmd0aCxNPDIpcmV0dXJuO2xldCBGPVtdLEk9W10sdj1bXSxCPVtdLEE9Z0wsUz1BTCx4PWJMLEQ9VEwsej13TCxqPU5bMF0saz1OWzFdLHE9TltNLTFdO2ZvcihBPVVvKG8scSxmLEEpLEQ9VW8obyxrLGYsRCksUz1VbyhvLGosZixTKSx4PVVvKG8saix1LHgpLG4/ej1xXyhBLFMseCxELHopOno9WV8oaixrLHUsbyx6KSxhLnBhY2soeixJLDApLGEucGFjayhTLHYsMCksYS5wYWNrKHgsQiwwKSxGLnB1c2goai5sYXRpdHVkZSksRi5wdXNoKGoubG9uZ2l0dWRlKSxqXyhqLGssZix1LHIsaSxvLEksdixCLEYpLGw9MTtsPE0tMTsrK2wpe0E9YS5jbG9uZShTLEEpLFM9YS5jbG9uZShELFMpO2xldCBudD1OW2xdO1VvKG8sbnQsdSx4KSxVbyhvLE5bbCsxXSxmLEQpLHFfKEEsUyx4LEQseiksYz1JLmxlbmd0aCxhLnBhY2soeixJLGMpLGEucGFjayhTLHYsYyksYS5wYWNrKHgsQixjKSxGLnB1c2gobnQubGF0aXR1ZGUpLEYucHVzaChudC5sb25naXR1ZGUpLGpfKE5bbF0sTltsKzFdLGYsdSxyLGksbyxJLHYsQixGKX1sZXQgVz1OW00tMV0sUj1OW00tMl07aWYoUz1VbyhvLFcsZixTKSx4PVVvKG8sVyx1LHgpLG4pe2xldCBudD1OWzBdO0E9VW8obyxSLGYsQSksRD1VbyhvLG50LGYsRCksej1xXyhBLFMseCxELHopfWVsc2Ugej1ZXyhSLFcsdSxvLHopO2lmKGM9SS5sZW5ndGgsYS5wYWNrKHosSSxjKSxhLnBhY2soUyx2LGMpLGEucGFjayh4LEIsYyksRi5wdXNoKFcubGF0aXR1ZGUpLEYucHVzaChXLmxvbmdpdHVkZSksbil7Zm9yKGpfKFcsaixmLHUscixpLG8sSSx2LEIsRiksYz1JLmxlbmd0aCxsPTA7bDwzOysrbClJW2MrbF09SVtsXSx2W2MrbF09dltsXSxCW2MrbF09QltsXTtGLnB1c2goai5sYXRpdHVkZSksRi5wdXNoKGoubG9uZ2l0dWRlKX1yZXR1cm4gWEwobixzLHYsQixJLEYsZSl9O09MPW5ldyBhLEVMPW5ldyBaLFJMPW5ldyB0ZTtYTz1uZXcgc3QsU0w9bmV3IGEsWU89bmV3IGE7Q0w9bmV3IGEsJE89bmV3IGE7eEw9bmV3IGE7dUU9bmV3IHN0LGxFPW5ldyBzdCxRTz1uZXcgYSxLXz1uZXcgYSxKTz1uZXcgYSx0RT1uZXcgYSxNTD1uZXcgYSxlRT1uZXcgYSxOTD1bdUUsbEVdLElMPW5ldyBNdCx2TD1uZXcgYSxGTD1uZXcgYSxMTD1uZXcgYSxETD1uZXcgYSxCTD1uZXcgYSxVTD1uZXcgYSxXXz1uZXcgYSxYXz1uZXcgYSxrTD1uZXcgYSxHTD1uZXcgYSxWTD1uZXcgYSxuRT1uZXcgYSx6TD1uZXcgYSxqTD1uZXcgYSxITD1uZXcgWnMscUw9bmV3IFpzLG9FPW5ldyBhLEtMPW5ldyBhLHJFPW5ldyBhLFdMPVtuZXcgZ3QsbmV3IGd0XSxwRT1bMCwyLDEsMCwzLDIsMCw3LDMsMCw0LDcsMCw1LDQsMCwxLDUsNSw3LDQsNSw2LDcsNSwyLDYsNSwxLDIsMyw2LDIsMyw3LDZdLGlFPXBFLmxlbmd0aDtFcy5fcHJvamVjdE5vcm1hbD1aZjtaXz1Fc30pO3ZhciBRXz17fTtwZShRXyx7ZGVmYXVsdDooKT0+JEx9KTtmdW5jdGlvbiBZTCh0LGUpe3JldHVybiBFZC5pbml0aWFsaXplKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBoKGUpJiYodD1aXy51bnBhY2sodCxlKSksWl8uY3JlYXRlR2VvbWV0cnkodCl9KX12YXIgJEwsSl89JCgoKT0+e3pfKCk7YXQoKTtkRSgpOyRMPVlMfSk7ZnVuY3Rpb24gUmEodCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQ7dGhpcy5fdmVydGV4Rm9ybWF0PWUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUGxhbmVHZW9tZXRyeSJ9dmFyIG1FLFpMLFBkLE1kLHR5LGhFPSQoKCk9Pnt2ZSgpO0x0KCk7V3QoKTtEZSgpO3llKCk7YXQoKTtYZSgpO1llKCk7YW4oKTt0bigpO1JvKCk7UmEucGFja2VkTGVuZ3RoPXB0LnBhY2tlZExlbmd0aDtSYS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLHB0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksZX07bUU9bmV3IHB0LFpMPXt2ZXJ0ZXhGb3JtYXQ6bUV9O1JhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wO2xldCBvPXB0LnVucGFjayh0LGUsbUUpO3JldHVybiBoKG4pPyhuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUobyxuLl92ZXJ0ZXhGb3JtYXQpLG4pOm5ldyBSYShaTCl9O1BkPW5ldyBhKC0uNSwtLjUsMCksTWQ9bmV3IGEoLjUsLjUsMCk7UmEuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fdmVydGV4Rm9ybWF0LG49bmV3IHJlLG8scjtpZihlLnBvc2l0aW9uKXtpZihyPW5ldyBGbG9hdDY0QXJyYXkoNCozKSxyWzBdPVBkLngsclsxXT1QZC55LHJbMl09MCxyWzNdPU1kLngscls0XT1QZC55LHJbNV09MCxyWzZdPU1kLngscls3XT1NZC55LHJbOF09MCxyWzldPVBkLngsclsxMF09TWQueSxyWzExXT0wLG4ucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpyfSksZS5ub3JtYWwpe2xldCBpPW5ldyBGbG9hdDMyQXJyYXkoMTIpO2lbMF09MCxpWzFdPTAsaVsyXT0xLGlbM109MCxpWzRdPTAsaVs1XT0xLGlbNl09MCxpWzddPTAsaVs4XT0xLGlbOV09MCxpWzEwXT0wLGlbMTFdPTEsbi5ub3JtYWw9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOml9KX1pZihlLnN0KXtsZXQgaT1uZXcgRmxvYXQzMkFycmF5KDgpO2lbMF09MCxpWzFdPTAsaVsyXT0xLGlbM109MCxpWzRdPTEsaVs1XT0xLGlbNl09MCxpWzddPTEsbi5zdD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6aX0pfWlmKGUudGFuZ2VudCl7bGV0IGk9bmV3IEZsb2F0MzJBcnJheSgxMik7aVswXT0xLGlbMV09MCxpWzJdPTAsaVszXT0xLGlbNF09MCxpWzVdPTAsaVs2XT0xLGlbN109MCxpWzhdPTAsaVs5XT0xLGlbMTBdPTAsaVsxMV09MCxuLnRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOml9KX1pZihlLmJpdGFuZ2VudCl7bGV0IGk9bmV3IEZsb2F0MzJBcnJheSgxMik7aVswXT0wLGlbMV09MSxpWzJdPTAsaVszXT0wLGlbNF09MSxpWzVdPTAsaVs2XT0wLGlbN109MSxpWzhdPTAsaVs5XT0wLGlbMTBdPTEsaVsxMV09MCxuLmJpdGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aX0pfW89bmV3IFVpbnQxNkFycmF5KDIqMyksb1swXT0wLG9bMV09MSxvWzJdPTIsb1szXT0wLG9bNF09MixvWzVdPTN9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpuLGluZGljZXM6byxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpuZXcgZ3QoYS5aRVJPLE1hdGguc3FydCgyKSl9KX07dHk9UmF9KTt2YXIgZXk9e307cGUoZXkse2RlZmF1bHQ6KCk9PkpMfSk7ZnVuY3Rpb24gUUwodCxlKXtyZXR1cm4gaChlKSYmKHQ9dHkudW5wYWNrKHQsZSkpLHR5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBKTCxueT0kKCgpPT57YXQoKTtoRSgpO0pMPVFMfSk7ZnVuY3Rpb24gU2EoKXt0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQbGFuZU91dGxpbmVHZW9tZXRyeSJ9dmFyIFJzLE5kLG95LF9FPSQoKCk9Pnt2ZSgpO0x0KCk7V3QoKTtEZSgpO2F0KCk7WGUoKTtZZSgpO2FuKCk7dG4oKTtTYS5wYWNrZWRMZW5ndGg9MDtTYS5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLGV9O1NhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGgobik/bjpuZXcgU2F9O1JzPW5ldyBhKC0uNSwtLjUsMCksTmQ9bmV3IGEoLjUsLjUsMCk7U2EuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oKXtsZXQgdD1uZXcgcmUsZT1uZXcgVWludDE2QXJyYXkoNCoyKSxuPW5ldyBGbG9hdDY0QXJyYXkoNCozKTtyZXR1cm4gblswXT1Scy54LG5bMV09UnMueSxuWzJdPVJzLnosblszXT1OZC54LG5bNF09UnMueSxuWzVdPVJzLnosbls2XT1OZC54LG5bN109TmQueSxuWzhdPVJzLnosbls5XT1Scy54LG5bMTBdPU5kLnksblsxMV09UnMueix0LnBvc2l0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bn0pLGVbMF09MCxlWzFdPTEsZVsyXT0xLGVbM109MixlWzRdPTIsZVs1XT0zLGVbNl09MyxlWzddPTAsbmV3IEJ0KHthdHRyaWJ1dGVzOnQsaW5kaWNlczplLHByaW1pdGl2ZVR5cGU6RHQuTElORVMsYm91bmRpbmdTcGhlcmU6bmV3IGd0KGEuWkVSTyxNYXRoLnNxcnQoMikpfSl9O295PVNhfSk7dmFyIHJ5PXt9O3BlKHJ5LHtkZWZhdWx0OigpPT5lRH0pO2Z1bmN0aW9uIHREKHQsZSl7cmV0dXJuIGgoZSkmJih0PW95LnVucGFjayh0LGUpKSxveS5jcmVhdGVHZW9tZXRyeSh0KX12YXIgZUQsaXk9JCgoKT0+e2F0KCk7X0UoKTtlRD10RH0pO2Z1bmN0aW9uIEZuKHQsZSl7dGhpcy5wb3NpdGlvbj10LGgodGhpcy5wb3NpdGlvbil8fCh0aGlzLnBvc2l0aW9uPW5ldyBKKSx0aGlzLnRhbmdlbnRQbGFuZT1lLGgodGhpcy50YW5nZW50UGxhbmUpfHwodGhpcy50YW5nZW50UGxhbmU9Rm4uTk9SVEhfUE9MRV9UQU5HRU5UX1BMQU5FKX12YXIgQ2EsbkQsb0QsckQsaUQsY3IseUU9JCgoKT0+e1VlKCk7THQoKTtJZSgpO1d0KCk7YXQoKTskdCgpO2xhKCk7dGMoKTtLdCgpO1VwKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm4ucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhbmdlbnRQbGFuZS5lbGxpcHNvaWR9fSx4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3NpdGlvbi54fX0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24ueX19LGNvbmZvcm1hbExhdGl0dWRlOntnZXQ6ZnVuY3Rpb24oKXtsZXQgdD1KLm1hZ25pdHVkZSh0aGlzLnBvc2l0aW9uKSxlPTIqdGhpcy5lbGxpcHNvaWQubWF4aW11bVJhZGl1cztyZXR1cm4gdGhpcy50YW5nZW50UGxhbmUucGxhbmUubm9ybWFsLnoqKFAuUElfT1ZFUl9UV08tMipNYXRoLmF0YW4yKHQsZSkpfX0sbG9uZ2l0dWRlOntnZXQ6ZnVuY3Rpb24oKXtsZXQgdD1QLlBJX09WRVJfVFdPK01hdGguYXRhbjIodGhpcy55LHRoaXMueCk7cmV0dXJuIHQ+TWF0aC5QSSYmKHQtPVAuVFdPX1BJKSx0fX19KTtDYT1uZXcgc3QsbkQ9bmV3IGE7Rm4ucHJvdG90eXBlLmdldExhdGl0dWRlPWZ1bmN0aW9uKHQpe2godCl8fCh0PVkuZGVmYXVsdCksQ2EubGF0aXR1ZGU9dGhpcy5jb25mb3JtYWxMYXRpdHVkZSxDYS5sb25naXR1ZGU9dGhpcy5sb25naXR1ZGUsQ2EuaGVpZ2h0PTA7bGV0IGU9dGhpcy5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oQ2EsbkQpO3JldHVybiB0LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsQ2EpLENhLmxhdGl0dWRlfTtvRD1uZXcgUXMsckQ9bmV3IGEsaUQ9bmV3IGE7Rm4uZnJvbUNhcnRlc2lhbj1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFuIix0KTtsZXQgbj1QLnNpZ25Ob3RaZXJvKHQueiksbz1Gbi5OT1JUSF9QT0xFX1RBTkdFTlRfUExBTkUscj1Gbi5TT1VUSF9QT0xFO248MCYmKG89Rm4uU09VVEhfUE9MRV9UQU5HRU5UX1BMQU5FLHI9Rm4uTk9SVEhfUE9MRSk7bGV0IGk9b0Q7aS5vcmlnaW49by5lbGxpcHNvaWQuc2NhbGVUb0dlb2NlbnRyaWNTdXJmYWNlKHQsaS5vcmlnaW4pLGkuZGlyZWN0aW9uPWEuc3VidHJhY3QoaS5vcmlnaW4scixyRCksYS5ub3JtYWxpemUoaS5kaXJlY3Rpb24saS5kaXJlY3Rpb24pO2xldCBzPWhvLnJheVBsYW5lKGksby5wbGFuZSxpRCksZj1hLnN1YnRyYWN0KHMscixzKSx1PWEuZG90KG8ueEF4aXMsZiksYz1uKmEuZG90KG8ueUF4aXMsZik7cmV0dXJuIGgoZSk/KGUucG9zaXRpb249bmV3IEoodSxjKSxlLnRhbmdlbnRQbGFuZT1vLGUpOm5ldyBGbihuZXcgSih1LGMpLG8pfTtGbi5mcm9tQ2FydGVzaWFuQXJyYXk9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbnMiLHQpO2xldCBuPXQubGVuZ3RoO2goZSk/ZS5sZW5ndGg9bjplPW5ldyBBcnJheShuKTtmb3IobGV0IG89MDtvPG47bysrKWVbb109Rm4uZnJvbUNhcnRlc2lhbih0W29dLGVbb10pO3JldHVybiBlfTtGbi5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGUucG9zaXRpb249dC5wb3NpdGlvbixlLnRhbmdlbnRQbGFuZT10LnRhbmdlbnRQbGFuZSxlKTpuZXcgRm4odC5wb3NpdGlvbix0LnRhbmdlbnRQbGFuZSl9O0ZuLkhBTEZfVU5JVF9TUEhFUkU9T2JqZWN0LmZyZWV6ZShuZXcgWSguNSwuNSwuNSkpO0ZuLk5PUlRIX1BPTEU9T2JqZWN0LmZyZWV6ZShuZXcgYSgwLDAsLjUpKTtGbi5TT1VUSF9QT0xFPU9iamVjdC5mcmVlemUobmV3IGEoMCwwLC0uNSkpO0ZuLk5PUlRIX1BPTEVfVEFOR0VOVF9QTEFORT1PYmplY3QuZnJlZXplKG5ldyB5byhGbi5OT1JUSF9QT0xFLEZuLkhBTEZfVU5JVF9TUEhFUkUpKTtGbi5TT1VUSF9QT0xFX1RBTkdFTlRfUExBTkU9T2JqZWN0LmZyZWV6ZShuZXcgeW8oRm4uU09VVEhfUE9MRSxGbi5IQUxGX1VOSVRfU1BIRVJFKSk7Y3I9Rm59KTtmdW5jdGlvbiBjRCh0LGUsbixvKXtsZXQgaT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHQsc0QpLmhlaWdodCxzPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZSxnRSk7cy5oZWlnaHQ9aSxvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHMsZSk7bGV0IGY9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhuLGdFKTtmLmhlaWdodD1pLTEwMCxvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGYsbil9ZnVuY3Rpb24gc3kodCl7bGV0IGU9dC52ZXJ0ZXhGb3JtYXQsbj10Lmdlb21ldHJ5LG89dC5zaGFkb3dWb2x1bWUscj1uLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGk9aChuLmF0dHJpYnV0ZXMuc3QpP24uYXR0cmlidXRlcy5zdC52YWx1ZXM6dm9pZCAwLHM9ci5sZW5ndGgsZj10LndhbGwsdT10LnRvcHx8ZixjPXQuYm90dG9tfHxmO2lmKGUuc3R8fGUubm9ybWFsfHxlLnRhbmdlbnR8fGUuYml0YW5nZW50fHxvKXtsZXQgbD10LmJvdW5kaW5nUmVjdGFuZ2xlLHA9dC5yb3RhdGlvbkF4aXMsZD10LnByb2plY3RUbzJkLG09dC5lbGxpcHNvaWQsXz10LnN0Um90YXRpb24sZz10LnBlclBvc2l0aW9uSGVpZ2h0LGI9bUQ7Yi54PWwueCxiLnk9bC55O2xldCBUPWUuc3Q/bmV3IEZsb2F0MzJBcnJheSgyKihzLzMpKTp2b2lkIDAsTztlLm5vcm1hbCYmKGcmJnUmJiFmP089bi5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXM6Tz1uZXcgRmxvYXQzMkFycmF5KHMpKTtsZXQgRT1lLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShzKTp2b2lkIDAsdz1lLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHMpOnZvaWQgMCxDPW8/bmV3IEZsb2F0MzJBcnJheShzKTp2b2lkIDAsTT0wLE49MCxGPWZELEk9dUQsdj1sRCxCPSEwLEE9eUQsUz1nRDtpZihfIT09MCl7bGV0IHo9dGUuZnJvbUF4aXNBbmdsZShwLF8sYkUpO0E9Wi5mcm9tUXVhdGVybmlvbih6LEEpLHo9dGUuZnJvbUF4aXNBbmdsZShwLC1fLGJFKSxTPVouZnJvbVF1YXRlcm5pb24oeixTKX1lbHNlIEE9Wi5jbG9uZShaLklERU5USVRZLEEpLFM9Wi5jbG9uZShaLklERU5USVRZLFMpO2xldCB4PTAsRD0wO3UmJmMmJih4PXMvMixEPXMvMyxzLz0yKTtmb3IobGV0IHo9MDt6PHM7eis9Myl7bGV0IGo9YS5mcm9tQXJyYXkocix6LF9EKTtpZihlLnN0JiYhaChpKSl7bGV0IGs9Wi5tdWx0aXBseUJ5VmVjdG9yKEEsaixhRCk7az1tLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoayxrKTtsZXQgcT1kKFtrXSxoRClbMF07Si5zdWJ0cmFjdChxLGIscSk7bGV0IFc9UC5jbGFtcChxLngvbC53aWR0aCwwLDEpLFI9UC5jbGFtcChxLnkvbC5oZWlnaHQsMCwxKTtjJiYoVFtNK0RdPVcsVFtNKzErRF09UiksdSYmKFRbTV09VyxUW00rMV09UiksTSs9Mn1pZihlLm5vcm1hbHx8ZS50YW5nZW50fHxlLmJpdGFuZ2VudHx8byl7bGV0IGs9TisxLHE9TisyO2lmKGYpe2lmKHorMzxzKXtsZXQgVz1hLmZyb21BcnJheShyLHorMyxwRCk7aWYoQil7bGV0IFI9YS5mcm9tQXJyYXkocix6K3MsZEQpO2cmJmNEKGosVyxSLG0pLGEuc3VidHJhY3QoVyxqLFcpLGEuc3VidHJhY3QoUixqLFIpLEY9YS5ub3JtYWxpemUoYS5jcm9zcyhSLFcsRiksRiksQj0hMX1hLmVxdWFsc0Vwc2lsb24oVyxqLFAuRVBTSUxPTjEwKSYmKEI9ITApfShlLnRhbmdlbnR8fGUuYml0YW5nZW50KSYmKHY9bS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoaix2KSxlLnRhbmdlbnQmJihJPWEubm9ybWFsaXplKGEuY3Jvc3ModixGLEkpLEkpKSl9ZWxzZSBGPW0uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGosRiksKGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpJiYoZyYmKElkPWEuZnJvbUFycmF5KE8sTixJZCksZGk9YS5jcm9zcyhhLlVOSVRfWixJZCxkaSksZGk9YS5ub3JtYWxpemUoWi5tdWx0aXBseUJ5VmVjdG9yKFMsZGksZGkpLGRpKSxlLmJpdGFuZ2VudCYmKHhhPWEubm9ybWFsaXplKGEuY3Jvc3MoSWQsZGkseGEpLHhhKSkpLEk9YS5jcm9zcyhhLlVOSVRfWixGLEkpLEk9YS5ub3JtYWxpemUoWi5tdWx0aXBseUJ5VmVjdG9yKFMsSSxJKSxJKSxlLmJpdGFuZ2VudCYmKHY9YS5ub3JtYWxpemUoYS5jcm9zcyhGLEksdiksdikpKTtlLm5vcm1hbCYmKHQud2FsbD8oT1tOK3hdPUYueCxPW2sreF09Ri55LE9bcSt4XT1GLnopOmMmJihPW04reF09LUYueCxPW2sreF09LUYueSxPW3EreF09LUYueiksKHUmJiFnfHxmKSYmKE9bTl09Ri54LE9ba109Ri55LE9bcV09Ri56KSksbyYmKGYmJihGPW0uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGosRikpLENbTit4XT0tRi54LENbayt4XT0tRi55LENbcSt4XT0tRi56KSxlLnRhbmdlbnQmJih0LndhbGw/KEVbTit4XT1JLngsRVtrK3hdPUkueSxFW3EreF09SS56KTpjJiYoRVtOK3hdPS1JLngsRVtrK3hdPS1JLnksRVtxK3hdPS1JLnopLHUmJihnPyhFW05dPWRpLngsRVtrXT1kaS55LEVbcV09ZGkueik6KEVbTl09SS54LEVba109SS55LEVbcV09SS56KSkpLGUuYml0YW5nZW50JiYoYyYmKHdbTit4XT12Lngsd1trK3hdPXYueSx3W3EreF09di56KSx1JiYoZz8od1tOXT14YS54LHdba109eGEueSx3W3FdPXhhLnopOih3W05dPXYueCx3W2tdPXYueSx3W3FdPXYueikpKSxOKz0zfX1lLnN0JiYhaChpKSYmKG4uYXR0cmlidXRlcy5zdD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6VH0pKSxlLm5vcm1hbCYmKG4uYXR0cmlidXRlcy5ub3JtYWw9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk99KSksZS50YW5nZW50JiYobi5hdHRyaWJ1dGVzLnRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkV9KSksZS5iaXRhbmdlbnQmJihuLmF0dHJpYnV0ZXMuYml0YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp3fSkpLG8mJihuLmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Q30pKX1pZih0LmV4dHJ1ZGUmJmgodC5vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgbD1yLmxlbmd0aC8zLHA9bmV3IFVpbnQ4QXJyYXkobCk7aWYodC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApdSYmY3x8Zj9wPXAuZmlsbCgxLDAsbC8yKTp1JiYocD1wLmZpbGwoMSkpO2Vsc2V7bGV0IGQ9dC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MTtwPXAuZmlsbChkKX1uLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6cH0pfXJldHVybiBufWZ1bmN0aW9uIEFEKHQsZSxuLG8scixpLHMsZix1LGMpe2xldCBsPXt3YWxsczpbXX0scDtpZihzfHxmKXtsZXQgTz1fZS5jcmVhdGVHZW9tZXRyeUZyb21Qb3NpdGlvbnModCxlLG4sbyxpLHUsYyksRT1PLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHc9Ty5pbmRpY2VzLEMsTTtpZihzJiZmKXtsZXQgTj1FLmNvbmNhdChFKTtDPU4ubGVuZ3RoLzMsTT1GdC5jcmVhdGVUeXBlZEFycmF5KEMsdy5sZW5ndGgqMiksTS5zZXQodyk7bGV0IEY9dy5sZW5ndGgsST1DLzI7Zm9yKHA9MDtwPEY7cCs9Myl7bGV0IHY9TVtwXStJLEI9TVtwKzFdK0ksQT1NW3ArMl0rSTtNW3ArRl09QSxNW3ArMStGXT1CLE1bcCsyK0ZdPXZ9aWYoTy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1OLGkmJnUubm9ybWFsKXtsZXQgdj1PLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcztPLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcz1uZXcgRmxvYXQzMkFycmF5KE4ubGVuZ3RoKSxPLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcy5zZXQodil9aWYodS5zdCYmaChuKSl7bGV0IHY9Ty5hdHRyaWJ1dGVzLnN0LnZhbHVlcztPLmF0dHJpYnV0ZXMuc3QudmFsdWVzPW5ldyBGbG9hdDMyQXJyYXkoQyoyKSxPLmF0dHJpYnV0ZXMuc3QudmFsdWVzPXYuY29uY2F0KHYpfU8uaW5kaWNlcz1NfWVsc2UgaWYoZil7Zm9yKEM9RS5sZW5ndGgvMyxNPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoQyx3Lmxlbmd0aCkscD0wO3A8dy5sZW5ndGg7cCs9MylNW3BdPXdbcCsyXSxNW3ArMV09d1twKzFdLE1bcCsyXT13W3BdO08uaW5kaWNlcz1NfWwudG9wQW5kQm90dG9tPW5ldyBjbyh7Z2VvbWV0cnk6T30pfWxldCBkPXIub3V0ZXJSaW5nLG09eW8uZnJvbVBvaW50cyhkLHQpLF89bS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKGQsVEUpLGc9UGUuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKF8pO2c9PT1Dby5DTE9DS1dJU0UmJihkPWQuc2xpY2UoKS5yZXZlcnNlKCkpO2xldCBiPV9lLmNvbXB1dGVXYWxsR2VvbWV0cnkoZCxuLHQsbyxpLGMpO2wud2FsbHMucHVzaChuZXcgY28oe2dlb21ldHJ5OmJ9KSk7bGV0IFQ9ci5ob2xlcztmb3IocD0wO3A8VC5sZW5ndGg7cCsrKXtsZXQgTz1UW3BdO189bS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKE8sVEUpLGc9UGUuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKF8pLGc9PT1Dby5DT1VOVEVSX0NMT0NLV0lTRSYmKE89Ty5zbGljZSgpLnJldmVyc2UoKSksYj1fZS5jb21wdXRlV2FsbEdlb21ldHJ5KE8sbix0LG8saSxjKSxsLndhbGxzLnB1c2gobmV3IGNvKHtnZW9tZXRyeTpifSkpfXJldHVybiBsfWZ1bmN0aW9uIFJyKHQpe2lmKHkudHlwZU9mLm9iamVjdCgib3B0aW9ucyIsdCkseS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLnBvbHlnb25IaWVyYXJjaHkiLHQucG9seWdvbkhpZXJhcmNoeSksaCh0LnBlclBvc2l0aW9uSGVpZ2h0KSYmdC5wZXJQb3NpdGlvbkhlaWdodCYmaCh0LmhlaWdodCkpdGhyb3cgbmV3IEwoIkNhbm5vdCB1c2UgYm90aCBvcHRpb25zLnBlclBvc2l0aW9uSGVpZ2h0IGFuZCBvcHRpb25zLmhlaWdodCIpO2lmKGgodC5hcmNUeXBlKSYmdC5hcmNUeXBlIT09aGUuR0VPREVTSUMmJnQuYXJjVHlwZSE9PWhlLlJIVU1CKXRocm93IG5ldyBMKCJJbnZhbGlkIGFyY1R5cGUuIFZhbGlkIG9wdGlvbnMgYXJlIEFyY1R5cGUuR0VPREVTSUMgYW5kIEFyY1R5cGUuUkhVTUIuIik7bGV0IGU9dC5wb2x5Z29uSGllcmFyY2h5LG49dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQsbz10LmVsbGlwc29pZD8/WS5kZWZhdWx0LHI9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUUsaT10LnN0Um90YXRpb24/PzAscz10LnRleHR1cmVDb29yZGluYXRlcyxmPXQucGVyUG9zaXRpb25IZWlnaHQ/PyExLHU9ZiYmaCh0LmV4dHJ1ZGVkSGVpZ2h0KSxjPXQuaGVpZ2h0Pz8wLGw9dC5leHRydWRlZEhlaWdodD8/YztpZighdSl7bGV0IHA9TWF0aC5tYXgoYyxsKTtsPU1hdGgubWluKGMsbCksYz1wfXRoaXMuX3ZlcnRleEZvcm1hdD1wdC5jbG9uZShuKSx0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShvKSx0aGlzLl9ncmFudWxhcml0eT1yLHRoaXMuX3N0Um90YXRpb249aSx0aGlzLl9oZWlnaHQ9Yyx0aGlzLl9leHRydWRlZEhlaWdodD1sLHRoaXMuX2Nsb3NlVG9wPXQuY2xvc2VUb3A/PyEwLHRoaXMuX2Nsb3NlQm90dG9tPXQuY2xvc2VCb3R0b20/PyEwLHRoaXMuX3BvbHlnb25IaWVyYXJjaHk9ZSx0aGlzLl9wZXJQb3NpdGlvbkhlaWdodD1mLHRoaXMuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT11LHRoaXMuX3NoYWRvd1ZvbHVtZT10LnNoYWRvd1ZvbHVtZT8/ITEsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUG9seWdvbkdlb21ldHJ5Iix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fYXJjVHlwZT10LmFyY1R5cGU/P2hlLkdFT0RFU0lDLHRoaXMuX3JlY3RhbmdsZT12b2lkIDAsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz12b2lkIDAsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVzPXMsdGhpcy5wYWNrZWRMZW5ndGg9X2UuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aChlLGEpK1kucGFja2VkTGVuZ3RoK3B0LnBhY2tlZExlbmd0aCsocz9fZS5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKHMsSik6MSkrMTJ9ZnVuY3Rpb24gd0UodCxlLG4sbyxyLGkpe2xldCBzPXQubG9uZ2l0dWRlLGY9cz49MD9zOnMrUC5UV09fUEk7ci53ZXN0T3ZlcklkbD1NYXRoLm1pbihyLndlc3RPdmVySWRsLGYpLHIuZWFzdE92ZXJJZGw9TWF0aC5tYXgoci5lYXN0T3ZlcklkbCxmKSxpLndlc3Q9TWF0aC5taW4oaS53ZXN0LHMpLGkuZWFzdD1NYXRoLm1heChpLmVhc3Qscyk7bGV0IHU9dC5nZXRMYXRpdHVkZShuKSxjPXU7aWYoaS5zb3V0aD1NYXRoLm1pbihpLnNvdXRoLHUpLGkubm9ydGg9TWF0aC5tYXgoaS5ub3J0aCx1KSxvIT09aGUuUkhVTUIpe2xldCBkPUouc3VidHJhY3QoZS5wb3NpdGlvbix0LnBvc2l0aW9uLE9EKSxtPUouZG90KGUucG9zaXRpb24sZCkvSi5kb3QoZCxkKTtpZihtPjAmJm08MSl7bGV0IF89Si5hZGQoZS5wb3NpdGlvbixKLm11bHRpcGx5QnlTY2FsYXIoZCwtbSxkKSxFRCksZz1jci5jbG9uZShlLFJEKTtnLnBvc2l0aW9uPV87bGV0IGI9Zy5nZXRMYXRpdHVkZShuKTtpLnNvdXRoPU1hdGgubWluKGkuc291dGgsYiksaS5ub3J0aD1NYXRoLm1heChpLm5vcnRoLGIpLE1hdGguYWJzKHUpPk1hdGguYWJzKGIpJiYoYz1iKX19bGV0IGw9ZS54KnQueS10LngqZS55LHA9TWF0aC5zaWduKGwpO3AhPT0wJiYocCo9Si5hbmdsZUJldHdlZW4oZS5wb3NpdGlvbix0LnBvc2l0aW9uKSksYz49MCYmKHIubm9ydGhBbmdsZSs9cCksYzw9MCYmKHIuc291dGhBbmdsZSs9cCl9ZnVuY3Rpb24geEQodCxlLG4pe3JldHVybiB0LmhlaWdodD49UC5QSXx8dC53aWR0aD49UC5QST9jci5mcm9tQ2FydGVzaWFuKGVbMF0sQ0QpLnRhbmdlbnRQbGFuZTp5by5mcm9tUG9pbnRzKGUsbil9ZnVuY3Rpb24gUEQodCxlLG4pe3JldHVybihvLHIpPT57aWYodC5oZWlnaHQ+PVAuUEl8fHQud2lkdGg+PVAuUEkpe2lmKHQuc291dGg8MCYmdC5ub3J0aD4wKXtoKHIpfHwocj1bXSk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDsrK3Mpe2xldCBmPW4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMob1tzXSxFRSk7cltzXT1uZXcgSihmLmxvbmdpdHVkZS9QLlBJLGYubGF0aXR1ZGUvUC5QSV9PVkVSX1RXTyl9cmV0dXJuIHIubGVuZ3RoPW8ubGVuZ3RoLHJ9cmV0dXJuIGNyLmZyb21DYXJ0ZXNpYW5BcnJheShvLHIpfXJldHVybiB5by5mcm9tUG9pbnRzKGUsbikucHJvamVjdFBvaW50c09udG9QbGFuZShvLHIpfX1mdW5jdGlvbiBNRCh0LGUsbil7aWYodC5oZWlnaHQ+PVAuUEl8fHQud2lkdGg+PVAuUEkpcmV0dXJuKHIsaSk9PntpZih0LnNvdXRoPDAmJnQubm9ydGg+MCl7bGV0IHM9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhyLEVFKTtyZXR1cm4gaChpKXx8KGk9bmV3IEopLGkueD1zLmxvbmdpdHVkZS9QLlBJLGkueT1zLmxhdGl0dWRlL1AuUElfT1ZFUl9UV08saX1yZXR1cm4gY3IuZnJvbUNhcnRlc2lhbihyLGkpfTtsZXQgbz15by5mcm9tUG9pbnRzKGUsbik7cmV0dXJuKHIsaSk9Pm8ucHJvamVjdFBvaW50c09udG9QbGFuZShyLGkpfWZ1bmN0aW9uIE5EKHQsZSxuLG8pe3JldHVybihyLGkpPT4hbyYmKHQuaGVpZ2h0Pj1QLlBJX09WRVJfVFdPfHx0LndpZHRoPj0yKlAuUElfT1ZFUl9USFJFRSk/X2Uuc3BsaXRQb2x5Z29uc09uRXF1YXRvcihyLGUsbixpKTpyfWZ1bmN0aW9uIElEKHQsZSxuLG8pe2lmKGUuaGVpZ2h0Pj1QLlBJfHxlLndpZHRoPj1QLlBJKXJldHVybiBIci5mcm9tUmVjdGFuZ2xlKGUsdm9pZCAwLEFFKTtsZXQgcj10LGk9eW8uZnJvbVBvaW50cyhyLG4pO3JldHVybiBfZS5jb21wdXRlQm91bmRpbmdSZWN0YW5nbGUoaS5wbGFuZS5ub3JtYWwsaS5wcm9qZWN0UG9pbnRPbnRvUGxhbmUuYmluZChpKSxyLG8sQUUpfWZ1bmN0aW9uIHZEKHQpe2xldCBlPS10Ll9zdFJvdGF0aW9uO2lmKGU9PT0wKXJldHVyblswLDAsMCwxLDEsMF07bGV0IG49dC5fZWxsaXBzb2lkLG89dC5fcG9seWdvbkhpZXJhcmNoeS5wb3NpdGlvbnMscj10LnJlY3RhbmdsZTtyZXR1cm4gQnQuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHMobyxlLG4scil9dmFyIHNELGdFLEFFLGFELGZELHVELGxELHBELGRELElkLGRpLHhhLG1ELGhELF9ELGJFLHlELGdELFRFLGJELFRELHdELE9ELEVELFJELE9FLFNELEVyLENELEVFLGN5LFJFPSQoKCk9PntmYygpO0NmKCk7dmUoKTtVZSgpO0x0KCk7SWUoKTtXdCgpO0RlKCk7eWUoKTthdCgpO2p0KCk7JHQoKTtsYSgpO1hlKCk7WWUoKTtzYygpO0ZvKCk7c2koKTskZSgpO0t0KCk7Qm4oKTtMZigpO3FyKCk7S28oKTt3bigpO3lFKCk7Um8oKTtsYygpO3NEPW5ldyBzdCxnRT1uZXcgc3Q7QUU9bmV3IEhyLGFEPW5ldyBhLGZEPW5ldyBhLHVEPW5ldyBhLGxEPW5ldyBhLHBEPW5ldyBhLGREPW5ldyBhLElkPW5ldyBhLGRpPW5ldyBhLHhhPW5ldyBhLG1EPW5ldyBKLGhEPW5ldyBKLF9EPW5ldyBhLGJFPW5ldyB0ZSx5RD1uZXcgWixnRD1uZXcgWjtURT1bXTtSci5mcm9tUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNULHkuZGVmaW5lZCgib3B0aW9ucy5wb3NpdGlvbnMiLHQucG9zaXRpb25zKTtsZXQgZT17cG9seWdvbkhpZXJhcmNoeTp7cG9zaXRpb25zOnQucG9zaXRpb25zfSxoZWlnaHQ6dC5oZWlnaHQsZXh0cnVkZWRIZWlnaHQ6dC5leHRydWRlZEhlaWdodCx2ZXJ0ZXhGb3JtYXQ6dC52ZXJ0ZXhGb3JtYXQsc3RSb3RhdGlvbjp0LnN0Um90YXRpb24sZWxsaXBzb2lkOnQuZWxsaXBzb2lkLGdyYW51bGFyaXR5OnQuZ3JhbnVsYXJpdHkscGVyUG9zaXRpb25IZWlnaHQ6dC5wZXJQb3NpdGlvbkhlaWdodCxjbG9zZVRvcDp0LmNsb3NlVG9wLGNsb3NlQm90dG9tOnQuY2xvc2VCb3R0b20sb2Zmc2V0QXR0cmlidXRlOnQub2Zmc2V0QXR0cmlidXRlLGFyY1R5cGU6dC5hcmNUeXBlLHRleHR1cmVDb29yZGluYXRlczp0LnRleHR1cmVDb29yZGluYXRlc307cmV0dXJuIG5ldyBScihlKX07UnIucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxuPV9lLnBhY2tQb2x5Z29uSGllcmFyY2h5KHQuX3BvbHlnb25IaWVyYXJjaHksZSxuLGEpLFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxwdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4pLG4rPXB0LnBhY2tlZExlbmd0aCxlW24rK109dC5faGVpZ2h0LGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW24rK109dC5fZ3JhbnVsYXJpdHksZVtuKytdPXQuX3N0Um90YXRpb24sZVtuKytdPXQuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT8xOjAsZVtuKytdPXQuX3BlclBvc2l0aW9uSGVpZ2h0PzE6MCxlW24rK109dC5fY2xvc2VUb3A/MTowLGVbbisrXT10Ll9jbG9zZUJvdHRvbT8xOjAsZVtuKytdPXQuX3NoYWRvd1ZvbHVtZT8xOjAsZVtuKytdPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZVtuKytdPXQuX2FyY1R5cGUsaCh0Ll90ZXh0dXJlQ29vcmRpbmF0ZXMpP249X2UucGFja1BvbHlnb25IaWVyYXJjaHkodC5fdGV4dHVyZUNvb3JkaW5hdGVzLGUsbixKKTplW24rK109LTEsZVtuKytdPXQucGFja2VkTGVuZ3RoLGV9O2JEPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksVEQ9bmV3IHB0LHdEPXtwb2x5Z29uSGllcmFyY2h5Ont9fTtSci51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1fZS51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxhKTtlPW8uc3RhcnRpbmdJbmRleCxkZWxldGUgby5zdGFydGluZ0luZGV4O2xldCByPVkudW5wYWNrKHQsZSxiRCk7ZSs9WS5wYWNrZWRMZW5ndGg7bGV0IGk9cHQudW5wYWNrKHQsZSxURCk7ZSs9cHQucGFja2VkTGVuZ3RoO2xldCBzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZSsrXSxsPXRbZSsrXT09PTEscD10W2UrK109PT0xLGQ9dFtlKytdPT09MSxtPXRbZSsrXT09PTEsXz10W2UrK109PT0xLGc9dFtlKytdLGI9dFtlKytdLFQ9dFtlXT09PS0xP3ZvaWQgMDpfZS51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxKKTtoKFQpPyhlPVQuc3RhcnRpbmdJbmRleCxkZWxldGUgVC5zdGFydGluZ0luZGV4KTplKys7bGV0IE89dFtlKytdO3JldHVybiBoKG4pfHwobj1uZXcgUnIod0QpKSxuLl9wb2x5Z29uSGllcmFyY2h5PW8sbi5fZWxsaXBzb2lkPVkuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1wdC5jbG9uZShpLG4uX3ZlcnRleEZvcm1hdCksbi5faGVpZ2h0PXMsbi5fZXh0cnVkZWRIZWlnaHQ9ZixuLl9ncmFudWxhcml0eT11LG4uX3N0Um90YXRpb249YyxuLl9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGU9bCxuLl9wZXJQb3NpdGlvbkhlaWdodD1wLG4uX2Nsb3NlVG9wPWQsbi5fY2xvc2VCb3R0b209bSxuLl9zaGFkb3dWb2x1bWU9XyxuLl9vZmZzZXRBdHRyaWJ1dGU9Zz09PS0xP3ZvaWQgMDpnLG4uX2FyY1R5cGU9YixuLl90ZXh0dXJlQ29vcmRpbmF0ZXM9VCxuLnBhY2tlZExlbmd0aD1PLG59O09EPW5ldyBKLEVEPW5ldyBKLFJEPW5ldyBjcjtPRT1uZXcgY3IsU0Q9bmV3IGNyLEVyPXtub3J0aEFuZ2xlOjAsc291dGhBbmdsZTowLHdlc3RPdmVySWRsOjAsZWFzdE92ZXJJZGw6MH07UnIuY29tcHV0ZVJlY3RhbmdsZUZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlLG4sbyl7aWYoeS5kZWZpbmVkKCJwb3NpdGlvbnMiLHQpLGgobyl8fChvPW5ldyBNdCksdC5sZW5ndGg8MylyZXR1cm4gbztvLndlc3Q9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG8uZWFzdD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksby5zb3V0aD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksby5ub3J0aD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksRXIubm9ydGhBbmdsZT0wLEVyLnNvdXRoQW5nbGU9MCxFci53ZXN0T3ZlcklkbD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksRXIuZWFzdE92ZXJJZGw9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2xldCByPXQubGVuZ3RoLGk9Y3IuZnJvbUNhcnRlc2lhbih0WzBdLFNEKTtmb3IobGV0IHM9MTtzPHI7cysrKXtsZXQgZj1jci5mcm9tQ2FydGVzaWFuKHRbc10sT0UpO3dFKGYsaSxlLG4sRXIsbyksaT1jci5jbG9uZShmLGkpfXJldHVybiB3RShjci5mcm9tQ2FydGVzaWFuKHRbMF0sT0UpLGksZSxuLEVyLG8pLG8uZWFzdC1vLndlc3Q+RXIuZWFzdE92ZXJJZGwtRXIud2VzdE92ZXJJZGwmJihvLndlc3Q9RXIud2VzdE92ZXJJZGwsby5lYXN0PUVyLmVhc3RPdmVySWRsLG8uZWFzdD5QLlBJJiYoby5lYXN0PW8uZWFzdC1QLlRXT19QSSksby53ZXN0PlAuUEkmJihvLndlc3Q9by53ZXN0LVAuVFdPX1BJKSksUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKEVyLm5vcnRoQW5nbGUpLFAuVFdPX1BJLFAuRVBTSUxPTjEwKSYmKG8ubm9ydGg9UC5QSV9PVkVSX1RXTyxvLmVhc3Q9UC5QSSxvLndlc3Q9LVAuUEkpLFAuZXF1YWxzRXBzaWxvbihNYXRoLmFicyhFci5zb3V0aEFuZ2xlKSxQLlRXT19QSSxQLkVQU0lMT04xMCkmJihvLnNvdXRoPS1QLlBJX09WRVJfVFdPLG8uZWFzdD1QLlBJLG8ud2VzdD0tUC5QSSksb307Q0Q9bmV3IGNyO0VFPW5ldyBzdDtSci5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll92ZXJ0ZXhGb3JtYXQsbj10Ll9lbGxpcHNvaWQsbz10Ll9ncmFudWxhcml0eSxyPXQuX3N0Um90YXRpb24saT10Ll9wb2x5Z29uSGllcmFyY2h5LHM9dC5fcGVyUG9zaXRpb25IZWlnaHQsZj10Ll9jbG9zZVRvcCx1PXQuX2Nsb3NlQm90dG9tLGM9dC5fYXJjVHlwZSxsPXQuX3RleHR1cmVDb29yZGluYXRlcyxwPWgobCksZD1pLnBvc2l0aW9ucztpZihkLmxlbmd0aDwzKXJldHVybjtsZXQgbT10LnJlY3RhbmdsZSxfPV9lLnBvbHlnb25zRnJvbUhpZXJhcmNoeShpLHAsUEQobSxkLG4pLCFzLG4sTkQobSxuLGMscykpLGc9Xy5oaWVyYXJjaHksYj1fLnBvbHlnb25zLFQ9ZnVuY3Rpb24oeCl7cmV0dXJuIHh9LE89cD9fZS5wb2x5Z29uc0Zyb21IaWVyYXJjaHkobCwhMCxULCExLG4pLnBvbHlnb25zOnZvaWQgMDtpZihnLmxlbmd0aD09PTApcmV0dXJuO2xldCBFPWdbMF0ub3V0ZXJSaW5nLHc9SUQoRSxtLG4sciksQz1bXSxNPXQuX2hlaWdodCxOPXQuX2V4dHJ1ZGVkSGVpZ2h0LEY9dC5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlfHwhUC5lcXVhbHNFcHNpbG9uKE0sTiwwLFAuRVBTSUxPTjIpLEk9e3BlclBvc2l0aW9uSGVpZ2h0OnMsdmVydGV4Rm9ybWF0OmUsZ2VvbWV0cnk6dm9pZCAwLHJvdGF0aW9uQXhpczp4RChtLEUsbikucGxhbmUubm9ybWFsLHByb2plY3RUbzJkOk1EKG0sRSxuKSxib3VuZGluZ1JlY3RhbmdsZTp3LGVsbGlwc29pZDpuLHN0Um90YXRpb246cix0ZXh0dXJlQ29vcmRpbmF0ZXM6dm9pZCAwLGJvdHRvbTohMSx0b3A6ITAsd2FsbDohMSxleHRydWRlOiExLGFyY1R5cGU6Y30sdjtpZihGKWZvcihJLmV4dHJ1ZGU9ITAsSS50b3A9ZixJLmJvdHRvbT11LEkuc2hhZG93Vm9sdW1lPXQuX3NoYWRvd1ZvbHVtZSxJLm9mZnNldEF0dHJpYnV0ZT10Ll9vZmZzZXRBdHRyaWJ1dGUsdj0wO3Y8Yi5sZW5ndGg7disrKXtsZXQgeD1BRChuLGJbdl0scD9PW3ZdOnZvaWQgMCxvLGdbdl0scyxmLHUsZSxjKSxEO2YmJnU/KEQ9eC50b3BBbmRCb3R0b20sSS5nZW9tZXRyeT1fZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHRFeHRydWRlZChELmdlb21ldHJ5LE0sTixuLHMpKTpmPyhEPXgudG9wQW5kQm90dG9tLEQuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KEQuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsTSxuLCFzKSxJLmdlb21ldHJ5PUQuZ2VvbWV0cnkpOnUmJihEPXgudG9wQW5kQm90dG9tLEQuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KEQuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsTixuLCEwKSxJLmdlb21ldHJ5PUQuZ2VvbWV0cnkpLChmfHx1KSYmKEkud2FsbD0hMSxELmdlb21ldHJ5PXN5KEkpLEMucHVzaChEKSk7bGV0IHo9eC53YWxscztJLndhbGw9ITA7Zm9yKGxldCBqPTA7ajx6Lmxlbmd0aDtqKyspe2xldCBrPXpbal07SS5nZW9tZXRyeT1fZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHRFeHRydWRlZChrLmdlb21ldHJ5LE0sTixuLHMpLGsuZ2VvbWV0cnk9c3koSSksQy5wdXNoKGspfX1lbHNlIGZvcih2PTA7djxiLmxlbmd0aDt2Kyspe2xldCB4PW5ldyBjbyh7Z2VvbWV0cnk6X2UuY3JlYXRlR2VvbWV0cnlGcm9tUG9zaXRpb25zKG4sYlt2XSxwP09bdl06dm9pZCAwLG8scyxlLGMpfSk7aWYoeC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoeC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxNLG4sIXMpLEkuZ2VvbWV0cnk9eC5nZW9tZXRyeSx4Lmdlb21ldHJ5PXN5KEkpLGgodC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IEQ9eC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsej10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxqPW5ldyBVaW50OEFycmF5KEQvMykuZmlsbCh6KTt4Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6an0pfUMucHVzaCh4KX1sZXQgQj1rZS5jb21iaW5lSW5zdGFuY2VzKEMpWzBdO0IuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9bmV3IEZsb2F0NjRBcnJheShCLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzKSxCLmluZGljZXM9RnQuY3JlYXRlVHlwZWRBcnJheShCLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLEIuaW5kaWNlcyk7bGV0IEE9Qi5hdHRyaWJ1dGVzLFM9Z3QuZnJvbVZlcnRpY2VzKEEucG9zaXRpb24udmFsdWVzKTtyZXR1cm4gZS5wb3NpdGlvbnx8ZGVsZXRlIEEucG9zaXRpb24sbmV3IEJ0KHthdHRyaWJ1dGVzOkEsaW5kaWNlczpCLmluZGljZXMscHJpbWl0aXZlVHlwZTpCLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6UyxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O1JyLmNyZWF0ZVNoYWRvd1ZvbHVtZT1mdW5jdGlvbih0LGUsbil7bGV0IG89dC5fZ3JhbnVsYXJpdHkscj10Ll9lbGxpcHNvaWQsaT1lKG8scikscz1uKG8scik7cmV0dXJuIG5ldyBScih7cG9seWdvbkhpZXJhcmNoeTp0Ll9wb2x5Z29uSGllcmFyY2h5LGVsbGlwc29pZDpyLHN0Um90YXRpb246dC5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLHBlclBvc2l0aW9uSGVpZ2h0OiExLGV4dHJ1ZGVkSGVpZ2h0OmksaGVpZ2h0OnMsdmVydGV4Rm9ybWF0OnB0LlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwLGFyY1R5cGU6dC5fYXJjVHlwZX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhSci5wcm90b3R5cGUse3JlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7aWYoIWgodGhpcy5fcmVjdGFuZ2xlKSl7bGV0IHQ9dGhpcy5fcG9seWdvbkhpZXJhcmNoeS5wb3NpdGlvbnM7dGhpcy5fcmVjdGFuZ2xlPVJyLmNvbXB1dGVSZWN0YW5nbGVGcm9tUG9zaXRpb25zKHQsdGhpcy5fZWxsaXBzb2lkLHRoaXMuX2FyY1R5cGUpfXJldHVybiB0aGlzLl9yZWN0YW5nbGV9fSx0ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzKXx8KHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9dkQodGhpcykpLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHN9fX0pO2N5PVJyfSk7dmFyIGF5PXt9O3BlKGF5LHtkZWZhdWx0OigpPT5MRH0pO2Z1bmN0aW9uIEZEKHQsZSl7cmV0dXJuIGgoZSkmJih0PWN5LnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLGN5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBMRCxmeT0kKCgpPT57YXQoKTskdCgpO1JFKCk7TEQ9RkR9KTtmdW5jdGlvbiBERCh0LGUsbixvLHIpe2xldCBzPXlvLmZyb21Qb2ludHMoZSx0KS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKGUsU0UpO1BlLmNvbXB1dGVXaW5kaW5nT3JkZXIyRChzKT09PUNvLkNMT0NLV0lTRSYmKHMucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7bGV0IHUsYyxsPWUubGVuZ3RoLHA9MDtpZihvKWZvcih1PW5ldyBGbG9hdDY0QXJyYXkobCoyKjMpLGM9MDtjPGw7YysrKXtsZXQgXz1lW2NdLGc9ZVsoYysxKSVsXTt1W3ArK109Xy54LHVbcCsrXT1fLnksdVtwKytdPV8ueix1W3ArK109Zy54LHVbcCsrXT1nLnksdVtwKytdPWcuen1lbHNle2xldCBfPTA7aWYocj09PWhlLkdFT0RFU0lDKWZvcihjPTA7YzxsO2MrKylfKz1fZS5zdWJkaXZpZGVMaW5lQ291bnQoZVtjXSxlWyhjKzEpJWxdLG4pO2Vsc2UgaWYocj09PWhlLlJIVU1CKWZvcihjPTA7YzxsO2MrKylfKz1fZS5zdWJkaXZpZGVSaHVtYkxpbmVDb3VudCh0LGVbY10sZVsoYysxKSVsXSxuKTtmb3IodT1uZXcgRmxvYXQ2NEFycmF5KF8qMyksYz0wO2M8bDtjKyspe2xldCBnO3I9PT1oZS5HRU9ERVNJQz9nPV9lLnN1YmRpdmlkZUxpbmUoZVtjXSxlWyhjKzEpJWxdLG4sdmQpOnI9PT1oZS5SSFVNQiYmKGc9X2Uuc3ViZGl2aWRlUmh1bWJMaW5lKHQsZVtjXSxlWyhjKzEpJWxdLG4sdmQpKTtsZXQgYj1nLmxlbmd0aDtmb3IobGV0IFQ9MDtUPGI7KytUKXVbcCsrXT1nW1RdfX1sPXUubGVuZ3RoLzM7bGV0IGQ9bCoyLG09RnQuY3JlYXRlVHlwZWRBcnJheShsLGQpO2ZvcihwPTAsYz0wO2M8bC0xO2MrKyltW3ArK109YyxtW3ArK109YysxO3JldHVybiBtW3ArK109bC0xLG1bcCsrXT0wLG5ldyBjbyh7Z2VvbWV0cnk6bmV3IEJ0KHthdHRyaWJ1dGVzOm5ldyByZSh7cG9zaXRpb246bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp1fSl9KSxpbmRpY2VzOm0scHJpbWl0aXZlVHlwZTpEdC5MSU5FU30pfSl9ZnVuY3Rpb24gQkQodCxlLG4sbyxyKXtsZXQgcz15by5mcm9tUG9pbnRzKGUsdCkucHJvamVjdFBvaW50c09udG9QbGFuZShlLFNFKTtQZS5jb21wdXRlV2luZGluZ09yZGVyMkQocyk9PT1Dby5DTE9DS1dJU0UmJihzLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpO2xldCB1LGMsbD1lLmxlbmd0aCxwPW5ldyBBcnJheShsKSxkPTA7aWYobylmb3IodT1uZXcgRmxvYXQ2NEFycmF5KGwqMiozKjIpLGM9MDtjPGw7KytjKXtwW2NdPWQvMztsZXQgYj1lW2NdLFQ9ZVsoYysxKSVsXTt1W2QrK109Yi54LHVbZCsrXT1iLnksdVtkKytdPWIueix1W2QrK109VC54LHVbZCsrXT1ULnksdVtkKytdPVQuen1lbHNle2xldCBiPTA7aWYocj09PWhlLkdFT0RFU0lDKWZvcihjPTA7YzxsO2MrKyliKz1fZS5zdWJkaXZpZGVMaW5lQ291bnQoZVtjXSxlWyhjKzEpJWxdLG4pO2Vsc2UgaWYocj09PWhlLlJIVU1CKWZvcihjPTA7YzxsO2MrKyliKz1fZS5zdWJkaXZpZGVSaHVtYkxpbmVDb3VudCh0LGVbY10sZVsoYysxKSVsXSxuKTtmb3IodT1uZXcgRmxvYXQ2NEFycmF5KGIqMyoyKSxjPTA7YzxsOysrYyl7cFtjXT1kLzM7bGV0IFQ7cj09PWhlLkdFT0RFU0lDP1Q9X2Uuc3ViZGl2aWRlTGluZShlW2NdLGVbKGMrMSklbF0sbix2ZCk6cj09PWhlLlJIVU1CJiYoVD1fZS5zdWJkaXZpZGVSaHVtYkxpbmUodCxlW2NdLGVbKGMrMSklbF0sbix2ZCkpO2xldCBPPVQubGVuZ3RoO2ZvcihsZXQgRT0wO0U8TzsrK0UpdVtkKytdPVRbRV19fWw9dS5sZW5ndGgvKDMqMik7bGV0IG09cC5sZW5ndGgsXz0obCoyK20pKjIsZz1GdC5jcmVhdGVUeXBlZEFycmF5KGwrbSxfKTtmb3IoZD0wLGM9MDtjPGw7KytjKWdbZCsrXT1jLGdbZCsrXT0oYysxKSVsLGdbZCsrXT1jK2wsZ1tkKytdPShjKzEpJWwrbDtmb3IoYz0wO2M8bTtjKyspe2xldCBiPXBbY107Z1tkKytdPWIsZ1tkKytdPWIrbH1yZXR1cm4gbmV3IGNvKHtnZW9tZXRyeTpuZXcgQnQoe2F0dHJpYnV0ZXM6bmV3IHJlKHtwb3NpdGlvbjpuZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnV9KX0pLGluZGljZXM6ZyxwcmltaXRpdmVUeXBlOkR0LkxJTkVTfSl9KX1mdW5jdGlvbiBBYyh0KXtpZih5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMiLHQpLHkudHlwZU9mLm9iamVjdCgib3B0aW9ucy5wb2x5Z29uSGllcmFyY2h5Iix0LnBvbHlnb25IaWVyYXJjaHkpLHQucGVyUG9zaXRpb25IZWlnaHQmJmgodC5oZWlnaHQpKXRocm93IG5ldyBMKCJDYW5ub3QgdXNlIGJvdGggb3B0aW9ucy5wZXJQb3NpdGlvbkhlaWdodCBhbmQgb3B0aW9ucy5oZWlnaHQiKTtpZihoKHQuYXJjVHlwZSkmJnQuYXJjVHlwZSE9PWhlLkdFT0RFU0lDJiZ0LmFyY1R5cGUhPT1oZS5SSFVNQil0aHJvdyBuZXcgTCgiSW52YWxpZCBhcmNUeXBlLiBWYWxpZCBvcHRpb25zIGFyZSBBcmNUeXBlLkdFT0RFU0lDIGFuZCBBcmNUeXBlLlJIVU1CLiIpO2xldCBlPXQucG9seWdvbkhpZXJhcmNoeSxuPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQsbz10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSxyPXQucGVyUG9zaXRpb25IZWlnaHQ/PyExLGk9ciYmaCh0LmV4dHJ1ZGVkSGVpZ2h0KSxzPXQuYXJjVHlwZT8/aGUuR0VPREVTSUMsZj10LmhlaWdodD8/MCx1PXQuZXh0cnVkZWRIZWlnaHQ/P2Y7aWYoIWkpe2xldCBjPU1hdGgubWF4KGYsdSk7dT1NYXRoLm1pbihmLHUpLGY9Y310aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShuKSx0aGlzLl9ncmFudWxhcml0eT1vLHRoaXMuX2hlaWdodD1mLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PXUsdGhpcy5fYXJjVHlwZT1zLHRoaXMuX3BvbHlnb25IaWVyYXJjaHk9ZSx0aGlzLl9wZXJQb3NpdGlvbkhlaWdodD1yLHRoaXMuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT1pLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5Z29uT3V0bGluZUdlb21ldHJ5Iix0aGlzLnBhY2tlZExlbmd0aD1fZS5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKGUsYSkrWS5wYWNrZWRMZW5ndGgrOH12YXIgU0UsdmQsVUQsa0QsdXksQ0U9JCgoKT0+e2ZjKCk7dmUoKTtMdCgpO1d0KCk7RGUoKTt5ZSgpO2F0KCk7anQoKTskdCgpO2xhKCk7WGUoKTtZZSgpO2FuKCk7c2MoKTtGbygpO3NpKCk7JGUoKTtLdCgpO0xmKCk7cXIoKTt0bigpO2xjKCk7U0U9W10sdmQ9W107QWMucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxuPV9lLnBhY2tQb2x5Z29uSGllcmFyY2h5KHQuX3BvbHlnb25IaWVyYXJjaHksZSxuLGEpLFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxlW24rK109dC5faGVpZ2h0LGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW24rK109dC5fZ3JhbnVsYXJpdHksZVtuKytdPXQuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT8xOjAsZVtuKytdPXQuX3BlclBvc2l0aW9uSGVpZ2h0PzE6MCxlW24rK109dC5fYXJjVHlwZSxlW24rK109dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlW25dPXQucGFja2VkTGVuZ3RoLGV9O1VEPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksa0Q9e3BvbHlnb25IaWVyYXJjaHk6e319O0FjLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wO2xldCBvPV9lLnVucGFja1BvbHlnb25IaWVyYXJjaHkodCxlLGEpO2U9by5zdGFydGluZ0luZGV4LGRlbGV0ZSBvLnN0YXJ0aW5nSW5kZXg7bGV0IHI9WS51bnBhY2sodCxlLFVEKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgaT10W2UrK10scz10W2UrK10sZj10W2UrK10sdT10W2UrK109PT0xLGM9dFtlKytdPT09MSxsPXRbZSsrXSxwPXRbZSsrXSxkPXRbZV07cmV0dXJuIGgobil8fChuPW5ldyBBYyhrRCkpLG4uX3BvbHlnb25IaWVyYXJjaHk9byxuLl9lbGxpcHNvaWQ9WS5jbG9uZShyLG4uX2VsbGlwc29pZCksbi5faGVpZ2h0PWksbi5fZXh0cnVkZWRIZWlnaHQ9cyxuLl9ncmFudWxhcml0eT1mLG4uX3BlclBvc2l0aW9uSGVpZ2h0PWMsbi5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlPXUsbi5fYXJjVHlwZT1sLG4uX29mZnNldEF0dHJpYnV0ZT1wPT09LTE/dm9pZCAwOnAsbi5wYWNrZWRMZW5ndGg9ZCxufTtBYy5mcm9tUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNULHkuZGVmaW5lZCgib3B0aW9ucy5wb3NpdGlvbnMiLHQucG9zaXRpb25zKTtsZXQgZT17cG9seWdvbkhpZXJhcmNoeTp7cG9zaXRpb25zOnQucG9zaXRpb25zfSxoZWlnaHQ6dC5oZWlnaHQsZXh0cnVkZWRIZWlnaHQ6dC5leHRydWRlZEhlaWdodCxlbGxpcHNvaWQ6dC5lbGxpcHNvaWQsZ3JhbnVsYXJpdHk6dC5ncmFudWxhcml0eSxwZXJQb3NpdGlvbkhlaWdodDp0LnBlclBvc2l0aW9uSGVpZ2h0LGFyY1R5cGU6dC5hcmNUeXBlLG9mZnNldEF0dHJpYnV0ZTp0Lm9mZnNldEF0dHJpYnV0ZX07cmV0dXJuIG5ldyBBYyhlKX07QWMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fZWxsaXBzb2lkLG49dC5fZ3JhbnVsYXJpdHksbz10Ll9wb2x5Z29uSGllcmFyY2h5LHI9dC5fcGVyUG9zaXRpb25IZWlnaHQsaT10Ll9hcmNUeXBlLHM9X2UucG9seWdvbk91dGxpbmVzRnJvbUhpZXJhcmNoeShvLCFyLGUpO2lmKHMubGVuZ3RoPT09MClyZXR1cm47bGV0IGYsdT1bXSxjPVAuY2hvcmRMZW5ndGgobixlLm1heGltdW1SYWRpdXMpLGw9dC5faGVpZ2h0LHA9dC5fZXh0cnVkZWRIZWlnaHQsZD10Ll9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGV8fCFQLmVxdWFsc0Vwc2lsb24obCxwLDAsUC5FUFNJTE9OMiksbSxfO2lmKGQpZm9yKF89MDtfPHMubGVuZ3RoO18rKyl7aWYoZj1CRChlLHNbX10sYyxyLGkpLGYuZ2VvbWV0cnk9X2Uuc2NhbGVUb0dlb2RldGljSGVpZ2h0RXh0cnVkZWQoZi5nZW9tZXRyeSxsLHAsZSxyKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBUPWYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzMsTz1uZXcgVWludDhBcnJheShUKTt0Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1A/Tz1PLmZpbGwoMSwwLFQvMik6KG09dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsTz1PLmZpbGwobSkpLGYuZ2VvbWV0cnkuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpPfSl9dS5wdXNoKGYpfWVsc2UgZm9yKF89MDtfPHMubGVuZ3RoO18rKyl7aWYoZj1ERChlLHNbX10sYyxyLGkpLGYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KGYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsbCxlLCFyKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBUPWYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoO209dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjE7bGV0IE89bmV3IFVpbnQ4QXJyYXkoVC8zKS5maWxsKG0pO2YuZ2VvbWV0cnkuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpPfSl9dS5wdXNoKGYpfWxldCBnPWtlLmNvbWJpbmVJbnN0YW5jZXModSlbMF0sYj1ndC5mcm9tVmVydGljZXMoZy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyk7cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpnLmF0dHJpYnV0ZXMsaW5kaWNlczpnLmluZGljZXMscHJpbWl0aXZlVHlwZTpnLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6YixvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O3V5PUFjfSk7dmFyIGx5PXt9O3BlKGx5LHtkZWZhdWx0OigpPT5WRH0pO2Z1bmN0aW9uIEdEKHQsZSl7cmV0dXJuIGgoZSkmJih0PXV5LnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLHV5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBWRCxweT0kKCgpPT57YXQoKTskdCgpO0NFKCk7VkQ9R0R9KTtmdW5jdGlvbiBkeSh0LGUsbil7cmV0dXJuIG48MCYmKG4rPTEpLG4+MSYmKG4tPTEpLG4qNjwxP3QrKGUtdCkqNipuOm4qMjwxP2U6biozPDI/dCsoZS10KSooMi8zLW4pKjY6dH1mdW5jdGlvbiBIKHQsZSxuLG8pe3RoaXMucmVkPXQ/PzEsdGhpcy5ncmVlbj1lPz8xLHRoaXMuYmx1ZT1uPz8xLHRoaXMuYWxwaGE9bz8/MX12YXIgbXksaHkscWksekQsakQsSEQscUQsbmUsUGE9JCgoKT0+e1d0KCk7eWUoKTthdCgpO3NoKCk7S3QoKTtILmZyb21DYXJ0ZXNpYW40PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSxoKGUpPyhlLnJlZD10LngsZS5ncmVlbj10LnksZS5ibHVlPXQueixlLmFscGhhPXQudyxlKTpuZXcgSCh0LngsdC55LHQueix0LncpfTtILmZyb21CeXRlcz1mdW5jdGlvbih0LGUsbixvLHIpe3JldHVybiB0PUguYnl0ZVRvRmxvYXQodD8/MjU1KSxlPUguYnl0ZVRvRmxvYXQoZT8/MjU1KSxuPUguYnl0ZVRvRmxvYXQobj8/MjU1KSxvPUguYnl0ZVRvRmxvYXQobz8/MjU1KSxoKHIpPyhyLnJlZD10LHIuZ3JlZW49ZSxyLmJsdWU9bixyLmFscGhhPW8scik6bmV3IEgodCxlLG4sbyl9O0guZnJvbUFscGhhPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjb2xvciIsdCkseS50eXBlT2YubnVtYmVyKCJhbHBoYSIsZSksaChuKT8obi5yZWQ9dC5yZWQsbi5ncmVlbj10LmdyZWVuLG4uYmx1ZT10LmJsdWUsbi5hbHBoYT1lLG4pOm5ldyBIKHQucmVkLHQuZ3JlZW4sdC5ibHVlLGUpfTtZcy5zdXBwb3J0c1R5cGVkQXJyYXlzKCkmJihteT1uZXcgQXJyYXlCdWZmZXIoNCksaHk9bmV3IFVpbnQzMkFycmF5KG15KSxxaT1uZXcgVWludDhBcnJheShteSkpO0guZnJvbVJnYmE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaHlbMF09dCxILmZyb21CeXRlcyhxaVswXSxxaVsxXSxxaVsyXSxxaVszXSxlKX07SC5mcm9tSHNsPWZ1bmN0aW9uKHQsZSxuLG8scil7dD0odD8/MCklMSxlPWU/PzAsbj1uPz8wLG89bz8/MTtsZXQgaT1uLHM9bixmPW47aWYoZSE9PTApe2xldCB1O248LjU/dT1uKigxK2UpOnU9bitlLW4qZTtsZXQgYz0yKm4tdTtpPWR5KGMsdSx0KzEvMykscz1keShjLHUsdCksZj1keShjLHUsdC0xLzMpfXJldHVybiBoKHIpPyhyLnJlZD1pLHIuZ3JlZW49cyxyLmJsdWU9ZixyLmFscGhhPW8scik6bmV3IEgoaSxzLGYsbyl9O0guZnJvbVJhbmRvbT1mdW5jdGlvbih0LGUpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBuPXQucmVkO2lmKCFoKG4pKXtsZXQgcz10Lm1pbmltdW1SZWQ/PzAsZj10Lm1heGltdW1SZWQ/PzE7eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm1pbmltdW1SZWQiLHMsZiksbj1zK1AubmV4dFJhbmRvbU51bWJlcigpKihmLXMpfWxldCBvPXQuZ3JlZW47aWYoIWgobykpe2xldCBzPXQubWluaW11bUdyZWVuPz8wLGY9dC5tYXhpbXVtR3JlZW4/PzE7eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm1pbmltdW1HcmVlbiIscyxmKSxvPXMrUC5uZXh0UmFuZG9tTnVtYmVyKCkqKGYtcyl9bGV0IHI9dC5ibHVlO2lmKCFoKHIpKXtsZXQgcz10Lm1pbmltdW1CbHVlPz8wLGY9dC5tYXhpbXVtQmx1ZT8/MTt5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygibWluaW11bUJsdWUiLHMsZikscj1zK1AubmV4dFJhbmRvbU51bWJlcigpKihmLXMpfWxldCBpPXQuYWxwaGE7aWYoIWgoaSkpe2xldCBzPXQubWluaW11bUFscGhhPz8wLGY9dC5tYXhpbXVtQWxwaGE/PzE7eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm1pbmltdW1BbHBoYSIscyxmKSxpPXMrUC5uZXh0UmFuZG9tTnVtYmVyKCkqKGYtcyl9cmV0dXJuIGgoZSk/KGUucmVkPW4sZS5ncmVlbj1vLGUuYmx1ZT1yLGUuYWxwaGE9aSxlKTpuZXcgSChuLG8scixpKX07ekQ9L14jKFswLTlhLWZdKShbMC05YS1mXSkoWzAtOWEtZl0pKFswLTlhLWZdKT8kL2ksakQ9L14jKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KT8kL2ksSEQ9L15yZ2JhP1xzKlwoXHMqKFswLTkuXSslPylccypbLFxzXStccyooWzAtOS5dKyU/KVxzKlssXHNdK1xzKihbMC05Ll0rJT8pKD86XHMqWyxccy9dK1xzKihbMC05Ll0rKSk/XHMqXCkkL2kscUQ9L15oc2xhP1xzKlwoXHMqKFswLTkuXSspXHMqWyxcc10rXHMqKFswLTkuXSslKVxzKlssXHNdK1xzKihbMC05Ll0rJSkoPzpccypbLFxzL10rXHMqKFswLTkuXSspKT9ccypcKSQvaTtILmZyb21Dc3NDb2xvclN0cmluZz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLnN0cmluZygiY29sb3IiLHQpLGgoZSl8fChlPW5ldyBIKSx0PXQudHJpbSgpO2xldCBuPUhbdC50b1VwcGVyQ2FzZSgpXTtpZihoKG4pKXJldHVybiBILmNsb25lKG4sZSksZTtsZXQgbz16RC5leGVjKHQpO3JldHVybiBvIT09bnVsbD8oZS5yZWQ9cGFyc2VJbnQob1sxXSwxNikvMTUsZS5ncmVlbj1wYXJzZUludChvWzJdLDE2KS8xNSxlLmJsdWU9cGFyc2VJbnQob1szXSwxNikvMTUsZS5hbHBoYT1wYXJzZUludChvWzRdPz8iZiIsMTYpLzE1LGUpOihvPWpELmV4ZWModCksbyE9PW51bGw/KGUucmVkPXBhcnNlSW50KG9bMV0sMTYpLzI1NSxlLmdyZWVuPXBhcnNlSW50KG9bMl0sMTYpLzI1NSxlLmJsdWU9cGFyc2VJbnQob1szXSwxNikvMjU1LGUuYWxwaGE9cGFyc2VJbnQob1s0XT8/ImZmIiwxNikvMjU1LGUpOihvPUhELmV4ZWModCksbyE9PW51bGw/KGUucmVkPXBhcnNlRmxvYXQob1sxXSkvKG9bMV0uc3Vic3RyKC0xKT09PSIlIj8xMDA6MjU1KSxlLmdyZWVuPXBhcnNlRmxvYXQob1syXSkvKG9bMl0uc3Vic3RyKC0xKT09PSIlIj8xMDA6MjU1KSxlLmJsdWU9cGFyc2VGbG9hdChvWzNdKS8ob1szXS5zdWJzdHIoLTEpPT09IiUiPzEwMDoyNTUpLGUuYWxwaGE9cGFyc2VGbG9hdChvWzRdPz8iMS4wIiksZSk6KG89cUQuZXhlYyh0KSxvIT09bnVsbD9ILmZyb21Ic2wocGFyc2VGbG9hdChvWzFdKS8zNjAscGFyc2VGbG9hdChvWzJdKS8xMDAscGFyc2VGbG9hdChvWzNdKS8xMDAscGFyc2VGbG9hdChvWzRdPz8iMS4wIiksZSk6KGU9dm9pZCAwLGUpKSkpfTtILnBhY2tlZExlbmd0aD00O0gucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxlW24rK109dC5yZWQsZVtuKytdPXQuZ3JlZW4sZVtuKytdPXQuYmx1ZSxlW25dPXQuYWxwaGEsZX07SC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IEgpLG4ucmVkPXRbZSsrXSxuLmdyZWVuPXRbZSsrXSxuLmJsdWU9dFtlKytdLG4uYWxwaGE9dFtlXSxufTtILmJ5dGVUb0Zsb2F0PWZ1bmN0aW9uKHQpe3JldHVybiB0LzI1NX07SC5mbG9hdFRvQnl0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PTE/MjU1OnQqMjU2fDB9O0guY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLnJlZD10LnJlZCxlLmdyZWVuPXQuZ3JlZW4sZS5ibHVlPXQuYmx1ZSxlLmFscGhhPXQuYWxwaGEsZSk6bmV3IEgodC5yZWQsdC5ncmVlbix0LmJsdWUsdC5hbHBoYSl9O0guZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0LnJlZD09PWUucmVkJiZ0LmdyZWVuPT09ZS5ncmVlbiYmdC5ibHVlPT09ZS5ibHVlJiZ0LmFscGhhPT09ZS5hbHBoYX07SC5lcXVhbHNBcnJheT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQucmVkPT09ZVtuXSYmdC5ncmVlbj09PWVbbisxXSYmdC5ibHVlPT09ZVtuKzJdJiZ0LmFscGhhPT09ZVtuKzNdfTtILnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gSC5jbG9uZSh0aGlzLHQpfTtILnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIEguZXF1YWxzKHRoaXMsdCl9O0gucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcz09PXR8fGgodCkmJk1hdGguYWJzKHRoaXMucmVkLXQucmVkKTw9ZSYmTWF0aC5hYnModGhpcy5ncmVlbi10LmdyZWVuKTw9ZSYmTWF0aC5hYnModGhpcy5ibHVlLXQuYmx1ZSk8PWUmJk1hdGguYWJzKHRoaXMuYWxwaGEtdC5hbHBoYSk8PWV9O0gucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMucmVkfSwgJHt0aGlzLmdyZWVufSwgJHt0aGlzLmJsdWV9LCAke3RoaXMuYWxwaGF9KWB9O0gucHJvdG90eXBlLnRvQ3NzQ29sb3JTdHJpbmc9ZnVuY3Rpb24oKXtsZXQgdD1ILmZsb2F0VG9CeXRlKHRoaXMucmVkKSxlPUguZmxvYXRUb0J5dGUodGhpcy5ncmVlbiksbj1ILmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSk7cmV0dXJuIHRoaXMuYWxwaGE9PT0xP2ByZ2IoJHt0fSwke2V9LCR7bn0pYDpgcmdiYSgke3R9LCR7ZX0sJHtufSwke3RoaXMuYWxwaGF9KWB9O0gucHJvdG90eXBlLnRvQ3NzSGV4U3RyaW5nPWZ1bmN0aW9uKCl7bGV0IHQ9SC5mbG9hdFRvQnl0ZSh0aGlzLnJlZCkudG9TdHJpbmcoMTYpO3QubGVuZ3RoPDImJih0PWAwJHt0fWApO2xldCBlPUguZmxvYXRUb0J5dGUodGhpcy5ncmVlbikudG9TdHJpbmcoMTYpO2UubGVuZ3RoPDImJihlPWAwJHtlfWApO2xldCBuPUguZmxvYXRUb0J5dGUodGhpcy5ibHVlKS50b1N0cmluZygxNik7aWYobi5sZW5ndGg8MiYmKG49YDAke259YCksdGhpcy5hbHBoYTwxKXtsZXQgbz1ILmZsb2F0VG9CeXRlKHRoaXMuYWxwaGEpLnRvU3RyaW5nKDE2KTtyZXR1cm4gby5sZW5ndGg8MiYmKG89YDAke299YCksYCMke3R9JHtlfSR7bn0ke299YH1yZXR1cm5gIyR7dH0ke2V9JHtufWB9O0gucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24odCl7bGV0IGU9SC5mbG9hdFRvQnl0ZSh0aGlzLnJlZCksbj1ILmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pLG89SC5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpLHI9SC5mbG9hdFRvQnl0ZSh0aGlzLmFscGhhKTtyZXR1cm4gaCh0KT8odFswXT1lLHRbMV09bix0WzJdPW8sdFszXT1yLHQpOltlLG4sbyxyXX07SC5wcm90b3R5cGUudG9SZ2JhPWZ1bmN0aW9uKCl7cmV0dXJuIHFpWzBdPUguZmxvYXRUb0J5dGUodGhpcy5yZWQpLHFpWzFdPUguZmxvYXRUb0J5dGUodGhpcy5ncmVlbikscWlbMl09SC5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpLHFpWzNdPUguZmxvYXRUb0J5dGUodGhpcy5hbHBoYSksaHlbMF19O0gucHJvdG90eXBlLmJyaWdodGVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlcigibWFnbml0dWRlIix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygibWFnbml0dWRlIix0LDApLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSx0PTEtdCxlLnJlZD0xLSgxLXRoaXMucmVkKSp0LGUuZ3JlZW49MS0oMS10aGlzLmdyZWVuKSp0LGUuYmx1ZT0xLSgxLXRoaXMuYmx1ZSkqdCxlLmFscGhhPXRoaXMuYWxwaGEsZX07SC5wcm90b3R5cGUuZGFya2VuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlcigibWFnbml0dWRlIix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygibWFnbml0dWRlIix0LDApLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSx0PTEtdCxlLnJlZD10aGlzLnJlZCp0LGUuZ3JlZW49dGhpcy5ncmVlbip0LGUuYmx1ZT10aGlzLmJsdWUqdCxlLmFscGhhPXRoaXMuYWxwaGEsZX07SC5wcm90b3R5cGUud2l0aEFscGhhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEguZnJvbUFscGhhKHRoaXMsdCxlKX07SC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZCtlLnJlZCxuLmdyZWVuPXQuZ3JlZW4rZS5ncmVlbixuLmJsdWU9dC5ibHVlK2UuYmx1ZSxuLmFscGhhPXQuYWxwaGErZS5hbHBoYSxufTtILnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi5yZWQ9dC5yZWQtZS5yZWQsbi5ncmVlbj10LmdyZWVuLWUuZ3JlZW4sbi5ibHVlPXQuYmx1ZS1lLmJsdWUsbi5hbHBoYT10LmFscGhhLWUuYWxwaGEsbn07SC5tdWx0aXBseT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ucmVkPXQucmVkKmUucmVkLG4uZ3JlZW49dC5ncmVlbiplLmdyZWVuLG4uYmx1ZT10LmJsdWUqZS5ibHVlLG4uYWxwaGE9dC5hbHBoYSplLmFscGhhLG59O0guZGl2aWRlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi5yZWQ9dC5yZWQvZS5yZWQsbi5ncmVlbj10LmdyZWVuL2UuZ3JlZW4sbi5ibHVlPXQuYmx1ZS9lLmJsdWUsbi5hbHBoYT10LmFscGhhL2UuYWxwaGEsbn07SC5tb2Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZCVlLnJlZCxuLmdyZWVuPXQuZ3JlZW4lZS5ncmVlbixuLmJsdWU9dC5ibHVlJWUuYmx1ZSxuLmFscGhhPXQuYWxwaGElZS5hbHBoYSxufTtILmxlcnA9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic3RhcnQiLHQpLHkudHlwZU9mLm9iamVjdCgiZW5kIixlKSx5LnR5cGVPZi5udW1iZXIoInQiLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvLnJlZD1QLmxlcnAodC5yZWQsZS5yZWQsbiksby5ncmVlbj1QLmxlcnAodC5ncmVlbixlLmdyZWVuLG4pLG8uYmx1ZT1QLmxlcnAodC5ibHVlLGUuYmx1ZSxuKSxvLmFscGhhPVAubGVycCh0LmFscGhhLGUuYWxwaGEsbiksb307SC5tdWx0aXBseUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjb2xvciIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZCplLG4uZ3JlZW49dC5ncmVlbiplLG4uYmx1ZT10LmJsdWUqZSxuLmFscGhhPXQuYWxwaGEqZSxufTtILmRpdmlkZUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjb2xvciIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZC9lLG4uZ3JlZW49dC5ncmVlbi9lLG4uYmx1ZT10LmJsdWUvZSxuLmFscGhhPXQuYWxwaGEvZSxufTtILkFMSUNFQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjBGOEZGIikpO0guQU5USVFVRVdISVRFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGQUVCRDciKSk7SC5BUVVBPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZGRkYiKSk7SC5BUVVBTUFSSU5FPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3RkZGRDQiKSk7SC5BWlVSRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjBGRkZGIikpO0guQkVJR0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0Y1RjVEQyIpKTtILkJJU1FVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZFNEM0IikpO0guQkxBQ0s9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwMDAwMCIpKTtILkJMQU5DSEVEQUxNT05EPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkVCQ0QiKSk7SC5CTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwRkYiKSk7SC5CTFVFVklPTEVUPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4QTJCRTIiKSk7SC5CUk9XTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQTUyQTJBIikpO0guQlVSTFlXT09EPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNERUI4ODciKSk7SC5DQURFVEJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzVGOUVBMCIpKTtILkNIQVJUUkVVU0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzdGRkYwMCIpKTtILkNIT0NPTEFURT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRDI2OTFFIikpO0guQ09SQUw9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGN0Y1MCIpKTtILkNPUk5GTE9XRVJCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2NDk1RUQiKSk7SC5DT1JOU0lMSz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGOERDIikpO0guQ1JJTVNPTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjREMxNDNDIikpO0guQ1lBTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBGRkZGIikpO0guREFSS0JMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwMDA4QiIpKTtILkRBUktDWUFOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDhCOEIiKSk7SC5EQVJLR09MREVOUk9EPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCODg2MEIiKSk7SC5EQVJLR1JBWT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQTlBOUE5IikpO0guREFSS0dSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDY0MDAiKSk7SC5EQVJLR1JFWT1ILkRBUktHUkFZO0guREFSS0tIQUtJPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCREI3NkIiKSk7SC5EQVJLTUFHRU5UQT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEIwMDhCIikpO0guREFSS09MSVZFR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzU1NkIyRiIpKTtILkRBUktPUkFOR0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGOEMwMCIpKTtILkRBUktPUkNISUQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzk5MzJDQyIpKTtILkRBUktSRUQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzhCMDAwMCIpKTtILkRBUktTQUxNT049T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0U5OTY3QSIpKTtILkRBUktTRUFHUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEZCQzhGIikpO0guREFSS1NMQVRFQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDgzRDhCIikpO0guREFSS1NMQVRFR1JBWT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMkY0RjRGIikpO0guREFSS1NMQVRFR1JFWT1ILkRBUktTTEFURUdSQVk7SC5EQVJLVFVSUVVPSVNFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMENFRDEiKSk7SC5EQVJLVklPTEVUPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5NDAwRDMiKSk7SC5ERUVQUElOSz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkYxNDkzIikpO0guREVFUFNLWUJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwQkZGRiIpKTtILkRJTUdSQVk9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzY5Njk2OSIpKTtILkRJTUdSRVk9SC5ESU1HUkFZO0guRE9ER0VSQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMUU5MEZGIikpO0guRklSRUJSSUNLPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCMjIyMjIiKSk7SC5GTE9SQUxXSElURT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGQUYwIikpO0guRk9SRVNUR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzIyOEIyMiIpKTtILkZVQ0hTSUE9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMDBGRiIpKTtILkdBSU5TQk9STz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRENEQ0RDIikpO0guR0hPU1RXSElURT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjhGOEZGIikpO0guR09MRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZENzAwIikpO0guR09MREVOUk9EPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEQUE1MjAiKSk7SC5HUkFZPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4MDgwODAiKSk7SC5HUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDA4MDAwIikpO0guR1JFRU5ZRUxMT1c9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0FERkYyRiIpKTtILkdSRVk9SC5HUkFZO0guSE9ORVlERVc9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0YwRkZGMCIpKTtILkhPVFBJTks9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGNjlCNCIpKTtILklORElBTlJFRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQ0Q1QzVDIikpO0guSU5ESUdPPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0QjAwODIiKSk7SC5JVk9SWT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGRkYwIikpO0guS0hBS0k9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0YwRTY4QyIpKTtILkxBVkVOREVSPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFNkU2RkEiKSk7SC5MQVZFTkRBUl9CTFVTSD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGMEY1IikpO0guTEFXTkdSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3Q0ZDMDAiKSk7SC5MRU1PTkNISUZGT049T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkFDRCIpKTtILkxJR0hUQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQUREOEU2IikpO0guTElHSFRDT1JBTD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjA4MDgwIikpO0guTElHSFRDWUFOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFMEZGRkYiKSk7SC5MSUdIVEdPTERFTlJPRFlFTExPVz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkFGQUQyIikpO0guTElHSFRHUkFZPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEM0QzRDMiKSk7SC5MSUdIVEdSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5MEVFOTAiKSk7SC5MSUdIVEdSRVk9SC5MSUdIVEdSQVk7SC5MSUdIVFBJTks9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGQjZDMSIpKTtILkxJR0hUU0VBR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzIwQjJBQSIpKTtILkxJR0hUU0tZQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjODdDRUZBIikpO0guTElHSFRTTEFURUdSQVk9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzc3ODg5OSIpKTtILkxJR0hUU0xBVEVHUkVZPUguTElHSFRTTEFURUdSQVk7SC5MSUdIVFNURUVMQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQjBDNERFIikpO0guTElHSFRZRUxMT1c9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkZFMCIpKTtILkxJTUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwRkYwMCIpKTtILkxJTUVHUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMzJDRDMyIikpO0guTElORU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZBRjBFNiIpKTtILk1BR0VOVEE9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMDBGRiIpKTtILk1BUk9PTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjODAwMDAwIikpO0guTUVESVVNQVFVQU1BUklORT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNjZDREFBIikpO0guTUVESVVNQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDAwMENEIikpO0guTUVESVVNT1JDSElEPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCQTU1RDMiKSk7SC5NRURJVU1QVVJQTEU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzkzNzBEQiIpKTtILk1FRElVTVNFQUdSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMzQ0IzNzEiKSk7SC5NRURJVU1TTEFURUJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzdCNjhFRSIpKTtILk1FRElVTVNQUklOR0dSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZBOUEiKSk7SC5NRURJVU1UVVJRVU9JU0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzQ4RDFDQyIpKTtILk1FRElVTVZJT0xFVFJFRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQzcxNTg1IikpO0guTUlETklHSFRCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMxOTE5NzAiKSk7SC5NSU5UQ1JFQU09T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0Y1RkZGQSIpKTtILk1JU1RZUk9TRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZFNEUxIikpO0guTU9DQ0FTSU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRTRCNSIpKTtILk5BVkFKT1dISVRFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkRFQUQiKSk7SC5OQVZZPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwODAiKSk7SC5PTERMQUNFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGREY1RTYiKSk7SC5PTElWRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjODA4MDAwIikpO0guT0xJVkVEUkFCPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2QjhFMjMiKSk7SC5PUkFOR0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGQTUwMCIpKTtILk9SQU5HRVJFRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkY0NTAwIikpO0guT1JDSElEPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEQTcwRDYiKSk7SC5QQUxFR09MREVOUk9EPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFRUU4QUEiKSk7SC5QQUxFR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzk4RkI5OCIpKTtILlBBTEVUVVJRVU9JU0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0FGRUVFRSIpKTtILlBBTEVWSU9MRVRSRUQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0RCNzA5MyIpKTtILlBBUEFZQVdISVA9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRUZENSIpKTtILlBFQUNIUFVGRj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZEQUI5IikpO0guUEVSVT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQ0Q4NTNGIikpO0guUElOSz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZDMENCIikpO0guUExVTT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRERBMEREIikpO0guUE9XREVSQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQjBFMEU2IikpO0guUFVSUExFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4MDAwODAiKSk7SC5SRUQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMDAwMCIpKTtILlJPU1lCUk9XTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQkM4RjhGIikpO0guUk9ZQUxCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0MTY5RTEiKSk7SC5TQURETEVCUk9XTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEI0NTEzIikpO0guU0FMTU9OPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGQTgwNzIiKSk7SC5TQU5EWUJST1dOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGNEE0NjAiKSk7SC5TRUFHUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMkU4QjU3IikpO0guU0VBU0hFTEw9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRjVFRSIpKTtILlNJRU5OQT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQTA1MjJEIikpO0guU0lMVkVSPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNDMEMwQzAiKSk7SC5TS1lCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4N0NFRUIiKSk7SC5TTEFURUJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzZBNUFDRCIpKTtILlNMQVRFR1JBWT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNzA4MDkwIikpO0guU0xBVEVHUkVZPUguU0xBVEVHUkFZO0guU05PVz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGQUZBIikpO0guU1BSSU5HR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwRkY3RiIpKTtILlNURUVMQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDY4MkI0IikpO0guVEFOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEMkI0OEMiKSk7SC5URUFMPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDgwODAiKSk7SC5USElTVExFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEOEJGRDgiKSk7SC5UT01BVE89T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGNjM0NyIpKTtILlRVUlFVT0lTRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDBFMEQwIikpO0guVklPTEVUPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFRTgyRUUiKSk7SC5XSEVBVD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjVERUIzIikpO0guV0hJVEU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkZGRiIpKTtILldISVRFU01PS0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0Y1RjVGNSIpKTtILllFTExPVz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGRjAwIikpO0guWUVMTE9XR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzlBQ0QzMiIpKTtILlRSQU5TUEFSRU5UPU9iamVjdC5mcmVlemUobmV3IEgoMCwwLDAsMCkpO25lPUh9KTtmdW5jdGlvbiBLRCh0LGUsbixvLHIpe2xldCBpPUlFO2kubGVuZ3RoPXI7bGV0IHMsZj1uLnJlZCx1PW4uZ3JlZW4sYz1uLmJsdWUsbD1uLmFscGhhLHA9by5yZWQsZD1vLmdyZWVuLG09by5ibHVlLF89by5hbHBoYTtpZihuZS5lcXVhbHMobixvKSl7Zm9yKHM9MDtzPHI7cysrKWlbc109bmUuY2xvbmUobik7cmV0dXJuIGl9bGV0IGc9KHAtZikvcixiPShkLXUpL3IsVD0obS1jKS9yLE89KF8tbCkvcjtmb3Iocz0wO3M8cjtzKyspaVtzXT1uZXcgbmUoZitzKmcsdStzKmIsYytzKlQsbCtzKk8pO3JldHVybiBpfWZ1bmN0aW9uIFFmKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9zaXRpb25zLG49dC5jb2xvcnMsbz10LndpZHRoPz8xLHI9dC5jb2xvcnNQZXJWZXJ0ZXg/PyExO2lmKCFoKGUpfHxlLmxlbmd0aDwyKXRocm93IG5ldyBMKCJBdCBsZWFzdCB0d28gcG9zaXRpb25zIGFyZSByZXF1aXJlZC4iKTtpZih0eXBlb2YgbyE9Im51bWJlciIpdGhyb3cgbmV3IEwoIndpZHRoIG11c3QgYmUgYSBudW1iZXIiKTtpZihoKG4pJiYociYmbi5sZW5ndGg8ZS5sZW5ndGh8fCFyJiZuLmxlbmd0aDxlLmxlbmd0aC0xKSl0aHJvdyBuZXcgTCgiY29sb3JzIGhhcyBhbiBpbnZhbGlkIGxlbmd0aC4iKTt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9jb2xvcnM9bix0aGlzLl93aWR0aD1vLHRoaXMuX2NvbG9yc1BlclZlcnRleD1yLHRoaXMuX3ZlcnRleEZvcm1hdD1wdC5jbG9uZSh0LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVCksdGhpcy5fYXJjVHlwZT10LmFyY1R5cGU/P2hlLkdFT0RFU0lDLHRoaXMuX2dyYW51bGFyaXR5PXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQpLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBvbHlsaW5lR2VvbWV0cnkiO2xldCBpPTErZS5sZW5ndGgqYS5wYWNrZWRMZW5ndGg7aSs9aChuKT8xK24ubGVuZ3RoKm5lLnBhY2tlZExlbmd0aDoxLHRoaXMucGFja2VkTGVuZ3RoPWkrWS5wYWNrZWRMZW5ndGgrcHQucGFja2VkTGVuZ3RoKzR9dmFyIElFLHZFLEZFLGJjLHhFLFBFLE1FLE5FLF95LExFPSQoKCk9PntmYygpO2pyKCk7dmUoKTtMdCgpO1BhKCk7RGUoKTt5ZSgpO2F0KCk7anQoKTskdCgpO1hlKCk7WWUoKTthbigpO3ZwKCk7JGUoKTtLdCgpO3lhKCk7dG4oKTtSbygpO0lFPVtdO1FmLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJhcnJheSBpcyByZXF1aXJlZCIpO249bj8/MDtsZXQgbyxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2ZvcihlW24rK109aSxvPTA7bzxpOysrbyxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2socltvXSxlLG4pO2xldCBzPXQuX2NvbG9ycztmb3IoaT1oKHMpP3MubGVuZ3RoOjAsZVtuKytdPWksbz0wO288aTsrK28sbis9bmUucGFja2VkTGVuZ3RoKW5lLnBhY2soc1tvXSxlLG4pO3JldHVybiBZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX3dpZHRoLGVbbisrXT10Ll9jb2xvcnNQZXJWZXJ0ZXg/MTowLGVbbisrXT10Ll9hcmNUeXBlLGVbbl09dC5fZ3JhbnVsYXJpdHksZX07dkU9WS5jbG9uZShZLlVOSVRfU1BIRVJFKSxGRT1uZXcgcHQsYmM9e3Bvc2l0aW9uczp2b2lkIDAsY29sb3JzOnZvaWQgMCxlbGxpcHNvaWQ6dkUsdmVydGV4Rm9ybWF0OkZFLHdpZHRoOnZvaWQgMCxjb2xvcnNQZXJWZXJ0ZXg6dm9pZCAwLGFyY1R5cGU6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMH07UWYudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPWU/PzA7bGV0IG8scj10W2UrK10saT1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPWEucGFja2VkTGVuZ3RoKWlbb109YS51bnBhY2sodCxlKTtyPXRbZSsrXTtsZXQgcz1yPjA/bmV3IEFycmF5KHIpOnZvaWQgMDtmb3Iobz0wO288cjsrK28sZSs9bmUucGFja2VkTGVuZ3RoKXNbb109bmUudW5wYWNrKHQsZSk7bGV0IGY9WS51bnBhY2sodCxlLHZFKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgdT1wdC51bnBhY2sodCxlLEZFKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IGM9dFtlKytdLGw9dFtlKytdPT09MSxwPXRbZSsrXSxkPXRbZV07cmV0dXJuIGgobik/KG4uX3Bvc2l0aW9ucz1pLG4uX2NvbG9ycz1zLG4uX2VsbGlwc29pZD1ZLmNsb25lKGYsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUodSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX3dpZHRoPWMsbi5fY29sb3JzUGVyVmVydGV4PWwsbi5fYXJjVHlwZT1wLG4uX2dyYW51bGFyaXR5PWQsbik6KGJjLnBvc2l0aW9ucz1pLGJjLmNvbG9ycz1zLGJjLndpZHRoPWMsYmMuY29sb3JzUGVyVmVydGV4PWwsYmMuYXJjVHlwZT1wLGJjLmdyYW51bGFyaXR5PWQsbmV3IFFmKGJjKSl9O3hFPW5ldyBhLFBFPW5ldyBhLE1FPW5ldyBhLE5FPW5ldyBhO1FmLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3dpZHRoLG49dC5fdmVydGV4Rm9ybWF0LG89dC5fY29sb3JzLHI9dC5fY29sb3JzUGVyVmVydGV4LGk9dC5fYXJjVHlwZSxzPXQuX2dyYW51bGFyaXR5LGY9dC5fZWxsaXBzb2lkLHUsYyxsLHA9W10sZD14bih0Ll9wb3NpdGlvbnMsYS5lcXVhbHNFcHNpbG9uLCExLHApO2lmKGgobykmJnAubGVuZ3RoPjApe2xldCBEPTAsej1wWzBdO289by5maWx0ZXIoZnVuY3Rpb24oaixrKXtsZXQgcT0hMTtyZXR1cm4gcj9xPWs9PT16fHxrPT09MCYmej09PTE6cT1rKzE9PT16LHE/KEQrKyx6PXBbRF0sITEpOiEwfSl9bGV0IG09ZC5sZW5ndGg7aWYobTwyfHxlPD0wKXJldHVybjtpZihpPT09aGUuR0VPREVTSUN8fGk9PT1oZS5SSFVNQil7bGV0IEQsejtpPT09aGUuR0VPREVTSUM/KEQ9UC5jaG9yZExlbmd0aChzLGYubWF4aW11bVJhZGl1cyksej1Bbi5udW1iZXJPZlBvaW50cyk6KEQ9cyx6PUFuLm51bWJlck9mUG9pbnRzUmh1bWJMaW5lKTtsZXQgaj1Bbi5leHRyYWN0SGVpZ2h0cyhkLGYpO2lmKGgobykpe2xldCBrPTE7Zm9yKHU9MDt1PG0tMTsrK3Upays9eihkW3VdLGRbdSsxXSxEKTtsZXQgcT1uZXcgQXJyYXkoayksVz0wO2Zvcih1PTA7dTxtLTE7Kyt1KXtsZXQgUj1kW3VdLG50PWRbdSsxXSxjdD1vW3VdLGx0PXooUixudCxEKTtpZihyJiZ1PGspe2xldCBfdD1vW3UrMV0sb3Q9S0QoUixudCxjdCxfdCxsdCkseHQ9b3QubGVuZ3RoO2ZvcihjPTA7Yzx4dDsrK2MpcVtXKytdPW90W2NdfWVsc2UgZm9yKGM9MDtjPGx0OysrYylxW1crK109bmUuY2xvbmUoY3QpfXFbV109bmUuY2xvbmUob1tvLmxlbmd0aC0xXSksbz1xLElFLmxlbmd0aD0wfWk9PT1oZS5HRU9ERVNJQz9kPUFuLmdlbmVyYXRlQ2FydGVzaWFuQXJjKHtwb3NpdGlvbnM6ZCxtaW5EaXN0YW5jZTpELGVsbGlwc29pZDpmLGhlaWdodDpqfSk6ZD1Bbi5nZW5lcmF0ZUNhcnRlc2lhblJodW1iQXJjKHtwb3NpdGlvbnM6ZCxncmFudWxhcml0eTpELGVsbGlwc29pZDpmLGhlaWdodDpqfSl9bT1kLmxlbmd0aDtsZXQgXz1tKjQtNCxnPW5ldyBGbG9hdDY0QXJyYXkoXyozKSxiPW5ldyBGbG9hdDY0QXJyYXkoXyozKSxUPW5ldyBGbG9hdDY0QXJyYXkoXyozKSxPPW5ldyBGbG9hdDMyQXJyYXkoXyoyKSxFPW4uc3Q/bmV3IEZsb2F0MzJBcnJheShfKjIpOnZvaWQgMCx3PWgobyk/bmV3IFVpbnQ4QXJyYXkoXyo0KTp2b2lkIDAsQz0wLE09MCxOPTAsRj0wLEk7Zm9yKGM9MDtjPG07KytjKXtjPT09MD8oST14RSxhLnN1YnRyYWN0KGRbMF0sZFsxXSxJKSxhLmFkZChkWzBdLEksSSkpOkk9ZFtjLTFdLGEuY2xvbmUoSSxNRSksYS5jbG9uZShkW2NdLFBFKSxjPT09bS0xPyhJPXhFLGEuc3VidHJhY3QoZFttLTFdLGRbbS0yXSxJKSxhLmFkZChkW20tMV0sSSxJKSk6ST1kW2MrMV0sYS5jbG9uZShJLE5FKTtsZXQgRCx6O2godykmJihjIT09MCYmIXI/RD1vW2MtMV06RD1vW2NdLGMhPT1tLTEmJih6PW9bY10pKTtsZXQgaj1jPT09MD8yOjAsaz1jPT09bS0xPzI6NDtmb3IobD1qO2w8azsrK2wpe2EucGFjayhQRSxnLEMpLGEucGFjayhNRSxiLEMpLGEucGFjayhORSxULEMpLEMrPTM7bGV0IHE9bC0yPDA/LTE6MTtpZihPW00rK109MioobCUyKS0xLE9bTSsrXT1xKmUsbi5zdCYmKEVbTisrXT1jLyhtLTEpLEVbTisrXT1NYXRoLm1heChPW00tMl0sMCkpLGgodykpe2xldCBXPWw8Mj9EOno7d1tGKytdPW5lLmZsb2F0VG9CeXRlKFcucmVkKSx3W0YrK109bmUuZmxvYXRUb0J5dGUoVy5ncmVlbiksd1tGKytdPW5lLmZsb2F0VG9CeXRlKFcuYmx1ZSksd1tGKytdPW5lLmZsb2F0VG9CeXRlKFcuYWxwaGEpfX19bGV0IHY9bmV3IHJlO3YucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpnfSksdi5wcmV2UG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSksdi5uZXh0UG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpUfSksdi5leHBhbmRBbmRXaWR0aD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6T30pLG4uc3QmJih2LnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpFfSkpLGgodykmJih2LmNvbG9yPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjQsdmFsdWVzOncsbm9ybWFsaXplOiEwfSkpO2xldCBCPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoXyxtKjYtNiksQT0wLFM9MCx4PW0tMTtmb3IoYz0wO2M8eDsrK2MpQltTKytdPUEsQltTKytdPUErMixCW1MrK109QSsxLEJbUysrXT1BKzEsQltTKytdPUErMixCW1MrK109QSszLEErPTQ7cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczp2LGluZGljZXM6QixwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpndC5mcm9tUG9pbnRzKGQpLGdlb21ldHJ5VHlwZTpNaS5QT0xZTElORVN9KX07X3k9UWZ9KTt2YXIgeXk9e307cGUoeXkse2RlZmF1bHQ6KCk9PlhEfSk7ZnVuY3Rpb24gV0QodCxlKXtyZXR1cm4gaChlKSYmKHQ9X3kudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksX3kuY3JlYXRlR2VvbWV0cnkodCl9dmFyIFhELGd5PSQoKCk9PnthdCgpOyR0KCk7TEUoKTtYRD1XRH0pO2Z1bmN0aW9uIFlEKHQsZSxuLG8pe2xldCByPW5ldyByZTtvLnBvc2l0aW9uJiYoci5wb3NpdGlvbj1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnR9KSk7bGV0IGk9ZS5sZW5ndGgscz10Lmxlbmd0aC8zLGY9KHMtaSoyKS8oaSoyKSx1PVBlLnRyaWFuZ3VsYXRlKGUpLGM9KGYtMSkqaSo2K3UubGVuZ3RoKjIsbD1GdC5jcmVhdGVUeXBlZEFycmF5KHMsYykscCxkLG0sXyxnLGIsVD1pKjIsTz0wO2ZvcihwPTA7cDxmLTE7cCsrKXtmb3IoZD0wO2Q8aS0xO2QrKyltPWQqMitwKmkqMixiPW0rVCxfPW0rMSxnPV8rVCxsW08rK109XyxsW08rK109bSxsW08rK109ZyxsW08rK109ZyxsW08rK109bSxsW08rK109YjttPWkqMi0yK3AqaSoyLF89bSsxLGc9XytULGI9bStULGxbTysrXT1fLGxbTysrXT1tLGxbTysrXT1nLGxbTysrXT1nLGxbTysrXT1tLGxbTysrXT1ifWlmKG8uc3R8fG8udGFuZ2VudHx8by5iaXRhbmdlbnQpe2xldCBDPW5ldyBGbG9hdDMyQXJyYXkocyoyKSxNPTEvKGYtMSksTj0xL24uaGVpZ2h0LEY9bi5oZWlnaHQvMixJLHYsQj0wO2ZvcihwPTA7cDxmO3ArKyl7Zm9yKEk9cCpNLHY9TiooZVswXS55K0YpLENbQisrXT1JLENbQisrXT12LGQ9MTtkPGk7ZCsrKXY9TiooZVtkXS55K0YpLENbQisrXT1JLENbQisrXT12LENbQisrXT1JLENbQisrXT12O3Y9TiooZVswXS55K0YpLENbQisrXT1JLENbQisrXT12fWZvcihkPTA7ZDxpO2QrKylJPTAsdj1OKihlW2RdLnkrRiksQ1tCKytdPUksQ1tCKytdPXY7Zm9yKGQ9MDtkPGk7ZCsrKUk9KGYtMSkqTSx2PU4qKGVbZF0ueStGKSxDW0IrK109SSxDW0IrK109djtyLnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpuZXcgRmxvYXQzMkFycmF5KEMpfSl9bGV0IEU9cy1pKjI7Zm9yKHA9MDtwPHUubGVuZ3RoO3ArPTMpe2xldCBDPXVbcF0rRSxNPXVbcCsxXStFLE49dVtwKzJdK0U7bFtPKytdPUMsbFtPKytdPU0sbFtPKytdPU4sbFtPKytdPU4raSxsW08rK109TStpLGxbTysrXT1DK2l9bGV0IHc9bmV3IEJ0KHthdHRyaWJ1dGVzOnIsaW5kaWNlczpsLGJvdW5kaW5nU3BoZXJlOmd0LmZyb21WZXJ0aWNlcyh0KSxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFU30pO2lmKG8ubm9ybWFsJiYodz1rZS5jb21wdXRlTm9ybWFsKHcpKSxvLnRhbmdlbnR8fG8uYml0YW5nZW50KXt0cnl7dz1rZS5jb21wdXRlVGFuZ2VudEFuZEJpdGFuZ2VudCh3KX1jYXRjaHt1ZCgicG9seWxpbmUtdm9sdW1lLXRhbmdlbnQtYml0YW5nZW50IiwiVW5hYmxlIHRvIGNvbXB1dGUgdGFuZ2VudHMgYW5kIGJpdGFuZ2VudHMgZm9yIHBvbHlsaW5lIHZvbHVtZSBnZW9tZXRyeSIpfW8udGFuZ2VudHx8KHcuYXR0cmlidXRlcy50YW5nZW50PXZvaWQgMCksby5iaXRhbmdlbnR8fCh3LmF0dHJpYnV0ZXMuYml0YW5nZW50PXZvaWQgMCksby5zdHx8KHcuYXR0cmlidXRlcy5zdD12b2lkIDApfXJldHVybiB3fWZ1bmN0aW9uIHR1KHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9seWxpbmVQb3NpdGlvbnMsbj10LnNoYXBlUG9zaXRpb25zO2lmKCFoKGUpKXRocm93IG5ldyBMKCJvcHRpb25zLnBvbHlsaW5lUG9zaXRpb25zIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBMKCJvcHRpb25zLnNoYXBlUG9zaXRpb25zIGlzIHJlcXVpcmVkLiIpO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX3NoYXBlPW4sdGhpcy5fZWxsaXBzb2lkPVkuY2xvbmUodC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCksdGhpcy5fY29ybmVyVHlwZT10LmNvcm5lclR5cGU/P2ZuLlJPVU5ERUQsdGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKHQudmVydGV4Rm9ybWF0Pz9wdC5ERUZBVUxUKSx0aGlzLl9ncmFudWxhcml0eT10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5bGluZVZvbHVtZUdlb21ldHJ5IjtsZXQgbz0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoO28rPTErbi5sZW5ndGgqSi5wYWNrZWRMZW5ndGgsdGhpcy5wYWNrZWRMZW5ndGg9bytZLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrMn12YXIgREUsQkUsSmYsJEQsQXksVUU9JCgoKT0+e2pyKCk7Q2YoKTt2ZSgpO1VlKCk7THQoKTtEZSgpO2hjKCk7eWUoKTthdCgpO2p0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTtzaSgpOyRlKCk7S3QoKTtXMCgpO3FyKCk7bWQoKTt0bigpO1JvKCk7bGMoKTt0dS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgTCgidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighaChlKSl0aHJvdyBuZXcgTCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtuPW4/PzA7bGV0IG8scj10Ll9wb3NpdGlvbnMsaT1yLmxlbmd0aDtmb3IoZVtuKytdPWksbz0wO288aTsrK28sbis9YS5wYWNrZWRMZW5ndGgpYS5wYWNrKHJbb10sZSxuKTtsZXQgcz10Ll9zaGFwZTtmb3IoaT1zLmxlbmd0aCxlW24rK109aSxvPTA7bzxpOysrbyxuKz1KLnBhY2tlZExlbmd0aClKLnBhY2soc1tvXSxlLG4pO3JldHVybiBZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2Nvcm5lclR5cGUsZVtuXT10Ll9ncmFudWxhcml0eSxlfTtERT1ZLmNsb25lKFkuVU5JVF9TUEhFUkUpLEJFPW5ldyBwdCxKZj17cG9seWxpbmVQb3NpdGlvbnM6dm9pZCAwLHNoYXBlUG9zaXRpb25zOnZvaWQgMCxlbGxpcHNvaWQ6REUsdmVydGV4Rm9ybWF0OkJFLGNvcm5lclR5cGU6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMH07dHUudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPWU/PzA7bGV0IG8scj10W2UrK10saT1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPWEucGFja2VkTGVuZ3RoKWlbb109YS51bnBhY2sodCxlKTtyPXRbZSsrXTtsZXQgcz1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPUoucGFja2VkTGVuZ3RoKXNbb109Si51bnBhY2sodCxlKTtsZXQgZj1ZLnVucGFjayh0LGUsREUpO2UrPVkucGFja2VkTGVuZ3RoO2xldCB1PXB0LnVucGFjayh0LGUsQkUpO2UrPXB0LnBhY2tlZExlbmd0aDtsZXQgYz10W2UrK10sbD10W2VdO3JldHVybiBoKG4pPyhuLl9wb3NpdGlvbnM9aSxuLl9zaGFwZT1zLG4uX2VsbGlwc29pZD1ZLmNsb25lKGYsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUodSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX2Nvcm5lclR5cGU9YyxuLl9ncmFudWxhcml0eT1sLG4pOihKZi5wb2x5bGluZVBvc2l0aW9ucz1pLEpmLnNoYXBlUG9zaXRpb25zPXMsSmYuY29ybmVyVHlwZT1jLEpmLmdyYW51bGFyaXR5PWwsbmV3IHR1KEpmKSl9OyREPW5ldyBIcjt0dS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9wb3NpdGlvbnMsbj14bihlLGEuZXF1YWxzRXBzaWxvbiksbz10Ll9zaGFwZTtpZihvPWhzLnJlbW92ZUR1cGxpY2F0ZXNGcm9tU2hhcGUobyksbi5sZW5ndGg8Mnx8by5sZW5ndGg8MylyZXR1cm47UGUuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKG8pPT09Q28uQ0xPQ0tXSVNFJiZvLnJldmVyc2UoKTtsZXQgcj1Ici5mcm9tUG9pbnRzKG8sJEQpLGk9aHMuY29tcHV0ZVBvc2l0aW9ucyhuLG8scix0LCEwKTtyZXR1cm4gWUQoaSxvLHIsdC5fdmVydGV4Rm9ybWF0KX07QXk9dHV9KTt2YXIgYnk9e307cGUoYnkse2RlZmF1bHQ6KCk9PlFEfSk7ZnVuY3Rpb24gWkQodCxlKXtyZXR1cm4gaChlKSYmKHQ9QXkudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksQXkuY3JlYXRlR2VvbWV0cnkodCl9dmFyIFFELFR5PSQoKCk9PnthdCgpOyR0KCk7VUUoKTtRRD1aRH0pO2Z1bmN0aW9uIEpEKHQsZSl7bGV0IG49bmV3IHJlO24ucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp0fSk7bGV0IG89ZS5sZW5ndGgscj1uLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxzPXQubGVuZ3RoLzMvbyxmPUZ0LmNyZWF0ZVR5cGVkQXJyYXkociwyKm8qKHMrMSkpLHUsYyxsPTA7dT0wO2xldCBwPXUqbztmb3IoYz0wO2M8by0xO2MrKylmW2wrK109YytwLGZbbCsrXT1jK3ArMTtmb3IoZltsKytdPW8tMStwLGZbbCsrXT1wLHU9cy0xLHA9dSpvLGM9MDtjPG8tMTtjKyspZltsKytdPWMrcCxmW2wrK109YytwKzE7Zm9yKGZbbCsrXT1vLTErcCxmW2wrK109cCx1PTA7dTxzLTE7dSsrKXtsZXQgbT1vKnUsXz1tK287Zm9yKGM9MDtjPG87YysrKWZbbCsrXT1jK20sZltsKytdPWMrX31yZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOm4saW5kaWNlczpGdC5jcmVhdGVUeXBlZEFycmF5KHIsZiksYm91bmRpbmdTcGhlcmU6Z3QuZnJvbVZlcnRpY2VzKHQpLHByaW1pdGl2ZVR5cGU6RHQuTElORVN9KX1mdW5jdGlvbiBudSh0KXt0PXQ/P050LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvbHlsaW5lUG9zaXRpb25zLG49dC5zaGFwZVBvc2l0aW9ucztpZighaChlKSl0aHJvdyBuZXcgTCgib3B0aW9ucy5wb2x5bGluZVBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgTCgib3B0aW9ucy5zaGFwZVBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9zaGFwZT1uLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQpLHRoaXMuX2Nvcm5lclR5cGU9dC5jb3JuZXJUeXBlPz9mbi5ST1VOREVELHRoaXMuX2dyYW51bGFyaXR5PXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBvbHlsaW5lVm9sdW1lT3V0bGluZUdlb21ldHJ5IjtsZXQgbz0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoO28rPTErbi5sZW5ndGgqSi5wYWNrZWRMZW5ndGgsdGhpcy5wYWNrZWRMZW5ndGg9bytZLnBhY2tlZExlbmd0aCsyfXZhciBrRSxldSx0Qix3eSxHRT0kKCgpPT57anIoKTtDZigpO3ZlKCk7VWUoKTtMdCgpO0RlKCk7aGMoKTt5ZSgpO2F0KCk7anQoKTskdCgpO1hlKCk7WWUoKTthbigpOyRlKCk7S3QoKTtxcigpO21kKCk7dG4oKTtsYygpO251LnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJhcnJheSBpcyByZXF1aXJlZCIpO249bj8/MDtsZXQgbyxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2ZvcihlW24rK109aSxvPTA7bzxpOysrbyxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2socltvXSxlLG4pO2xldCBzPXQuX3NoYXBlO2ZvcihpPXMubGVuZ3RoLGVbbisrXT1pLG89MDtvPGk7KytvLG4rPUoucGFja2VkTGVuZ3RoKUoucGFjayhzW29dLGUsbik7cmV0dXJuIFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxlW24rK109dC5fY29ybmVyVHlwZSxlW25dPXQuX2dyYW51bGFyaXR5LGV9O2tFPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksZXU9e3BvbHlsaW5lUG9zaXRpb25zOnZvaWQgMCxzaGFwZVBvc2l0aW9uczp2b2lkIDAsZWxsaXBzb2lkOmtFLGhlaWdodDp2b2lkIDAsY29ybmVyVHlwZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwfTtudS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9ZT8/MDtsZXQgbyxyPXRbZSsrXSxpPW5ldyBBcnJheShyKTtmb3Iobz0wO288cjsrK28sZSs9YS5wYWNrZWRMZW5ndGgpaVtvXT1hLnVucGFjayh0LGUpO3I9dFtlKytdO2xldCBzPW5ldyBBcnJheShyKTtmb3Iobz0wO288cjsrK28sZSs9Si5wYWNrZWRMZW5ndGgpc1tvXT1KLnVucGFjayh0LGUpO2xldCBmPVkudW5wYWNrKHQsZSxrRSk7ZSs9WS5wYWNrZWRMZW5ndGg7bGV0IHU9dFtlKytdLGM9dFtlXTtyZXR1cm4gaChuKT8obi5fcG9zaXRpb25zPWksbi5fc2hhcGU9cyxuLl9lbGxpcHNvaWQ9WS5jbG9uZShmLG4uX2VsbGlwc29pZCksbi5fY29ybmVyVHlwZT11LG4uX2dyYW51bGFyaXR5PWMsbik6KGV1LnBvbHlsaW5lUG9zaXRpb25zPWksZXUuc2hhcGVQb3NpdGlvbnM9cyxldS5jb3JuZXJUeXBlPXUsZXUuZ3JhbnVsYXJpdHk9YyxuZXcgbnUoZXUpKX07dEI9bmV3IEhyO251LmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3Bvc2l0aW9ucyxuPXhuKGUsYS5lcXVhbHNFcHNpbG9uKSxvPXQuX3NoYXBlO2lmKG89aHMucmVtb3ZlRHVwbGljYXRlc0Zyb21TaGFwZShvKSxuLmxlbmd0aDwyfHxvLmxlbmd0aDwzKXJldHVybjtQZS5jb21wdXRlV2luZGluZ09yZGVyMkQobyk9PT1Dby5DTE9DS1dJU0UmJm8ucmV2ZXJzZSgpO2xldCByPUhyLmZyb21Qb2ludHMobyx0QiksaT1ocy5jb21wdXRlUG9zaXRpb25zKG4sbyxyLHQsITEpO3JldHVybiBKRChpLG8pfTt3eT1udX0pO3ZhciBPeT17fTtwZShPeSx7ZGVmYXVsdDooKT0+bkJ9KTtmdW5jdGlvbiBlQih0LGUpe3JldHVybiBoKGUpJiYodD13eS51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSx3eS5jcmVhdGVHZW9tZXRyeSh0KX12YXIgbkIsRXk9JCgoKT0+e2F0KCk7JHQoKTtHRSgpO25CPWVCfSk7ZnVuY3Rpb24gakUodCxlLG4sbyxyLGkscyl7bGV0IGY9TWF0aC5jb3MoZSksdT1vKmYsYz1uKmYsbD1NYXRoLnNpbihlKSxwPW8qbCxkPW4qbDtvdS5fZWxsaXBzb2lkPVkuZGVmYXVsdCxTcj1vdS5wcm9qZWN0KHQsU3IpLFNyPWEuc3VidHJhY3QoU3IsRmQsU3IpO2xldCBtPVlvLmZyb21Sb3RhdGlvbihlLHJCKTtTcj1Zby5tdWx0aXBseUJ5VmVjdG9yKG0sU3IsU3IpLFNyPWEuYWRkKFNyLEZkLFNyKSx0PW91LnVucHJvamVjdChTcix0KSxpLT0xLHMtPTE7bGV0IF89dC5sYXRpdHVkZSxnPV8raSpkLGI9Xy11KnMsVD1fLXUqcytpKmQsTz1NYXRoLm1heChfLGcsYixUKSxFPU1hdGgubWluKF8sZyxiLFQpLHc9dC5sb25naXR1ZGUsQz13K2kqYyxNPXcrcypwLE49dytzKnAraSpjLEY9TWF0aC5tYXgodyxDLE0sTiksST1NYXRoLm1pbih3LEMsTSxOKTtyZXR1cm57bm9ydGg6Tyxzb3V0aDpFLGVhc3Q6Rix3ZXN0OkksZ3JhbllDb3M6dSxncmFuWVNpbjpwLGdyYW5YQ29zOmMsZ3JhblhTaW46ZCxud0Nvcm5lcjp0fX12YXIgVkUsekUsb0IsUnksckIsU3IsaUIsRmQsb3UsZ28sU3k9JCgoKT0+e0x0KCk7SWUoKTthdCgpO2p0KCk7JHQoKTtTaSgpO0t0KCk7QWYoKTt3bigpO1ZFPU1hdGguY29zLHpFPU1hdGguc2luLG9CPU1hdGguc3FydCxSeT17fTtSeS5jb21wdXRlUG9zaXRpb249ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7bGV0IGY9ZS5yYWRpaVNxdWFyZWQsdT10Lm53Q29ybmVyLGM9dC5ib3VuZGluZ1JlY3RhbmdsZSxsPXUubGF0aXR1ZGUtdC5ncmFuWUNvcypvK3IqdC5ncmFuWFNpbixwPVZFKGwpLGQ9ekUobCksbT1mLnoqZCxfPXUubG9uZ2l0dWRlK28qdC5ncmFuWVNpbityKnQuZ3JhblhDb3MsZz1wKlZFKF8pLGI9cCp6RShfKSxUPWYueCpnLE89Zi55KmIsRT1vQihUKmcrTypiK20qZCk7aWYoaS54PVQvRSxpLnk9Ty9FLGkuej1tL0Usbil7bGV0IHc9dC5zdE53Q29ybmVyO2godyk/KGw9dy5sYXRpdHVkZS10LnN0R3JhbllDb3MqbytyKnQuc3RHcmFuWFNpbixfPXcubG9uZ2l0dWRlK28qdC5zdEdyYW5ZU2luK3IqdC5zdEdyYW5YQ29zLHMueD0oXy10LnN0V2VzdCkqdC5sb25TY2FsYXIscy55PShsLXQuc3RTb3V0aCkqdC5sYXRTY2FsYXIpOihzLng9KF8tYy53ZXN0KSp0LmxvblNjYWxhcixzLnk9KGwtYy5zb3V0aCkqdC5sYXRTY2FsYXIpfX07ckI9bmV3IFlvLFNyPW5ldyBhLGlCPW5ldyBzdCxGZD1uZXcgYSxvdT1uZXcgSm47UnkuY29tcHV0ZU9wdGlvbnM9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7bGV0IGY9dC5lYXN0LHU9dC53ZXN0LGM9dC5ub3J0aCxsPXQuc291dGgscD0hMSxkPSExO2M9PT1QLlBJX09WRVJfVFdPJiYocD0hMCksbD09PS1QLlBJX09WRVJfVFdPJiYoZD0hMCk7bGV0IG0sXz1jLWw7dT5mP209UC5UV09fUEktdStmOm09Zi11O2xldCBnPU1hdGguY2VpbChtL2UpKzEsYj1NYXRoLmNlaWwoXy9lKSsxLFQ9bS8oZy0xKSxPPV8vKGItMSksRT1NdC5ub3J0aHdlc3QodCxpKSx3PU10LmNlbnRlcih0LGlCKTsobiE9PTB8fG8hPT0wKSYmKHcubG9uZ2l0dWRlPEUubG9uZ2l0dWRlJiYody5sb25naXR1ZGUrPVAuVFdPX1BJKSxvdS5fZWxsaXBzb2lkPVkuZGVmYXVsdCxGZD1vdS5wcm9qZWN0KHcsRmQpKTtsZXQgQz1PLE09VCxOPTAsRj0wLEk9TXQuY2xvbmUodCxyKSx2PXtncmFuWUNvczpDLGdyYW5ZU2luOk4sZ3JhblhDb3M6TSxncmFuWFNpbjpGLG53Q29ybmVyOkUsYm91bmRpbmdSZWN0YW5nbGU6SSx3aWR0aDpnLGhlaWdodDpiLG5vcnRoQ2FwOnAsc291dGhDYXA6ZH07aWYobiE9PTApe2xldCBCPWpFKEUsbixULE8sdyxnLGIpO2lmKGM9Qi5ub3J0aCxsPUIuc291dGgsZj1CLmVhc3QsdT1CLndlc3QsYzwtUC5QSV9PVkVSX1RXT3x8Yz5QLlBJX09WRVJfVFdPfHxsPC1QLlBJX09WRVJfVFdPfHxsPlAuUElfT1ZFUl9UV08pdGhyb3cgbmV3IEwoIlJvdGF0ZWQgcmVjdGFuZ2xlIGlzIGludmFsaWQuICBJdCBjcm9zc2VzIG92ZXIgZWl0aGVyIHRoZSBub3J0aCBvciBzb3V0aCBwb2xlLiIpO3YuZ3JhbllDb3M9Qi5ncmFuWUNvcyx2LmdyYW5ZU2luPUIuZ3JhbllTaW4sdi5ncmFuWENvcz1CLmdyYW5YQ29zLHYuZ3JhblhTaW49Qi5ncmFuWFNpbixJLm5vcnRoPWMsSS5zb3V0aD1sLEkuZWFzdD1mLEkud2VzdD11fWlmKG8hPT0wKXtuPW4tbztsZXQgQj1NdC5ub3J0aHdlc3QoSSxzKSxBPWpFKEIsbixULE8sdyxnLGIpO3Yuc3RHcmFuWUNvcz1BLmdyYW5ZQ29zLHYuc3RHcmFuWENvcz1BLmdyYW5YQ29zLHYuc3RHcmFuWVNpbj1BLmdyYW5ZU2luLHYuc3RHcmFuWFNpbj1BLmdyYW5YU2luLHYuc3ROd0Nvcm5lcj1CLHYuc3RXZXN0PUEud2VzdCx2LnN0U291dGg9QS5zb3V0aH1yZXR1cm4gdn07Z289Unl9KTtmdW5jdGlvbiAkRSh0LGUpe2xldCBuPW5ldyBCdCh7YXR0cmlidXRlczpuZXcgcmUscHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVN9KTtyZXR1cm4gbi5hdHRyaWJ1dGVzLnBvc2l0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZS5wb3NpdGlvbnN9KSx0Lm5vcm1hbCYmKG4uYXR0cmlidXRlcy5ub3JtYWw9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmUubm9ybWFsc30pKSx0LnRhbmdlbnQmJihuLmF0dHJpYnV0ZXMudGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZS50YW5nZW50c30pKSx0LmJpdGFuZ2VudCYmKG4uYXR0cmlidXRlcy5iaXRhbmdlbnQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmUuYml0YW5nZW50c30pKSxufWZ1bmN0aW9uIGZCKHQsZSxuLG8pe2xldCByPXQubGVuZ3RoLGk9ZS5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShyKTp2b2lkIDAscz1lLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShyKTp2b2lkIDAsZj1lLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHIpOnZvaWQgMCx1PTAsYz1YRSxsPVdFLHA9S0U7aWYoZS5ub3JtYWx8fGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpZm9yKGxldCBkPTA7ZDxyO2QrPTMpe2xldCBtPWEuZnJvbUFycmF5KHQsZCxDeSksXz11KzEsZz11KzI7cD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChtLHApLChlLnRhbmdlbnR8fGUuYml0YW5nZW50KSYmKGEuY3Jvc3MoYS5VTklUX1oscCxsKSxaLm11bHRpcGx5QnlWZWN0b3IobyxsLGwpLGEubm9ybWFsaXplKGwsbCksZS5iaXRhbmdlbnQmJmEubm9ybWFsaXplKGEuY3Jvc3MocCxsLGMpLGMpKSxlLm5vcm1hbCYmKGlbdV09cC54LGlbX109cC55LGlbZ109cC56KSxlLnRhbmdlbnQmJihzW3VdPWwueCxzW19dPWwueSxzW2ddPWwueiksZS5iaXRhbmdlbnQmJihmW3VdPWMueCxmW19dPWMueSxmW2ddPWMueiksdSs9M31yZXR1cm4gJEUoZSx7cG9zaXRpb25zOnQsbm9ybWFsczppLHRhbmdlbnRzOnMsYml0YW5nZW50czpmfSl9ZnVuY3Rpb24gdUIodCxlLG4pe2xldCBvPXQubGVuZ3RoLHI9ZS5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShvKTp2b2lkIDAsaT1lLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShvKTp2b2lkIDAscz1lLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KG8pOnZvaWQgMCxmPTAsdT0wLGM9MCxsPSEwLHA9WEUsZD1XRSxtPUtFO2lmKGUubm9ybWFsfHxlLnRhbmdlbnR8fGUuYml0YW5nZW50KWZvcihsZXQgXz0wO188bztfKz02KXtsZXQgZz1hLmZyb21BcnJheSh0LF8sQ3kpLGI9YS5mcm9tQXJyYXkodCwoXys2KSVvLHh5KTtpZihsKXtsZXQgVD1hLmZyb21BcnJheSh0LChfKzMpJW8sWkUpO2Euc3VidHJhY3QoYixnLGIpLGEuc3VidHJhY3QoVCxnLFQpLG09YS5ub3JtYWxpemUoYS5jcm9zcyhULGIsbSksbSksbD0hMX1hLmVxdWFsc0Vwc2lsb24oYixnLFAuRVBTSUxPTjEwKSYmKGw9ITApLChlLnRhbmdlbnR8fGUuYml0YW5nZW50KSYmKHA9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZyxwKSxlLnRhbmdlbnQmJihkPWEubm9ybWFsaXplKGEuY3Jvc3MocCxtLGQpLGQpKSksZS5ub3JtYWwmJihyW2YrK109bS54LHJbZisrXT1tLnkscltmKytdPW0ueixyW2YrK109bS54LHJbZisrXT1tLnkscltmKytdPW0ueiksZS50YW5nZW50JiYoaVt1KytdPWQueCxpW3UrK109ZC55LGlbdSsrXT1kLnosaVt1KytdPWQueCxpW3UrK109ZC55LGlbdSsrXT1kLnopLGUuYml0YW5nZW50JiYoc1tjKytdPXAueCxzW2MrK109cC55LHNbYysrXT1wLnosc1tjKytdPXAueCxzW2MrK109cC55LHNbYysrXT1wLnopfXJldHVybiAkRShlLHtwb3NpdGlvbnM6dCxub3JtYWxzOnIsdGFuZ2VudHM6aSxiaXRhbmdlbnRzOnN9KX1mdW5jdGlvbiBRRSh0LGUpe2xldCBuPXQuX3ZlcnRleEZvcm1hdCxvPXQuX2VsbGlwc29pZCxyPWUuaGVpZ2h0LGk9ZS53aWR0aCxzPWUubm9ydGhDYXAsZj1lLnNvdXRoQ2FwLHU9MCxjPXIsbD1yLHA9MDtzJiYodT0xLGwtPTEscCs9MSksZiYmKGMtPTEsbC09MSxwKz0xKSxwKz1pKmw7bGV0IGQ9bi5wb3NpdGlvbj9uZXcgRmxvYXQ2NEFycmF5KHAqMyk6dm9pZCAwLG09bi5zdD9uZXcgRmxvYXQzMkFycmF5KHAqMik6dm9pZCAwLF89MCxnPTAsYj1DeSxUPXNCLE89TnVtYmVyLk1BWF9WQUxVRSxFPU51bWJlci5NQVhfVkFMVUUsdz0tTnVtYmVyLk1BWF9WQUxVRSxDPS1OdW1iZXIuTUFYX1ZBTFVFO2ZvcihsZXQgQT11O0E8YzsrK0EpZm9yKGxldCBTPTA7UzxpOysrUylnby5jb21wdXRlUG9zaXRpb24oZSxvLG4uc3QsQSxTLGIsVCksZFtfKytdPWIueCxkW18rK109Yi55LGRbXysrXT1iLnosbi5zdCYmKG1bZysrXT1ULngsbVtnKytdPVQueSxPPU1hdGgubWluKE8sVC54KSxFPU1hdGgubWluKEUsVC55KSx3PU1hdGgubWF4KHcsVC54KSxDPU1hdGgubWF4KEMsVC55KSk7aWYocyYmKGdvLmNvbXB1dGVQb3NpdGlvbihlLG8sbi5zdCwwLDAsYixUKSxkW18rK109Yi54LGRbXysrXT1iLnksZFtfKytdPWIueixuLnN0JiYobVtnKytdPVQueCxtW2crK109VC55LE89VC54LEU9VC55LHc9VC54LEM9VC55KSksZiYmKGdvLmNvbXB1dGVQb3NpdGlvbihlLG8sbi5zdCxyLTEsMCxiLFQpLGRbXysrXT1iLngsZFtfKytdPWIueSxkW19dPWIueixuLnN0JiYobVtnKytdPVQueCxtW2ddPVQueSxPPU1hdGgubWluKE8sVC54KSxFPU1hdGgubWluKEUsVC55KSx3PU1hdGgubWF4KHcsVC54KSxDPU1hdGgubWF4KEMsVC55KSkpLG4uc3QmJihPPDB8fEU8MHx8dz4xfHxDPjEpKWZvcihsZXQgQT0wO0E8bS5sZW5ndGg7QSs9MiltW0FdPShtW0FdLU8pLyh3LU8pLG1bQSsxXT0obVtBKzFdLUUpLyhDLUUpO2xldCBNPWZCKGQsbixvLGUudGFuZ2VudFJvdGF0aW9uTWF0cml4KSxOPTYqKGktMSkqKGwtMSk7cyYmKE4rPTMqKGktMSkpLGYmJihOKz0zKihpLTEpKTtsZXQgRj1GdC5jcmVhdGVUeXBlZEFycmF5KHAsTiksST0wLHY9MCxCO2ZvcihCPTA7QjxsLTE7KytCKXtmb3IobGV0IEE9MDtBPGktMTsrK0Epe2xldCBTPUkseD1TK2ksRD14KzEsej1TKzE7Rlt2KytdPVMsRlt2KytdPXgsRlt2KytdPXosRlt2KytdPXosRlt2KytdPXgsRlt2KytdPUQsKytJfSsrSX1pZihzfHxmKXtsZXQgQT1wLTEsUz1wLTE7cyYmZiYmKEE9cC0yKTtsZXQgeCxEO2lmKEk9MCxzKWZvcihCPTA7QjxpLTE7QisrKXg9SSxEPXgrMSxGW3YrK109QSxGW3YrK109eCxGW3YrK109RCwrK0k7aWYoZilmb3IoST0obC0xKSppLEI9MDtCPGktMTtCKyspeD1JLEQ9eCsxLEZbdisrXT14LEZbdisrXT1TLEZbdisrXT1ELCsrSX1yZXR1cm4gTS5pbmRpY2VzPUYsbi5zdCYmKE0uYXR0cmlidXRlcy5zdD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6bX0pKSxNfWZ1bmN0aW9uIE1hKHQsZSxuLG8scil7cmV0dXJuIHRbZSsrXT1vW25dLHRbZSsrXT1vW24rMV0sdFtlKytdPW9bbisyXSx0W2UrK109cltuXSx0W2UrK109cltuKzFdLHRbZV09cltuKzJdLHR9ZnVuY3Rpb24gTmEodCxlLG4sbyl7cmV0dXJuIHRbZSsrXT1vW25dLHRbZSsrXT1vW24rMV0sdFtlKytdPW9bbl0sdFtlXT1vW24rMV0sdH1mdW5jdGlvbiBsQih0LGUpe2xldCBuPXQuX3NoYWRvd1ZvbHVtZSxvPXQuX29mZnNldEF0dHJpYnV0ZSxyPXQuX3ZlcnRleEZvcm1hdCxpPXQuX2V4dHJ1ZGVkSGVpZ2h0LHM9dC5fc3VyZmFjZUhlaWdodCxmPXQuX2VsbGlwc29pZCx1PWUuaGVpZ2h0LGM9ZS53aWR0aCxsO2lmKG4pe2xldCBRdD1wdC5jbG9uZShyLFB5KTtRdC5ub3JtYWw9ITAsdC5fdmVydGV4Rm9ybWF0PVF0fWxldCBwPVFFKHQsZSk7biYmKHQuX3ZlcnRleEZvcm1hdD1yKTtsZXQgZD1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQocC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxzLGYsITEpO2Q9bmV3IEZsb2F0NjRBcnJheShkKTtsZXQgbT1kLmxlbmd0aCxfPW0qMixnPW5ldyBGbG9hdDY0QXJyYXkoXyk7Zy5zZXQoZCk7bGV0IGI9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KHAuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsaSxmKTtnLnNldChiLG0pLHAuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9ZztsZXQgVD1yLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KF8pOnZvaWQgMCxPPXIudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KF8pOnZvaWQgMCxFPXIuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoXyk6dm9pZCAwLHc9ci5zdD9uZXcgRmxvYXQzMkFycmF5KF8vMyoyKTp2b2lkIDAsQyxNO2lmKHIubm9ybWFsKXtmb3IoTT1wLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcyxULnNldChNKSxsPTA7bDxtO2wrKylNW2xdPS1NW2xdO1Quc2V0KE0sbSkscC5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXM9VH1pZihuKXtNPXAuYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzLHIubm9ybWFsfHwocC5hdHRyaWJ1dGVzLm5vcm1hbD12b2lkIDApO2xldCBRdD1uZXcgRmxvYXQzMkFycmF5KF8pO2ZvcihsPTA7bDxtO2wrKylNW2xdPS1NW2xdO1F0LnNldChNLG0pLHAuYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpRdH0pfWxldCBOLEY9aChvKTtpZihGKXtsZXQgUXQ9bS8zKjIsTmU9bmV3IFVpbnQ4QXJyYXkoUXQpO289PT1hZS5UT1A/TmU9TmUuZmlsbCgxLDAsUXQvMik6KE49bz09PWFlLk5PTkU/MDoxLE5lPU5lLmZpbGwoTikpLHAuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpOZX0pfWlmKHIudGFuZ2VudCl7bGV0IFF0PXAuYXR0cmlidXRlcy50YW5nZW50LnZhbHVlcztmb3IoTy5zZXQoUXQpLGw9MDtsPG07bCsrKVF0W2xdPS1RdFtsXTtPLnNldChRdCxtKSxwLmF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZXM9T31pZihyLmJpdGFuZ2VudCl7bGV0IFF0PXAuYXR0cmlidXRlcy5iaXRhbmdlbnQudmFsdWVzO0Uuc2V0KFF0KSxFLnNldChRdCxtKSxwLmF0dHJpYnV0ZXMuYml0YW5nZW50LnZhbHVlcz1FfXIuc3QmJihDPXAuYXR0cmlidXRlcy5zdC52YWx1ZXMsdy5zZXQoQyksdy5zZXQoQyxtLzMqMikscC5hdHRyaWJ1dGVzLnN0LnZhbHVlcz13KTtsZXQgST1wLmluZGljZXMsdj1JLmxlbmd0aCxCPW0vMyxBPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoXy8zLHYqMik7Zm9yKEEuc2V0KEkpLGw9MDtsPHY7bCs9MylBW2wrdl09SVtsKzJdK0IsQVtsKzErdl09SVtsKzFdK0IsQVtsKzIrdl09SVtsXStCO3AuaW5kaWNlcz1BO2xldCBTPWUubm9ydGhDYXAseD1lLnNvdXRoQ2FwLEQ9dSx6PTIsaj0wLGs9NCxxPTQ7UyYmKHotPTEsRC09MSxqKz0xLGstPTIscS09MSkseCYmKHotPTEsRC09MSxqKz0xLGstPTIscS09MSksais9eipjKzIqRC1rO2xldCBXPShqK3EpKjIsUj1uZXcgRmxvYXQ2NEFycmF5KFcqMyksbnQ9bj9uZXcgRmxvYXQzMkFycmF5KFcqMyk6dm9pZCAwLGN0PUY/bmV3IFVpbnQ4QXJyYXkoVyk6dm9pZCAwLGx0PXIuc3Q/bmV3IEZsb2F0MzJBcnJheShXKjIpOnZvaWQgMCxfdD1vPT09YWUuVE9QO0YmJiFfdCYmKE49bz09PWFlLkFMTD8xOjAsY3Q9Y3QuZmlsbChOKSk7bGV0IG90PTAseHQ9MCx5dD0wLFN0PTAsZHQ9YypELGZ0O2ZvcihsPTA7bDxkdDtsKz1jKWZ0PWwqMyxSPU1hKFIsb3QsZnQsZCxiKSxvdCs9NixyLnN0JiYobHQ9TmEobHQseHQsbCoyLEMpLHh0Kz00KSxuJiYoeXQrPTMsbnRbeXQrK109TVtmdF0sbnRbeXQrK109TVtmdCsxXSxudFt5dCsrXT1NW2Z0KzJdKSxfdCYmKGN0W1N0KytdPTEsU3QrPTEpO2lmKHgpe2xldCBRdD1TP2R0KzE6ZHQ7Zm9yKGZ0PVF0KjMsbD0wO2w8MjtsKyspUj1NYShSLG90LGZ0LGQsYiksb3QrPTYsci5zdCYmKGx0PU5hKGx0LHh0LFF0KjIsQykseHQrPTQpLG4mJih5dCs9MyxudFt5dCsrXT1NW2Z0XSxudFt5dCsrXT1NW2Z0KzFdLG50W3l0KytdPU1bZnQrMl0pLF90JiYoY3RbU3QrK109MSxTdCs9MSl9ZWxzZSBmb3IobD1kdC1jO2w8ZHQ7bCsrKWZ0PWwqMyxSPU1hKFIsb3QsZnQsZCxiKSxvdCs9NixyLnN0JiYobHQ9TmEobHQseHQsbCoyLEMpLHh0Kz00KSxuJiYoeXQrPTMsbnRbeXQrK109TVtmdF0sbnRbeXQrK109TVtmdCsxXSxudFt5dCsrXT1NW2Z0KzJdKSxfdCYmKGN0W1N0KytdPTEsU3QrPTEpO2ZvcihsPWR0LTE7bD4wO2wtPWMpZnQ9bCozLFI9TWEoUixvdCxmdCxkLGIpLG90Kz02LHIuc3QmJihsdD1OYShsdCx4dCxsKjIsQykseHQrPTQpLG4mJih5dCs9MyxudFt5dCsrXT1NW2Z0XSxudFt5dCsrXT1NW2Z0KzFdLG50W3l0KytdPU1bZnQrMl0pLF90JiYoY3RbU3QrK109MSxTdCs9MSk7aWYoUyl7bGV0IFF0PWR0O2ZvcihmdD1RdCozLGw9MDtsPDI7bCsrKVI9TWEoUixvdCxmdCxkLGIpLG90Kz02LHIuc3QmJihsdD1OYShsdCx4dCxRdCoyLEMpLHh0Kz00KSxuJiYoeXQrPTMsbnRbeXQrK109TVtmdF0sbnRbeXQrK109TVtmdCsxXSxudFt5dCsrXT1NW2Z0KzJdKSxfdCYmKGN0W1N0KytdPTEsU3QrPTEpfWVsc2UgZm9yKGw9Yy0xO2w+PTA7bC0tKWZ0PWwqMyxSPU1hKFIsb3QsZnQsZCxiKSxvdCs9NixyLnN0JiYobHQ9TmEobHQseHQsbCoyLEMpLHh0Kz00KSxuJiYoeXQrPTMsbnRbeXQrK109TVtmdF0sbnRbeXQrK109TVtmdCsxXSxudFt5dCsrXT1NW2Z0KzJdKSxfdCYmKGN0W1N0KytdPTEsU3QrPTEpO2xldCBJdD11QihSLHIsZik7ci5zdCYmKEl0LmF0dHJpYnV0ZXMuc3Q9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOmx0fSkpLG4mJihJdC5hdHRyaWJ1dGVzLmV4dHJ1ZGVEaXJlY3Rpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm50fSkpLEYmJihJdC5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmN0fSkpO2xldCBWdD1GdC5jcmVhdGVUeXBlZEFycmF5KFcsaio2KSxkZSxzZSxsZSxmZTttPVIubGVuZ3RoLzM7bGV0IFp0PTA7Zm9yKGw9MDtsPG0tMTtsKz0yKXtkZT1sLGZlPShkZSsyKSVtO2xldCBRdD1hLmZyb21BcnJheShSLGRlKjMseHkpLE5lPWEuZnJvbUFycmF5KFIsZmUqMyxaRSk7YS5lcXVhbHNFcHNpbG9uKFF0LE5lLFAuRVBTSUxPTjEwKXx8KHNlPShkZSsxKSVtLGxlPShzZSsyKSVtLFZ0W1p0KytdPWRlLFZ0W1p0KytdPXNlLFZ0W1p0KytdPWZlLFZ0W1p0KytdPWZlLFZ0W1p0KytdPXNlLFZ0W1p0KytdPWxlKX1yZXR1cm4gSXQuaW5kaWNlcz1WdCxJdD1rZS5jb21iaW5lSW5zdGFuY2VzKFtuZXcgY28oe2dlb21ldHJ5OnB9KSxuZXcgY28oe2dlb21ldHJ5Okl0fSldKSxJdFswXX1mdW5jdGlvbiBNeSh0LGUsbixvLHIpe2lmKG49PT0wKXJldHVybiBNdC5jbG9uZSh0LHIpO2xldCBpPWdvLmNvbXB1dGVPcHRpb25zKHQsZSxuLDAsWUUsSkUpLHM9aS5oZWlnaHQsZj1pLndpZHRoLHU9cEI7cmV0dXJuIGdvLmNvbXB1dGVQb3NpdGlvbihpLG8sITEsMCwwLHVbMF0pLGdvLmNvbXB1dGVQb3NpdGlvbihpLG8sITEsMCxmLTEsdVsxXSksZ28uY29tcHV0ZVBvc2l0aW9uKGksbywhMSxzLTEsMCx1WzJdKSxnby5jb21wdXRlUG9zaXRpb24oaSxvLCExLHMtMSxmLTEsdVszXSksTXQuZnJvbUNhcnRlc2lhbkFycmF5KHUsbyxyKX1mdW5jdGlvbiBtaSh0KXt0PXQ/P050LkVNUFRZX09CSkVDVDtsZXQgZT10LnJlY3RhbmdsZTtpZih5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsZSksTXQuX3ZhbGlkYXRlKGUpLGUubm9ydGg8ZS5zb3V0aCl0aHJvdyBuZXcgTCgib3B0aW9ucy5yZWN0YW5nbGUubm9ydGggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb3B0aW9ucy5yZWN0YW5nbGUuc291dGgiKTtsZXQgbj10LmhlaWdodD8/MCxvPXQuZXh0cnVkZWRIZWlnaHQ/P247dGhpcy5fcmVjdGFuZ2xlPU10LmNsb25lKGUpLHRoaXMuX2dyYW51bGFyaXR5PXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQpLHRoaXMuX3N1cmZhY2VIZWlnaHQ9TWF0aC5tYXgobixvKSx0aGlzLl9yb3RhdGlvbj10LnJvdGF0aW9uPz8wLHRoaXMuX3N0Um90YXRpb249dC5zdFJvdGF0aW9uPz8wLHRoaXMuX3ZlcnRleEZvcm1hdD1wdC5jbG9uZSh0LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVCksdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4obixvKSx0aGlzLl9zaGFkb3dWb2x1bWU9dC5zaGFkb3dWb2x1bWU/PyExLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5Iix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fcm90YXRlZFJlY3RhbmdsZT12b2lkIDAsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz12b2lkIDB9ZnVuY3Rpb24gQUIodCl7aWYodC5fc3RSb3RhdGlvbj09PTApcmV0dXJuWzAsMCwwLDEsMSwwXTtsZXQgZT1NdC5jbG9uZSh0Ll9yZWN0YW5nbGUscUUpLG49dC5fZ3JhbnVsYXJpdHksbz10Ll9lbGxpcHNvaWQscj10Ll9yb3RhdGlvbi10Ll9zdFJvdGF0aW9uLGk9TXkoZSxuLHIsbyxxRSkscz1fQjtzWzBdLng9aS53ZXN0LHNbMF0ueT1pLnNvdXRoLHNbMV0ueD1pLndlc3Qsc1sxXS55PWkubm9ydGgsc1syXS54PWkuZWFzdCxzWzJdLnk9aS5zb3V0aDtsZXQgZj10LnJlY3RhbmdsZSx1PVlvLmZyb21Sb3RhdGlvbih0Ll9zdFJvdGF0aW9uLHlCKSxjPU10LmNlbnRlcihmLGdCKTtmb3IobGV0IF89MDtfPDM7KytfKXtsZXQgZz1zW19dO2cueC09Yy5sb25naXR1ZGUsZy55LT1jLmxhdGl0dWRlLFlvLm11bHRpcGx5QnlWZWN0b3IodSxnLGcpLGcueCs9Yy5sb25naXR1ZGUsZy55Kz1jLmxhdGl0dWRlLGcueD0oZy54LWYud2VzdCkvZi53aWR0aCxnLnk9KGcueS1mLnNvdXRoKS9mLmhlaWdodH1sZXQgbD1zWzBdLHA9c1sxXSxkPXNbMl0sbT1uZXcgQXJyYXkoNik7cmV0dXJuIEoucGFjayhsLG0pLEoucGFjayhwLG0sMiksSi5wYWNrKGQsbSw0KSxtfXZhciBDeSxLRSxXRSxYRSxZRSxzQixjQixhQix4eSxaRSxQeSxwQixKRSxkQix0UixlUixTcyxtQixIRSxoQixxRSxfQix5QixnQixOeSxuUj0kKCgpPT57dmUoKTtVZSgpO0x0KCk7SWUoKTtXdCgpO0RlKCk7eWUoKTthdCgpO2p0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTtzYygpO0ZvKCk7c2koKTskZSgpO0t0KCk7QWYoKTtCbigpO3FyKCk7dG4oKTtLbygpO3duKCk7U3koKTtSbygpO0N5PW5ldyBhLEtFPW5ldyBhLFdFPW5ldyBhLFhFPW5ldyBhLFlFPW5ldyBNdCxzQj1uZXcgSixjQj1uZXcgZ3QsYUI9bmV3IGd0O3h5PW5ldyBhLFpFPW5ldyBhO1B5PW5ldyBwdDtwQj1bbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGFdLEpFPW5ldyBzdCxkQj1uZXcgc3Q7bWkucGFja2VkTGVuZ3RoPU10LnBhY2tlZExlbmd0aCtZLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrNzttaS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLE10LnBhY2sodC5fcmVjdGFuZ2xlLGUsbiksbis9TXQucGFja2VkTGVuZ3RoLFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxwdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4pLG4rPXB0LnBhY2tlZExlbmd0aCxlW24rK109dC5fZ3JhbnVsYXJpdHksZVtuKytdPXQuX3N1cmZhY2VIZWlnaHQsZVtuKytdPXQuX3JvdGF0aW9uLGVbbisrXT10Ll9zdFJvdGF0aW9uLGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW24rK109dC5fc2hhZG93Vm9sdW1lPzE6MCxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07dFI9bmV3IE10LGVSPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksU3M9e3JlY3RhbmdsZTp0UixlbGxpcHNvaWQ6ZVIsdmVydGV4Rm9ybWF0OlB5LGdyYW51bGFyaXR5OnZvaWQgMCxoZWlnaHQ6dm9pZCAwLHJvdGF0aW9uOnZvaWQgMCxzdFJvdGF0aW9uOnZvaWQgMCxleHRydWRlZEhlaWdodDp2b2lkIDAsc2hhZG93Vm9sdW1lOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTttaS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1NdC51bnBhY2sodCxlLHRSKTtlKz1NdC5wYWNrZWRMZW5ndGg7bGV0IHI9WS51bnBhY2sodCxlLGVSKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgaT1wdC51bnBhY2sodCxlLFB5KTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IHM9dFtlKytdLGY9dFtlKytdLHU9dFtlKytdLGM9dFtlKytdLGw9dFtlKytdLHA9dFtlKytdPT09MSxkPXRbZV07cmV0dXJuIGgobik/KG4uX3JlY3RhbmdsZT1NdC5jbG9uZShvLG4uX3JlY3RhbmdsZSksbi5fZWxsaXBzb2lkPVkuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1wdC5jbG9uZShpLG4uX3ZlcnRleEZvcm1hdCksbi5fZ3JhbnVsYXJpdHk9cyxuLl9zdXJmYWNlSGVpZ2h0PWYsbi5fcm90YXRpb249dSxuLl9zdFJvdGF0aW9uPWMsbi5fZXh0cnVkZWRIZWlnaHQ9bCxuLl9zaGFkb3dWb2x1bWU9cCxuLl9vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG4pOihTcy5ncmFudWxhcml0eT1zLFNzLmhlaWdodD1mLFNzLnJvdGF0aW9uPXUsU3Muc3RSb3RhdGlvbj1jLFNzLmV4dHJ1ZGVkSGVpZ2h0PWwsU3Muc2hhZG93Vm9sdW1lPXAsU3Mub2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuZXcgbWkoU3MpKX07bWkuY29tcHV0ZVJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBuPXQucmVjdGFuZ2xlO2lmKHkudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIixuKSxNdC5fdmFsaWRhdGUobiksbi5ub3J0aDxuLnNvdXRoKXRocm93IG5ldyBMKCJvcHRpb25zLnJlY3RhbmdsZS5ub3J0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBvcHRpb25zLnJlY3RhbmdsZS5zb3V0aCIpO2xldCBvPXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHI9dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCxpPXQucm90YXRpb24/PzA7cmV0dXJuIE15KG4sbyxpLHIsZSl9O21CPW5ldyBaLEhFPW5ldyB0ZSxoQj1uZXcgc3Q7bWkuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7aWYoUC5lcXVhbHNFcHNpbG9uKHQuX3JlY3RhbmdsZS5ub3J0aCx0Ll9yZWN0YW5nbGUuc291dGgsUC5FUFNJTE9OMTApfHxQLmVxdWFsc0Vwc2lsb24odC5fcmVjdGFuZ2xlLmVhc3QsdC5fcmVjdGFuZ2xlLndlc3QsUC5FUFNJTE9OMTApKXJldHVybjtsZXQgZT10Ll9yZWN0YW5nbGUsbj10Ll9lbGxpcHNvaWQsbz10Ll9yb3RhdGlvbixyPXQuX3N0Um90YXRpb24saT10Ll92ZXJ0ZXhGb3JtYXQscz1nby5jb21wdXRlT3B0aW9ucyhlLHQuX2dyYW51bGFyaXR5LG8scixZRSxKRSxkQiksZj1tQjtpZihyIT09MHx8byE9PTApe2xldCBtPU10LmNlbnRlcihlLGhCKSxfPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsQ2FydG9ncmFwaGljKG0seHkpO3RlLmZyb21BeGlzQW5nbGUoXywtcixIRSksWi5mcm9tUXVhdGVybmlvbihIRSxmKX1lbHNlIFouY2xvbmUoWi5JREVOVElUWSxmKTtsZXQgdT10Ll9zdXJmYWNlSGVpZ2h0LGM9dC5fZXh0cnVkZWRIZWlnaHQsbD0hUC5lcXVhbHNFcHNpbG9uKHUsYywwLFAuRVBTSUxPTjIpO3MubG9uU2NhbGFyPTEvdC5fcmVjdGFuZ2xlLndpZHRoLHMubGF0U2NhbGFyPTEvdC5fcmVjdGFuZ2xlLmhlaWdodCxzLnRhbmdlbnRSb3RhdGlvbk1hdHJpeD1mO2xldCBwLGQ7aWYoZT10Ll9yZWN0YW5nbGUsbCl7cD1sQih0LHMpO2xldCBtPWd0LmZyb21SZWN0YW5nbGUzRChlLG4sdSxhQiksXz1ndC5mcm9tUmVjdGFuZ2xlM0QoZSxuLGMsY0IpO2Q9Z3QudW5pb24obSxfKX1lbHNle2lmKHA9UUUodCxzKSxwLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChwLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHUsbiwhMSksaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgbT1wLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCxfPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLGc9bmV3IFVpbnQ4QXJyYXkobS8zKS5maWxsKF8pO3AuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpnfSl9ZD1ndC5mcm9tUmVjdGFuZ2xlM0QoZSxuLHUpfXJldHVybiBpLnBvc2l0aW9ufHxkZWxldGUgcC5hdHRyaWJ1dGVzLnBvc2l0aW9uLG5ldyBCdCh7YXR0cmlidXRlczpwLmF0dHJpYnV0ZXMsaW5kaWNlczpwLmluZGljZXMscHJpbWl0aXZlVHlwZTpwLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6ZCxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O21pLmNyZWF0ZVNoYWRvd1ZvbHVtZT1mdW5jdGlvbih0LGUsbil7bGV0IG89dC5fZ3JhbnVsYXJpdHkscj10Ll9lbGxpcHNvaWQsaT1lKG8scikscz1uKG8scik7cmV0dXJuIG5ldyBtaSh7cmVjdGFuZ2xlOnQuX3JlY3RhbmdsZSxyb3RhdGlvbjp0Ll9yb3RhdGlvbixlbGxpcHNvaWQ6cixzdFJvdGF0aW9uOnQuX3N0Um90YXRpb24sZ3JhbnVsYXJpdHk6byxleHRydWRlZEhlaWdodDpzLGhlaWdodDppLHZlcnRleEZvcm1hdDpwdC5QT1NJVElPTl9PTkxZLHNoYWRvd1ZvbHVtZTohMH0pfTtxRT1uZXcgTXQsX0I9W25ldyBKLG5ldyBKLG5ldyBKXSx5Qj1uZXcgWW8sZ0I9bmV3IHN0O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG1pLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLl9yb3RhdGVkUmVjdGFuZ2xlKXx8KHRoaXMuX3JvdGF0ZWRSZWN0YW5nbGU9TXkodGhpcy5fcmVjdGFuZ2xlLHRoaXMuX2dyYW51bGFyaXR5LHRoaXMuX3JvdGF0aW9uLHRoaXMuX2VsbGlwc29pZCkpLHRoaXMuX3JvdGF0ZWRSZWN0YW5nbGV9fSx0ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzKXx8KHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9QUIodGhpcykpLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHN9fX0pO055PW1pfSk7dmFyIEl5PXt9O3BlKEl5LHtkZWZhdWx0OigpPT5UQn0pO2Z1bmN0aW9uIGJCKHQsZSl7cmV0dXJuIGgoZSkmJih0PU55LnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLHQuX3JlY3RhbmdsZT1NdC5jbG9uZSh0Ll9yZWN0YW5nbGUpLE55LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBUQix2eT0kKCgpPT57YXQoKTskdCgpO3duKCk7blIoKTtUQj1iQn0pO2Z1bmN0aW9uIG9SKHQsZSl7bGV0IG49dC5fZWxsaXBzb2lkLG89ZS5oZWlnaHQscj1lLndpZHRoLGk9ZS5ub3J0aENhcCxzPWUuc291dGhDYXAsZj1vLHU9MixjPTAsbD00O2kmJih1LT0xLGYtPTEsYys9MSxsLT0yKSxzJiYodS09MSxmLT0xLGMrPTEsbC09MiksYys9dSpyKzIqZi1sO2xldCBwPW5ldyBGbG9hdDY0QXJyYXkoYyozKSxkPTAsbT0wLF8sZz1FQjtpZihpKWdvLmNvbXB1dGVQb3NpdGlvbihlLG4sITEsbSwwLGcpLHBbZCsrXT1nLngscFtkKytdPWcueSxwW2QrK109Zy56O2Vsc2UgZm9yKF89MDtfPHI7XysrKWdvLmNvbXB1dGVQb3NpdGlvbihlLG4sITEsbSxfLGcpLHBbZCsrXT1nLngscFtkKytdPWcueSxwW2QrK109Zy56O2ZvcihfPXItMSxtPTE7bTxvO20rKylnby5jb21wdXRlUG9zaXRpb24oZSxuLCExLG0sXyxnKSxwW2QrK109Zy54LHBbZCsrXT1nLnkscFtkKytdPWcuejtpZihtPW8tMSwhcylmb3IoXz1yLTI7Xz49MDtfLS0pZ28uY29tcHV0ZVBvc2l0aW9uKGUsbiwhMSxtLF8sZykscFtkKytdPWcueCxwW2QrK109Zy55LHBbZCsrXT1nLno7Zm9yKF89MCxtPW8tMjttPjA7bS0tKWdvLmNvbXB1dGVQb3NpdGlvbihlLG4sITEsbSxfLGcpLHBbZCsrXT1nLngscFtkKytdPWcueSxwW2QrK109Zy56O2xldCBiPXAubGVuZ3RoLzMqMixUPUZ0LmNyZWF0ZVR5cGVkQXJyYXkocC5sZW5ndGgvMyxiKSxPPTA7Zm9yKGxldCB3PTA7dzxwLmxlbmd0aC8zLTE7dysrKVRbTysrXT13LFRbTysrXT13KzE7VFtPKytdPXAubGVuZ3RoLzMtMSxUW08rK109MDtsZXQgRT1uZXcgQnQoe2F0dHJpYnV0ZXM6bmV3IHJlLHByaW1pdGl2ZVR5cGU6RHQuTElORVN9KTtyZXR1cm4gRS5hdHRyaWJ1dGVzLnBvc2l0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pLEUuaW5kaWNlcz1ULEV9ZnVuY3Rpb24gU0IodCxlKXtsZXQgbj10Ll9zdXJmYWNlSGVpZ2h0LG89dC5fZXh0cnVkZWRIZWlnaHQscj10Ll9lbGxpcHNvaWQsaT1vUih0LGUpLHM9ZS5oZWlnaHQsZj1lLndpZHRoLHU9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KGkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsbixyLCExKSxjPXUubGVuZ3RoLGw9bmV3IEZsb2F0NjRBcnJheShjKjIpO2wuc2V0KHUpO2xldCBwPVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChpLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLG8scik7bC5zZXQocCxjKSxpLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPWw7bGV0IGQ9ZS5ub3J0aENhcCxtPWUuc291dGhDYXAsXz00O2QmJihfLT0xKSxtJiYoXy09MSk7bGV0IGc9KGwubGVuZ3RoLzMrXykqMixiPUZ0LmNyZWF0ZVR5cGVkQXJyYXkobC5sZW5ndGgvMyxnKTtjPWwubGVuZ3RoLzY7bGV0IFQ9MDtmb3IobGV0IEU9MDtFPGMtMTtFKyspYltUKytdPUUsYltUKytdPUUrMSxiW1QrK109RStjLGJbVCsrXT1FK2MrMTtiW1QrK109Yy0xLGJbVCsrXT0wLGJbVCsrXT1jK2MtMSxiW1QrK109YyxiW1QrK109MCxiW1QrK109YztsZXQgTztpZihkKU89cy0xO2Vsc2V7bGV0IEU9Zi0xO2JbVCsrXT1FLGJbVCsrXT1FK2MsTz1mK3MtMn1pZihiW1QrK109TyxiW1QrK109TytjLCFtKXtsZXQgRT1mK08tMTtiW1QrK109RSxiW1RdPUUrY31yZXR1cm4gaS5pbmRpY2VzPWIsaX1mdW5jdGlvbiB2YSh0KXt0PXQ/P050LkVNUFRZX09CSkVDVDtsZXQgZT10LnJlY3RhbmdsZSxuPXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLG89dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCxyPXQucm90YXRpb24/PzA7aWYoIWgoZSkpdGhyb3cgbmV3IEwoInJlY3RhbmdsZSBpcyByZXF1aXJlZC4iKTtpZihNdC5fdmFsaWRhdGUoZSksZS5ub3J0aDxlLnNvdXRoKXRocm93IG5ldyBMKCJvcHRpb25zLnJlY3RhbmdsZS5ub3J0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvcHRpb25zLnJlY3RhbmdsZS5zb3V0aCIpO2xldCBpPXQuaGVpZ2h0Pz8wLHM9dC5leHRydWRlZEhlaWdodD8/aTt0aGlzLl9yZWN0YW5nbGU9TXQuY2xvbmUoZSksdGhpcy5fZ3JhbnVsYXJpdHk9bix0aGlzLl9lbGxpcHNvaWQ9byx0aGlzLl9zdXJmYWNlSGVpZ2h0PU1hdGgubWF4KGkscyksdGhpcy5fcm90YXRpb249cix0aGlzLl9leHRydWRlZEhlaWdodD1NYXRoLm1pbihpLHMpLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVSZWN0YW5nbGVPdXRsaW5lR2VvbWV0cnkifXZhciB3QixPQixFQixSQixyUixpUixJYSxDQixGeSxzUj0kKCgpPT57dmUoKTtMdCgpO0llKCk7RGUoKTt5ZSgpO2F0KCk7anQoKTskdCgpO1hlKCk7WWUoKTthbigpO0ZvKCk7JGUoKTtLdCgpO3FyKCk7dG4oKTt3bigpO1N5KCk7d0I9bmV3IGd0LE9CPW5ldyBndCxFQj1uZXcgYSxSQj1uZXcgTXQ7dmEucGFja2VkTGVuZ3RoPU10LnBhY2tlZExlbmd0aCtZLnBhY2tlZExlbmd0aCs1O3ZhLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJhcnJheSBpcyByZXF1aXJlZCIpO3JldHVybiBuPW4/PzAsTXQucGFjayh0Ll9yZWN0YW5nbGUsZSxuKSxuKz1NdC5wYWNrZWRMZW5ndGgsWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9ncmFudWxhcml0eSxlW24rK109dC5fc3VyZmFjZUhlaWdodCxlW24rK109dC5fcm90YXRpb24sZVtuKytdPXQuX2V4dHJ1ZGVkSGVpZ2h0LGVbbl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtyUj1uZXcgTXQsaVI9WS5jbG9uZShZLlVOSVRfU1BIRVJFKSxJYT17cmVjdGFuZ2xlOnJSLGVsbGlwc29pZDppUixncmFudWxhcml0eTp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O3ZhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoImFycmF5IGlzIHJlcXVpcmVkIik7ZT1lPz8wO2xldCBvPU10LnVucGFjayh0LGUsclIpO2UrPU10LnBhY2tlZExlbmd0aDtsZXQgcj1ZLnVucGFjayh0LGUsaVIpO2UrPVkucGFja2VkTGVuZ3RoO2xldCBpPXRbZSsrXSxzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZV07cmV0dXJuIGgobik/KG4uX3JlY3RhbmdsZT1NdC5jbG9uZShvLG4uX3JlY3RhbmdsZSksbi5fZWxsaXBzb2lkPVkuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3N1cmZhY2VIZWlnaHQ9cyxuLl9yb3RhdGlvbj1mLG4uX2V4dHJ1ZGVkSGVpZ2h0PXUsbi5fb2Zmc2V0QXR0cmlidXRlPWM9PT0tMT92b2lkIDA6YyxuKTooSWEuZ3JhbnVsYXJpdHk9aSxJYS5oZWlnaHQ9cyxJYS5yb3RhdGlvbj1mLElhLmV4dHJ1ZGVkSGVpZ2h0PXUsSWEub2Zmc2V0QXR0cmlidXRlPWM9PT0tMT92b2lkIDA6YyxuZXcgdmEoSWEpKX07Q0I9bmV3IHN0O3ZhLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3JlY3RhbmdsZSxuPXQuX2VsbGlwc29pZCxvPWdvLmNvbXB1dGVPcHRpb25zKGUsdC5fZ3JhbnVsYXJpdHksdC5fcm90YXRpb24sMCxSQixDQikscixpO2lmKFAuZXF1YWxzRXBzaWxvbihlLm5vcnRoLGUuc291dGgsUC5FUFNJTE9OMTApfHxQLmVxdWFsc0Vwc2lsb24oZS5lYXN0LGUud2VzdCxQLkVQU0lMT04xMCkpcmV0dXJuO2xldCBzPXQuX3N1cmZhY2VIZWlnaHQsZj10Ll9leHRydWRlZEhlaWdodCx1PSFQLmVxdWFsc0Vwc2lsb24ocyxmLDAsUC5FUFNJTE9OMiksYztpZih1KXtpZihyPVNCKHQsbyksaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgZD1yLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLG09bmV3IFVpbnQ4QXJyYXkoZCk7dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QP209bS5maWxsKDEsMCxkLzIpOihjPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLG09bS5maWxsKGMpKSxyLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bX0pfWxldCBsPWd0LmZyb21SZWN0YW5nbGUzRChlLG4scyxPQikscD1ndC5mcm9tUmVjdGFuZ2xlM0QoZSxuLGYsd0IpO2k9Z3QudW5pb24obCxwKX1lbHNle2lmKHI9b1IodCxvKSxyLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChyLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHMsbiwhMSksaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgbD1yLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aDtjPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxO2xldCBwPW5ldyBVaW50OEFycmF5KGwvMykuZmlsbChjKTtyLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6cH0pfWk9Z3QuZnJvbVJlY3RhbmdsZTNEKGUsbixzKX1yZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOnIuYXR0cmlidXRlcyxpbmRpY2VzOnIuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkR0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOmksb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtGeT12YX0pO3ZhciBMeT17fTtwZShMeSx7ZGVmYXVsdDooKT0+UEJ9KTtmdW5jdGlvbiB4Qih0LGUpe3JldHVybiBoKGUpJiYodD1GeS51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSx0Ll9yZWN0YW5nbGU9TXQuY2xvbmUodC5fcmVjdGFuZ2xlKSxGeS5jcmVhdGVHZW9tZXRyeSh0KX12YXIgUEIsRHk9JCgoKT0+e2F0KCk7JHQoKTt3bigpO3NSKCk7UEI9eEJ9KTtmdW5jdGlvbiBNQih0LGUsbixvLHIsaSxzKXtsZXQgZj1Bbi5udW1iZXJPZlBvaW50cyh0LGUsciksdSxjPW4ucmVkLGw9bi5ncmVlbixwPW4uYmx1ZSxkPW4uYWxwaGEsbT1vLnJlZCxfPW8uZ3JlZW4sZz1vLmJsdWUsYj1vLmFscGhhO2lmKG5lLmVxdWFscyhuLG8pKXtmb3IodT0wO3U8Zjt1KyspaVtzKytdPW5lLmZsb2F0VG9CeXRlKGMpLGlbcysrXT1uZS5mbG9hdFRvQnl0ZShsKSxpW3MrK109bmUuZmxvYXRUb0J5dGUocCksaVtzKytdPW5lLmZsb2F0VG9CeXRlKGQpO3JldHVybiBzfWxldCBUPShtLWMpL2YsTz0oXy1sKS9mLEU9KGctcCkvZix3PShiLWQpL2YsQz1zO2Zvcih1PTA7dTxmO3UrKylpW0MrK109bmUuZmxvYXRUb0J5dGUoYyt1KlQpLGlbQysrXT1uZS5mbG9hdFRvQnl0ZShsK3UqTyksaVtDKytdPW5lLmZsb2F0VG9CeXRlKHArdSpFKSxpW0MrK109bmUuZmxvYXRUb0J5dGUoZCt1KncpO3JldHVybiBDfWZ1bmN0aW9uIHJ1KHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9zaXRpb25zLG49dC5jb2xvcnMsbz10LmNvbG9yc1BlclZlcnRleD8/ITE7aWYoIWgoZSl8fGUubGVuZ3RoPDIpdGhyb3cgbmV3IEwoIkF0IGxlYXN0IHR3byBwb3NpdGlvbnMgYXJlIHJlcXVpcmVkLiIpO2lmKGgobikmJihvJiZuLmxlbmd0aDxlLmxlbmd0aHx8IW8mJm4ubGVuZ3RoPGUubGVuZ3RoLTEpKXRocm93IG5ldyBMKCJjb2xvcnMgaGFzIGFuIGludmFsaWQgbGVuZ3RoLiIpO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX2NvbG9ycz1uLHRoaXMuX2NvbG9yc1BlclZlcnRleD1vLHRoaXMuX2FyY1R5cGU9dC5hcmNUeXBlPz9oZS5HRU9ERVNJQyx0aGlzLl9ncmFudWxhcml0eT10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl9lbGxpcHNvaWQ9dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVTaW1wbGVQb2x5bGluZUdlb21ldHJ5IjtsZXQgcj0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoO3IrPWgobik/MStuLmxlbmd0aCpuZS5wYWNrZWRMZW5ndGg6MSx0aGlzLnBhY2tlZExlbmd0aD1yK1kucGFja2VkTGVuZ3RoKzN9dmFyIExkLERkLE5CLEJ5LGNSPSQoKCk9PntmYygpO3ZlKCk7THQoKTtQYSgpO0RlKCk7eWUoKTthdCgpO2p0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTskZSgpO0t0KCk7eWEoKTt0bigpO3J1LnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJhcnJheSBpcyByZXF1aXJlZCIpO249bj8/MDtsZXQgbyxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2ZvcihlW24rK109aSxvPTA7bzxpOysrbyxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2socltvXSxlLG4pO2xldCBzPXQuX2NvbG9ycztmb3IoaT1oKHMpP3MubGVuZ3RoOjAsZVtuKytdPWksbz0wO288aTsrK28sbis9bmUucGFja2VkTGVuZ3RoKW5lLnBhY2soc1tvXSxlLG4pO3JldHVybiBZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2NvbG9yc1BlclZlcnRleD8xOjAsZVtuKytdPXQuX2FyY1R5cGUsZVtuXT10Ll9ncmFudWxhcml0eSxlfTtydS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBMKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9ZT8/MDtsZXQgbyxyPXRbZSsrXSxpPW5ldyBBcnJheShyKTtmb3Iobz0wO288cjsrK28sZSs9YS5wYWNrZWRMZW5ndGgpaVtvXT1hLnVucGFjayh0LGUpO3I9dFtlKytdO2xldCBzPXI+MD9uZXcgQXJyYXkocik6dm9pZCAwO2ZvcihvPTA7bzxyOysrbyxlKz1uZS5wYWNrZWRMZW5ndGgpc1tvXT1uZS51bnBhY2sodCxlKTtsZXQgZj1ZLnVucGFjayh0LGUpO2UrPVkucGFja2VkTGVuZ3RoO2xldCB1PXRbZSsrXT09PTEsYz10W2UrK10sbD10W2VdO3JldHVybiBoKG4pPyhuLl9wb3NpdGlvbnM9aSxuLl9jb2xvcnM9cyxuLl9lbGxpcHNvaWQ9ZixuLl9jb2xvcnNQZXJWZXJ0ZXg9dSxuLl9hcmNUeXBlPWMsbi5fZ3JhbnVsYXJpdHk9bCxuKTpuZXcgcnUoe3Bvc2l0aW9uczppLGNvbG9yczpzLGVsbGlwc29pZDpmLGNvbG9yc1BlclZlcnRleDp1LGFyY1R5cGU6YyxncmFudWxhcml0eTpsfSl9O0xkPW5ldyBBcnJheSgyKSxEZD1uZXcgQXJyYXkoMiksTkI9e3Bvc2l0aW9uczpMZCxoZWlnaHQ6RGQsZWxsaXBzb2lkOnZvaWQgMCxtaW5EaXN0YW5jZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwfTtydS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9wb3NpdGlvbnMsbj10Ll9jb2xvcnMsbz10Ll9jb2xvcnNQZXJWZXJ0ZXgscj10Ll9hcmNUeXBlLGk9dC5fZ3JhbnVsYXJpdHkscz10Ll9lbGxpcHNvaWQsZj1QLmNob3JkTGVuZ3RoKGkscy5tYXhpbXVtUmFkaXVzKSx1PWgobikmJiFvLGMsbD1lLmxlbmd0aCxwLGQsbSxfLGc9MDtpZihyPT09aGUuR0VPREVTSUN8fHI9PT1oZS5SSFVNQil7bGV0IHcsQyxNO3I9PT1oZS5HRU9ERVNJQz8odz1QLmNob3JkTGVuZ3RoKGkscy5tYXhpbXVtUmFkaXVzKSxDPUFuLm51bWJlck9mUG9pbnRzLE09QW4uZ2VuZXJhdGVBcmMpOih3PWksQz1Bbi5udW1iZXJPZlBvaW50c1JodW1iTGluZSxNPUFuLmdlbmVyYXRlUmh1bWJBcmMpO2xldCBOPUFuLmV4dHJhY3RIZWlnaHRzKGUscyksRj1OQjtpZihyPT09aGUuR0VPREVTSUM/Ri5taW5EaXN0YW5jZT1mOkYuZ3JhbnVsYXJpdHk9aSxGLmVsbGlwc29pZD1zLHUpe2xldCBJPTA7Zm9yKGM9MDtjPGwtMTtjKyspSSs9QyhlW2NdLGVbYysxXSx3KSsxO3A9bmV3IEZsb2F0NjRBcnJheShJKjMpLG09bmV3IFVpbnQ4QXJyYXkoSSo0KSxGLnBvc2l0aW9ucz1MZCxGLmhlaWdodD1EZDtsZXQgdj0wO2ZvcihjPTA7YzxsLTE7KytjKXtMZFswXT1lW2NdLExkWzFdPWVbYysxXSxEZFswXT1OW2NdLERkWzFdPU5bYysxXTtsZXQgQj1NKEYpO2lmKGgobikpe2xldCBBPUIubGVuZ3RoLzM7Xz1uW2NdO2ZvcihsZXQgUz0wO1M8QTsrK1MpbVt2KytdPW5lLmZsb2F0VG9CeXRlKF8ucmVkKSxtW3YrK109bmUuZmxvYXRUb0J5dGUoXy5ncmVlbiksbVt2KytdPW5lLmZsb2F0VG9CeXRlKF8uYmx1ZSksbVt2KytdPW5lLmZsb2F0VG9CeXRlKF8uYWxwaGEpfXAuc2V0KEIsZyksZys9Qi5sZW5ndGh9fWVsc2UgaWYoRi5wb3NpdGlvbnM9ZSxGLmhlaWdodD1OLHA9bmV3IEZsb2F0NjRBcnJheShNKEYpKSxoKG4pKXtmb3IobT1uZXcgVWludDhBcnJheShwLmxlbmd0aC8zKjQpLGM9MDtjPGwtMTsrK2Mpe2xldCB2PWVbY10sQj1lW2MrMV0sQT1uW2NdLFM9bltjKzFdO2c9TUIodixCLEEsUyxmLG0sZyl9bGV0IEk9bltsLTFdO21bZysrXT1uZS5mbG9hdFRvQnl0ZShJLnJlZCksbVtnKytdPW5lLmZsb2F0VG9CeXRlKEkuZ3JlZW4pLG1bZysrXT1uZS5mbG9hdFRvQnl0ZShJLmJsdWUpLG1bZysrXT1uZS5mbG9hdFRvQnl0ZShJLmFscGhhKX19ZWxzZXtkPXU/bCoyLTI6bCxwPW5ldyBGbG9hdDY0QXJyYXkoZCozKSxtPWgobik/bmV3IFVpbnQ4QXJyYXkoZCo0KTp2b2lkIDA7bGV0IHc9MCxDPTA7Zm9yKGM9MDtjPGw7KytjKXtsZXQgTT1lW2NdO2lmKHUmJmM+MCYmKGEucGFjayhNLHAsdyksdys9MyxfPW5bYy0xXSxtW0MrK109bmUuZmxvYXRUb0J5dGUoXy5yZWQpLG1bQysrXT1uZS5mbG9hdFRvQnl0ZShfLmdyZWVuKSxtW0MrK109bmUuZmxvYXRUb0J5dGUoXy5ibHVlKSxtW0MrK109bmUuZmxvYXRUb0J5dGUoXy5hbHBoYSkpLHUmJmM9PT1sLTEpYnJlYWs7YS5wYWNrKE0scCx3KSx3Kz0zLGgobikmJihfPW5bY10sbVtDKytdPW5lLmZsb2F0VG9CeXRlKF8ucmVkKSxtW0MrK109bmUuZmxvYXRUb0J5dGUoXy5ncmVlbiksbVtDKytdPW5lLmZsb2F0VG9CeXRlKF8uYmx1ZSksbVtDKytdPW5lLmZsb2F0VG9CeXRlKF8uYWxwaGEpKX19bGV0IGI9bmV3IHJlO2IucG9zaXRpb249bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpwfSksaChuKSYmKGIuY29sb3I9bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6NCx2YWx1ZXM6bSxub3JtYWxpemU6ITB9KSksZD1wLmxlbmd0aC8zO2xldCBUPShkLTEpKjIsTz1GdC5jcmVhdGVUeXBlZEFycmF5KGQsVCksRT0wO2ZvcihjPTA7YzxkLTE7KytjKU9bRSsrXT1jLE9bRSsrXT1jKzE7cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpiLGluZGljZXM6TyxwcmltaXRpdmVUeXBlOkR0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOmd0LmZyb21Qb2ludHMoZSl9KX07Qnk9cnV9KTt2YXIgVXk9e307cGUoVXkse2RlZmF1bHQ6KCk9PnZCfSk7ZnVuY3Rpb24gSUIodCxlKXtyZXR1cm4gaChlKSYmKHQ9QnkudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksQnkuY3JlYXRlR2VvbWV0cnkodCl9dmFyIHZCLGt5PSQoKCk9PnthdCgpOyR0KCk7Y1IoKTt2Qj1JQn0pO2Z1bmN0aW9uIEZhKHQpe2xldCBlPXQucmFkaXVzPz8xLG89e3JhZGlpOm5ldyBhKGUsZSxlKSxzdGFja1BhcnRpdGlvbnM6dC5zdGFja1BhcnRpdGlvbnMsc2xpY2VQYXJ0aXRpb25zOnQuc2xpY2VQYXJ0aXRpb25zLHZlcnRleEZvcm1hdDp0LnZlcnRleEZvcm1hdH07dGhpcy5fZWxsaXBzb2lkR2VvbWV0cnk9bmV3IHNyKG8pLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVNwaGVyZUdlb21ldHJ5In12YXIgRkIsQ3MsR3ksYVI9JCgoKT0+e0x0KCk7V3QoKTthdCgpO0FkKCk7Um8oKTtGYS5wYWNrZWRMZW5ndGg9c3IucGFja2VkTGVuZ3RoO0ZhLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSxzci5wYWNrKHQuX2VsbGlwc29pZEdlb21ldHJ5LGUsbil9O0ZCPW5ldyBzcixDcz17cmFkaXVzOnZvaWQgMCxyYWRpaTpuZXcgYSx2ZXJ0ZXhGb3JtYXQ6bmV3IHB0LHN0YWNrUGFydGl0aW9uczp2b2lkIDAsc2xpY2VQYXJ0aXRpb25zOnZvaWQgMH07RmEudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1zci51bnBhY2sodCxlLEZCKTtyZXR1cm4gQ3MudmVydGV4Rm9ybWF0PXB0LmNsb25lKG8uX3ZlcnRleEZvcm1hdCxDcy52ZXJ0ZXhGb3JtYXQpLENzLnN0YWNrUGFydGl0aW9ucz1vLl9zdGFja1BhcnRpdGlvbnMsQ3Muc2xpY2VQYXJ0aXRpb25zPW8uX3NsaWNlUGFydGl0aW9ucyxoKG4pPyhhLmNsb25lKG8uX3JhZGlpLENzLnJhZGlpKSxuLl9lbGxpcHNvaWRHZW9tZXRyeT1uZXcgc3IoQ3MpLG4pOihDcy5yYWRpdXM9by5fcmFkaWkueCxuZXcgRmEoQ3MpKX07RmEuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7cmV0dXJuIHNyLmNyZWF0ZUdlb21ldHJ5KHQuX2VsbGlwc29pZEdlb21ldHJ5KX07R3k9RmF9KTt2YXIgVnk9e307cGUoVnkse2RlZmF1bHQ6KCk9PkRCfSk7ZnVuY3Rpb24gTEIodCxlKXtyZXR1cm4gaChlKSYmKHQ9R3kudW5wYWNrKHQsZSkpLEd5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBEQix6eT0kKCgpPT57YXQoKTthUigpO0RCPUxCfSk7ZnVuY3Rpb24gTGEodCl7bGV0IGU9dC5yYWRpdXM/PzEsbz17cmFkaWk6bmV3IGEoZSxlLGUpLHN0YWNrUGFydGl0aW9uczp0LnN0YWNrUGFydGl0aW9ucyxzbGljZVBhcnRpdGlvbnM6dC5zbGljZVBhcnRpdGlvbnMsc3ViZGl2aXNpb25zOnQuc3ViZGl2aXNpb25zfTt0aGlzLl9lbGxpcHNvaWRHZW9tZXRyeT1uZXcgV3IobyksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlU3BoZXJlT3V0bGluZUdlb21ldHJ5In12YXIgQkIsVGMsanksZlI9JCgoKT0+e0x0KCk7V3QoKTthdCgpO1JfKCk7TGEucGFja2VkTGVuZ3RoPVdyLnBhY2tlZExlbmd0aDtMYS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCksV3IucGFjayh0Ll9lbGxpcHNvaWRHZW9tZXRyeSxlLG4pfTtCQj1uZXcgV3IsVGM9e3JhZGl1czp2b2lkIDAscmFkaWk6bmV3IGEsc3RhY2tQYXJ0aXRpb25zOnZvaWQgMCxzbGljZVBhcnRpdGlvbnM6dm9pZCAwLHN1YmRpdmlzaW9uczp2b2lkIDB9O0xhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7bGV0IG89V3IudW5wYWNrKHQsZSxCQik7cmV0dXJuIFRjLnN0YWNrUGFydGl0aW9ucz1vLl9zdGFja1BhcnRpdGlvbnMsVGMuc2xpY2VQYXJ0aXRpb25zPW8uX3NsaWNlUGFydGl0aW9ucyxUYy5zdWJkaXZpc2lvbnM9by5fc3ViZGl2aXNpb25zLGgobik/KGEuY2xvbmUoby5fcmFkaWksVGMucmFkaWkpLG4uX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBXcihUYyksbik6KFRjLnJhZGl1cz1vLl9yYWRpaS54LG5ldyBMYShUYykpfTtMYS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtyZXR1cm4gV3IuY3JlYXRlR2VvbWV0cnkodC5fZWxsaXBzb2lkR2VvbWV0cnkpfTtqeT1MYX0pO3ZhciBIeT17fTtwZShIeSx7ZGVmYXVsdDooKT0+a0J9KTtmdW5jdGlvbiBVQih0LGUpe3JldHVybiBoKGUpJiYodD1qeS51bnBhY2sodCxlKSksankuY3JlYXRlR2VvbWV0cnkodCl9dmFyIGtCLHF5PSQoKCk9PnthdCgpO2ZSKCk7a0I9VUJ9KTt2YXIgS3k9e307cGUoS3kse2RlZmF1bHQ6KCk9Pmk0fSk7ZnVuY3Rpb24gakIodCxlLG4sbyxyLGkscyl7bGV0IGY9dC5sZW5ndGgsdT1uZXcgRmxvYXQ2NEFycmF5KGYqMyk7Zm9yKGxldCBjPTA7YzxmOysrYyl7bGV0IGw9dFtjXSxwPWVbY10sZD1uW2NdLG09UC5sZXJwKG8ud2VzdCxvLmVhc3QsbC9pdSksXz1QLmxlcnAoby5zb3V0aCxvLm5vcnRoLHAvaXUpLGc9UC5sZXJwKHIsaSxkL2l1KSxiPXN0LmZyb21SYWRpYW5zKG0sXyxnLFZCKSxUPXMuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYix6Qik7YS5wYWNrKFQsdSxjKjMpfXJldHVybiB1fWZ1bmN0aW9uIEhCKHQpe2xldCBlPXQubGVuZ3RoLG49bmV3IFVpbnQzMkFycmF5KGUrMSksbz0wO2ZvcihsZXQgcj0wO3I8ZTsrK3IpbltyXT1vLG8rPXRbcl07cmV0dXJuIG5bZV09byxufWZ1bmN0aW9uIFdCKHQsZSxuLG8pe2xldCByPW8ubGVuZ3RoLGk9dC5sZW5ndGgscz1uZXcgVWludDhBcnJheShpKSxmPXFCLHU9S0IsYz0wO2ZvcihsZXQgcD0wO3A8cjtwKyspe2xldCBkPW9bcF0sbT1kO2ZvcihsZXQgXz0xO188ZDtfKyspe2xldCBnPWMrXyxiPWctMTt1LmxvbmdpdHVkZT10W2ddLHUubGF0aXR1ZGU9ZVtnXSxmLmxvbmdpdHVkZT10W2JdLGYubGF0aXR1ZGU9ZVtiXSxzdC5lcXVhbHModSxmKSYmKG0tLSxzW2JdPTEpfW9bcF09bSxjKz1kfWxldCBsPTA7Zm9yKGxldCBwPTA7cDxpO3ArKylzW3BdIT09MSYmKHRbbF09dFtwXSxlW2xdPWVbcF0sbltsXT1uW3BdLGwrKyl9ZnVuY3Rpb24gbVIodCl7bGV0IGU9dCo4LG49ZSozLG89ZSo0O3RoaXMuc3RhcnRFbGxpcHNvaWROb3JtYWxzPW5ldyBGbG9hdDMyQXJyYXkobiksdGhpcy5lbmRFbGxpcHNvaWROb3JtYWxzPW5ldyBGbG9hdDMyQXJyYXkobiksdGhpcy5zdGFydFBvc2l0aW9uQW5kSGVpZ2h0cz1uZXcgRmxvYXQzMkFycmF5KG8pLHRoaXMuc3RhcnRGYWNlTm9ybWFsQW5kVmVydGV4Q29ybmVySWRzPW5ldyBGbG9hdDMyQXJyYXkobyksdGhpcy5lbmRQb3NpdGlvbkFuZEhlaWdodHM9bmV3IEZsb2F0MzJBcnJheShvKSx0aGlzLmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzPW5ldyBGbG9hdDMyQXJyYXkobyksdGhpcy52ZXJ0ZXhCYXRjaElkcz1uZXcgVWludDE2QXJyYXkoZSksdGhpcy5pbmRpY2VzPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoZSwzNip0KSx0aGlzLnZlYzNPZmZzZXQ9MCx0aGlzLnZlYzRPZmZzZXQ9MCx0aGlzLmJhdGNoSWRPZmZzZXQ9MCx0aGlzLmluZGV4T2Zmc2V0PTAsdGhpcy52b2x1bWVTdGFydEluZGV4PTB9ZnVuY3Rpb24gbFIodCxlLG4sbyxyKXtsZXQgaT1hLnN1YnRyYWN0KG4sZSxYQikscz1hLnN1YnRyYWN0KGUsdCx1Uik7cmV0dXJuIGEubm9ybWFsaXplKGksaSksYS5ub3JtYWxpemUocyxzKSxhLmRvdChpLHMpPEdCJiYocz1hLm11bHRpcGx5QnlTY2FsYXIocywtMSx1UikpLGEuYWRkKGkscyxyKSxhLmVxdWFscyhyLGEuWkVSTykmJihyPWEuc3VidHJhY3QodCxlKSksYS5jcm9zcyhyLG8sciksYS5jcm9zcyhvLHIsciksYS5ub3JtYWxpemUocixyKSxyfWZ1bmN0aW9uIHI0KHQsZSl7bGV0IG49bmV3IFVpbnQxNkFycmF5KHQucG9zaXRpb25zKSxvPW5ldyBVaW50MTZBcnJheSh0LndpZHRocykscj1uZXcgVWludDMyQXJyYXkodC5jb3VudHMpLGk9bmV3IFVpbnQxNkFycmF5KHQuYmF0Y2hJZHMpLHM9SkIsZj10NCx1PWU0LGM9bmV3IEZsb2F0NjRBcnJheSh0LnBhY2tlZEJ1ZmZlciksbD0wLHA9Y1tsKytdLGQ9Y1tsKytdO010LnVucGFjayhjLGwscyksbCs9TXQucGFja2VkTGVuZ3RoLFkudW5wYWNrKGMsbCxmKSxsKz1ZLnBhY2tlZExlbmd0aCxhLnVucGFjayhjLGwsdSk7bGV0IG0sXz1uLmxlbmd0aC8zLGc9bi5zdWJhcnJheSgwLF8pLGI9bi5zdWJhcnJheShfLDIqXyksVD1uLnN1YmFycmF5KDIqXywzKl8pO25uLnppZ1phZ0RlbHRhRGVjb2RlKGcsYixUKSxXQihnLGIsVCxyKTtsZXQgTz1yLmxlbmd0aCxFPTA7Zm9yKG09MDttPE87bSsrKXtsZXQgQj1yW21dO0UrPUItMX1sZXQgdz1uZXcgbVIoRSksQz1qQihnLGIsVCxzLHAsZCxmLHUpO189Zy5sZW5ndGg7bGV0IE09bmV3IEZsb2F0MzJBcnJheShfKjMpO2ZvcihtPTA7bTxfOysrbSlNW20qM109Q1ttKjNdLXUueCxNW20qMysxXT1DW20qMysxXS11LnksTVttKjMrMl09Q1ttKjMrMl0tdS56O2xldCBOPTAsRj0wO2ZvcihtPTA7bTxPO20rKyl7bGV0IEI9clttXS0xLEE9b1ttXSouNSxTPWlbbV0seD1OO2ZvcihsZXQgRD0wO0Q8QjtEKyspe2xldCB6PWEudW5wYWNrKE0sTixuNCksaj1hLnVucGFjayhNLE4rMyxvNCksaz1UW0ZdLHE9VFtGKzFdO2s9UC5sZXJwKHAsZCxrL2l1KSxxPVAubGVycChwLGQscS9pdSksRisrO2xldCBXPUJkLFI9VWQ7aWYoRD09PTApe2xldCBudD14K0IqMyxjdD1hLnVucGFjayhNLG50LEJkKTtpZihhLmVxdWFscyhjdCx6KSlhLnVucGFjayhNLG50LTMsVyk7ZWxzZXtsZXQgbHQ9YS5zdWJ0cmFjdCh6LGosQmQpO1c9YS5hZGQobHQseixCZCl9fWVsc2UgYS51bnBhY2soTSxOLTMsVyk7aWYoRD09PUItMSl7bGV0IG50PWEudW5wYWNrKE0seCxVZCk7aWYoYS5lcXVhbHMobnQsaikpYS51bnBhY2soTSx4KzMsUik7ZWxzZXtsZXQgY3Q9YS5zdWJ0cmFjdChqLHosVWQpO1I9YS5hZGQoY3QsaixVZCl9fWVsc2UgYS51bnBhY2soTSxOKzYsUik7dy5hZGRWb2x1bWUoVyx6LGosUixrLHEsQSxTLHUsZiksTis9M31OKz0zLEYrK31sZXQgST13LmluZGljZXM7ZS5wdXNoKHcuc3RhcnRFbGxpcHNvaWROb3JtYWxzLmJ1ZmZlciksZS5wdXNoKHcuZW5kRWxsaXBzb2lkTm9ybWFscy5idWZmZXIpLGUucHVzaCh3LnN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzLmJ1ZmZlciksZS5wdXNoKHcuc3RhcnRGYWNlTm9ybWFsQW5kVmVydGV4Q29ybmVySWRzLmJ1ZmZlciksZS5wdXNoKHcuZW5kUG9zaXRpb25BbmRIZWlnaHRzLmJ1ZmZlciksZS5wdXNoKHcuZW5kRmFjZU5vcm1hbEFuZEhhbGZXaWR0aHMuYnVmZmVyKSxlLnB1c2gody52ZXJ0ZXhCYXRjaElkcy5idWZmZXIpLGUucHVzaChJLmJ1ZmZlcik7bGV0IHY9e2luZGV4RGF0YXR5cGU6SS5CWVRFU19QRVJfRUxFTUVOVD09PTI/RnQuVU5TSUdORURfU0hPUlQ6RnQuVU5TSUdORURfSU5ULHN0YXJ0RWxsaXBzb2lkTm9ybWFsczp3LnN0YXJ0RWxsaXBzb2lkTm9ybWFscy5idWZmZXIsZW5kRWxsaXBzb2lkTm9ybWFsczp3LmVuZEVsbGlwc29pZE5vcm1hbHMuYnVmZmVyLHN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzOncuc3RhcnRQb3NpdGlvbkFuZEhlaWdodHMuYnVmZmVyLHN0YXJ0RmFjZU5vcm1hbEFuZFZlcnRleENvcm5lcklkczp3LnN0YXJ0RmFjZU5vcm1hbEFuZFZlcnRleENvcm5lcklkcy5idWZmZXIsZW5kUG9zaXRpb25BbmRIZWlnaHRzOncuZW5kUG9zaXRpb25BbmRIZWlnaHRzLmJ1ZmZlcixlbmRGYWNlTm9ybWFsQW5kSGFsZldpZHRoczp3LmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzLmJ1ZmZlcix2ZXJ0ZXhCYXRjaElkczp3LnZlcnRleEJhdGNoSWRzLmJ1ZmZlcixpbmRpY2VzOkkuYnVmZmVyfTtpZih0LmtlZXBEZWNvZGVkUG9zaXRpb25zKXtsZXQgQj1IQihyKTtlLnB1c2goQy5idWZmZXIsQi5idWZmZXIpLHY9X3Iodix7ZGVjb2RlZFBvc2l0aW9uczpDLmJ1ZmZlcixkZWNvZGVkUG9zaXRpb25PZmZzZXRzOkIuYnVmZmVyfSl9cmV0dXJuIHZ9dmFyIGl1LEdCLFZCLHpCLHFCLEtCLHVSLFhCLGhSLHBSLGRSLFlCLCRCLFpCLFFCLEpCLHQ0LGU0LEJkLG40LG80LFVkLGk0LFd5PSQoKCk9PnthcygpO0x0KCk7SWUoKTtycCgpOyR0KCk7JGUoKTtLdCgpO3duKCk7c28oKTtpdT0zMjc2NyxHQj1NYXRoLmNvcyhQLnRvUmFkaWFucygxNTApKSxWQj1uZXcgc3QsekI9bmV3IGE7cUI9bmV3IHN0LEtCPW5ldyBzdDt1Uj1uZXcgYSxYQj1uZXcgYTtoUj1bMCwyLDYsMCw2LDQsMCwxLDMsMCwzLDIsMCw0LDUsMCw1LDEsNSwzLDEsNSw3LDMsNyw1LDQsNyw0LDYsNyw2LDIsNywyLDNdLHBSPWhSLmxlbmd0aCxkUj1uZXcgYSxZQj1uZXcgYSwkQj1uZXcgYSxaQj1uZXcgYSxRQj1uZXcgYTttUi5wcm90b3R5cGUuYWRkVm9sdW1lPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMsZix1LGMpe2xldCBsPWEuYWRkKGUsdSxkUikscD1jLmdlb2RldGljU3VyZmFjZU5vcm1hbChsLFlCKTtsPWEuYWRkKG4sdSxkUik7bGV0IGQ9Yy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwobCxaQiksbT1sUih0LGUsbixwLCRCKSxfPWxSKG8sbixlLGQsUUIpLGc9dGhpcy5zdGFydEVsbGlwc29pZE5vcm1hbHMsYj10aGlzLmVuZEVsbGlwc29pZE5vcm1hbHMsVD10aGlzLnN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzLE89dGhpcy5zdGFydEZhY2VOb3JtYWxBbmRWZXJ0ZXhDb3JuZXJJZHMsRT10aGlzLmVuZFBvc2l0aW9uQW5kSGVpZ2h0cyx3PXRoaXMuZW5kRmFjZU5vcm1hbEFuZEhhbGZXaWR0aHMsQz10aGlzLnZlcnRleEJhdGNoSWRzLE09dGhpcy5iYXRjaElkT2Zmc2V0LE49dGhpcy52ZWMzT2Zmc2V0LEY9dGhpcy52ZWM0T2Zmc2V0LEk7Zm9yKEk9MDtJPDg7SSsrKWEucGFjayhwLGcsTiksYS5wYWNrKGQsYixOKSxhLnBhY2soZSxULEYpLFRbRiszXT1yLGEucGFjayhuLEUsRiksRVtGKzNdPWksYS5wYWNrKG0sTyxGKSxPW0YrM109SSxhLnBhY2soXyx3LEYpLHdbRiszXT1zLENbTSsrXT1mLE4rPTMsRis9NDt0aGlzLmJhdGNoSWRPZmZzZXQ9TSx0aGlzLnZlYzNPZmZzZXQ9Tix0aGlzLnZlYzRPZmZzZXQ9RjtsZXQgdj10aGlzLmluZGljZXMsQj10aGlzLnZvbHVtZVN0YXJ0SW5kZXgsQT10aGlzLmluZGV4T2Zmc2V0O2ZvcihJPTA7STxwUjtJKyspdltBK0ldPWhSW0ldK0I7dGhpcy52b2x1bWVTdGFydEluZGV4Kz04LHRoaXMuaW5kZXhPZmZzZXQrPXBSfTtKQj1uZXcgTXQsdDQ9bmV3IFksZTQ9bmV3IGEsQmQ9bmV3IGEsbjQ9bmV3IGEsbzQ9bmV3IGEsVWQ9bmV3IGE7aTQ9UWUocjQpfSk7ZnVuY3Rpb24gczQodCl7dGhpcy5vZmZzZXQ9dC5vZmZzZXQsdGhpcy5jb3VudD10LmNvdW50LHRoaXMuY29sb3I9dC5jb2xvcix0aGlzLmJhdGNoSWRzPXQuYmF0Y2hJZHN9dmFyIF9SLHlSPSQoKCk9PntfUj1zNH0pO3ZhciBYeT17fTtwZShYeSx7ZGVmYXVsdDooKT0+YjR9KTtmdW5jdGlvbiBsNCh0LGUpe2xldCBuPWUqYzQsbz1hLnVucGFjayh0LG4sR2QpO24rPWEucGFja2VkTGVuZ3RoO2xldCByPWl0LnVucGFjayh0LG4sQ3IubW9kZWxNYXRyaXgpO2l0Lm11bHRpcGx5QnlTY2FsZShyLG8scik7bGV0IGk9Q3IuYm91bmRpbmdWb2x1bWU7cmV0dXJuIGEuY2xvbmUoYS5aRVJPLGkuY2VudGVyKSxpLnJhZGl1cz1NYXRoLnNxcnQoMyksQ3J9ZnVuY3Rpb24gcDQodCxlKXtsZXQgbj1lKmE0LG89dFtuKytdLHI9dFtuKytdLGk9YS5mcm9tRWxlbWVudHMobyxvLHIsR2QpLHM9aXQudW5wYWNrKHQsbixDci5tb2RlbE1hdHJpeCk7aXQubXVsdGlwbHlCeVNjYWxlKHMsaSxzKTtsZXQgZj1Dci5ib3VuZGluZ1ZvbHVtZTtyZXR1cm4gYS5jbG9uZShhLlpFUk8sZi5jZW50ZXIpLGYucmFkaXVzPU1hdGguc3FydCgyKSxDcn1mdW5jdGlvbiBkNCh0LGUpe2xldCBuPWUqZjQsbz1hLnVucGFjayh0LG4sR2QpO24rPWEucGFja2VkTGVuZ3RoO2xldCByPWl0LnVucGFjayh0LG4sQ3IubW9kZWxNYXRyaXgpO2l0Lm11bHRpcGx5QnlTY2FsZShyLG8scik7bGV0IGk9Q3IuYm91bmRpbmdWb2x1bWU7cmV0dXJuIGEuY2xvbmUoYS5aRVJPLGkuY2VudGVyKSxpLnJhZGl1cz0xLENyfWZ1bmN0aW9uIG00KHQsZSl7bGV0IG49ZSp1NCxvPXRbbisrXSxyPWEudW5wYWNrKHQsbixHZCksaT1pdC5mcm9tVHJhbnNsYXRpb24ocixDci5tb2RlbE1hdHJpeCk7aXQubXVsdGlwbHlCeVVuaWZvcm1TY2FsZShpLG8saSk7bGV0IHM9Q3IuYm91bmRpbmdWb2x1bWU7cmV0dXJuIGEuY2xvbmUoYS5aRVJPLHMuY2VudGVyKSxzLnJhZGl1cz0xLENyfWZ1bmN0aW9uIGtkKHQsZSxuLG8scil7aWYoIWgoZSkpcmV0dXJuO2xldCBpPW4ubGVuZ3RoLHM9by5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxmPW8uaW5kaWNlcyx1PXQucG9zaXRpb25zLGM9dC52ZXJ0ZXhCYXRjaElkcyxsPXQuaW5kaWNlcyxwPXQuYmF0Y2hJZHMsZD10LmJhdGNoVGFibGVDb2xvcnMsbT10LmJhdGNoZWRJbmRpY2VzLF89dC5pbmRleE9mZnNldHMsZz10LmluZGV4Q291bnRzLGI9dC5ib3VuZGluZ1ZvbHVtZXMsVD10Lm1vZGVsTWF0cml4LE89dC5jZW50ZXIsRT10LnBvc2l0aW9uT2Zmc2V0LHc9dC5iYXRjaElkSW5kZXgsQz10LmluZGV4T2Zmc2V0LE09dC5iYXRjaGVkSW5kaWNlc09mZnNldDtmb3IobGV0IE49MDtOPGk7KytOKXtsZXQgRj1yKGUsTiksST1GLm1vZGVsTWF0cml4O2l0Lm11bHRpcGx5KFQsSSxJKTtsZXQgdj1uW05dLEI9cy5sZW5ndGg7Zm9yKGxldCB4PTA7eDxCO3grPTMpe2xldCBEPWEudW5wYWNrKHMseCxoNCk7aXQubXVsdGlwbHlCeVBvaW50KEksRCxEKSxhLnN1YnRyYWN0KEQsTyxEKSxhLnBhY2soRCx1LEUqMyt4KSxjW3crK109dn1sZXQgQT1mLmxlbmd0aDtmb3IobGV0IHg9MDt4PEE7Kyt4KWxbQyt4XT1mW3hdK0U7bGV0IFM9TitNO21bU109bmV3IF9SKHtvZmZzZXQ6Qyxjb3VudDpBLGNvbG9yOm5lLmZyb21SZ2JhKGRbdl0pLGJhdGNoSWRzOlt2XX0pLHBbU109dixfW1NdPUMsZ1tTXT1BLGJbU109Z3QudHJhbnNmb3JtKEYuYm91bmRpbmdWb2x1bWUsSSksRSs9Qi8zLEMrPUF9dC5wb3NpdGlvbk9mZnNldD1FLHQuYmF0Y2hJZEluZGV4PXcsdC5pbmRleE9mZnNldD1DLHQuYmF0Y2hlZEluZGljZXNPZmZzZXQrPWl9ZnVuY3Rpb24gXzQodCl7bGV0IGU9bmV3IEZsb2F0NjRBcnJheSh0KSxuPTA7YS51bnBhY2soZSxuLGdSKSxuKz1hLnBhY2tlZExlbmd0aCxpdC51bnBhY2soZSxuLEFSKX1mdW5jdGlvbiB5NCh0KXtsZXQgZT10Lmxlbmd0aCxuPTA7Zm9yKGxldCBvPTA7bzxlOysrbyluKz1uZS5wYWNrZWRMZW5ndGgrMyt0W29dLmJhdGNoSWRzLmxlbmd0aDtyZXR1cm4gbn1mdW5jdGlvbiBnNCh0LGUsbil7bGV0IG89bi5sZW5ndGgscj0yK28qZ3QucGFja2VkTGVuZ3RoKzEreTQoZSksaT1uZXcgRmxvYXQ2NEFycmF5KHIpLHM9MDtpW3MrK109dCxpW3MrK109bztmb3IobGV0IHU9MDt1PG87Kyt1KWd0LnBhY2soblt1XSxpLHMpLHMrPWd0LnBhY2tlZExlbmd0aDtsZXQgZj1lLmxlbmd0aDtpW3MrK109Zjtmb3IobGV0IHU9MDt1PGY7Kyt1KXtsZXQgYz1lW3VdO25lLnBhY2soYy5jb2xvcixpLHMpLHMrPW5lLnBhY2tlZExlbmd0aCxpW3MrK109Yy5vZmZzZXQsaVtzKytdPWMuY291bnQ7bGV0IGw9Yy5iYXRjaElkcyxwPWwubGVuZ3RoO2lbcysrXT1wO2ZvcihsZXQgZD0wO2Q8cDsrK2QpaVtzKytdPWxbZF19cmV0dXJuIGl9ZnVuY3Rpb24gQTQodCxlKXtsZXQgbj1oKHQuYm94ZXMpP25ldyBGbG9hdDMyQXJyYXkodC5ib3hlcyk6dm9pZCAwLG89aCh0LmJveEJhdGNoSWRzKT9uZXcgVWludDE2QXJyYXkodC5ib3hCYXRjaElkcyk6dm9pZCAwLHI9aCh0LmN5bGluZGVycyk/bmV3IEZsb2F0MzJBcnJheSh0LmN5bGluZGVycyk6dm9pZCAwLGk9aCh0LmN5bGluZGVyQmF0Y2hJZHMpP25ldyBVaW50MTZBcnJheSh0LmN5bGluZGVyQmF0Y2hJZHMpOnZvaWQgMCxzPWgodC5lbGxpcHNvaWRzKT9uZXcgRmxvYXQzMkFycmF5KHQuZWxsaXBzb2lkcyk6dm9pZCAwLGY9aCh0LmVsbGlwc29pZEJhdGNoSWRzKT9uZXcgVWludDE2QXJyYXkodC5lbGxpcHNvaWRCYXRjaElkcyk6dm9pZCAwLHU9aCh0LnNwaGVyZXMpP25ldyBGbG9hdDMyQXJyYXkodC5zcGhlcmVzKTp2b2lkIDAsYz1oKHQuc3BoZXJlQmF0Y2hJZHMpP25ldyBVaW50MTZBcnJheSh0LnNwaGVyZUJhdGNoSWRzKTp2b2lkIDAsbD1oKG4pP28ubGVuZ3RoOjAscD1oKHIpP2kubGVuZ3RoOjAsZD1oKHMpP2YubGVuZ3RoOjAsbT1oKHUpP2MubGVuZ3RoOjAsXz1TZi5nZXRVbml0Qm94KCksZz1IZi5nZXRVbml0Q3lsaW5kZXIoKSxiPXNyLmdldFVuaXRFbGxpcHNvaWQoKSxUPV8uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsTz1nLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLEU9Yi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyx3PVQubGVuZ3RoKmw7dys9Ty5sZW5ndGgqcCx3Kz1FLmxlbmd0aCooZCttKTtsZXQgQz1fLmluZGljZXMsTT1nLmluZGljZXMsTj1iLmluZGljZXMsRj1DLmxlbmd0aCpsO0YrPU0ubGVuZ3RoKnAsRis9Ti5sZW5ndGgqKGQrbSk7bGV0IEk9bmV3IEZsb2F0MzJBcnJheSh3KSx2PW5ldyBVaW50MTZBcnJheSh3LzMpLEI9RnQuY3JlYXRlVHlwZWRBcnJheSh3LzMsRiksQT1sK3ArZCttLFM9bmV3IFVpbnQxNkFycmF5KEEpLHg9bmV3IEFycmF5KEEpLEQ9bmV3IFVpbnQzMkFycmF5KEEpLHo9bmV3IFVpbnQzMkFycmF5KEEpLGo9bmV3IEFycmF5KEEpO180KHQucGFja2VkQnVmZmVyKTtsZXQgaz17YmF0Y2hUYWJsZUNvbG9yczpuZXcgVWludDMyQXJyYXkodC5iYXRjaFRhYmxlQ29sb3JzKSxwb3NpdGlvbnM6SSx2ZXJ0ZXhCYXRjaElkczp2LGluZGljZXM6QixiYXRjaElkczpTLGJhdGNoZWRJbmRpY2VzOngsaW5kZXhPZmZzZXRzOkQsaW5kZXhDb3VudHM6eixib3VuZGluZ1ZvbHVtZXM6aixwb3NpdGlvbk9mZnNldDowLGJhdGNoSWRJbmRleDowLGluZGV4T2Zmc2V0OjAsYmF0Y2hlZEluZGljZXNPZmZzZXQ6MCxtb2RlbE1hdHJpeDpBUixjZW50ZXI6Z1J9O2tkKGssbixvLF8sbDQpLGtkKGsscixpLGcscDQpLGtkKGsscyxmLGIsZDQpLGtkKGssdSxjLGIsbTQpO2xldCBxPWc0KEIuQllURVNfUEVSX0VMRU1FTlQseCxqKTtyZXR1cm4gZS5wdXNoKEkuYnVmZmVyLHYuYnVmZmVyLEIuYnVmZmVyKSxlLnB1c2goUy5idWZmZXIsRC5idWZmZXIsei5idWZmZXIpLGUucHVzaChxLmJ1ZmZlcikse3Bvc2l0aW9uczpJLmJ1ZmZlcix2ZXJ0ZXhCYXRjaElkczp2LmJ1ZmZlcixpbmRpY2VzOkIuYnVmZmVyLGluZGV4T2Zmc2V0czpELmJ1ZmZlcixpbmRleENvdW50czp6LmJ1ZmZlcixiYXRjaElkczpTLmJ1ZmZlcixwYWNrZWRCdWZmZXI6cS5idWZmZXJ9fXZhciBHZCxjNCxhNCxmNCx1NCxDcixoNCxnUixBUixiNCxZeT0kKCgpPT57dmUoKTtjMCgpO0x0KCk7UGEoKTtsXygpO2F0KCk7QWQoKTskZSgpO1VuKCk7eVIoKTtzbygpO0dkPW5ldyBhLGM0PWl0LnBhY2tlZExlbmd0aCthLnBhY2tlZExlbmd0aCxhND1pdC5wYWNrZWRMZW5ndGgrMixmND1pdC5wYWNrZWRMZW5ndGgrYS5wYWNrZWRMZW5ndGgsdTQ9YS5wYWNrZWRMZW5ndGgrMSxDcj17bW9kZWxNYXRyaXg6bmV3IGl0LGJvdW5kaW5nVm9sdW1lOm5ldyBndH07aDQ9bmV3IGE7Z1I9bmV3IGEsQVI9bmV3IGl0O2I0PVFlKEE0KX0pO3ZhciBaeT17fTtwZShaeSx7ZGVmYXVsdDooKT0+UjR9KTtmdW5jdGlvbiBPNCh0KXt0PW5ldyBGbG9hdDY0QXJyYXkodCk7bGV0IGU9MDtWZC5taW49dFtlKytdLFZkLm1heD10W2UrK10sTXQudW5wYWNrKHQsZSxiUiksZSs9TXQucGFja2VkTGVuZ3RoLFkudW5wYWNrKHQsZSxUUil9ZnVuY3Rpb24gRTQodCxlKXtsZXQgbj1uZXcgVWludDE2QXJyYXkodC5wb3NpdGlvbnMpO080KHQucGFja2VkQnVmZmVyKTtsZXQgbz1iUixyPVRSLGk9VmQubWluLHM9VmQubWF4LGY9bi5sZW5ndGgvMyx1PW4uc3ViYXJyYXkoMCxmKSxjPW4uc3ViYXJyYXkoZiwyKmYpLGw9bi5zdWJhcnJheSgyKmYsMypmKTtubi56aWdaYWdEZWx0YURlY29kZSh1LGMsbCk7bGV0IHA9bmV3IEZsb2F0NjRBcnJheShuLmxlbmd0aCk7Zm9yKGxldCBkPTA7ZDxmOysrZCl7bGV0IG09dVtkXSxfPWNbZF0sZz1sW2RdLGI9UC5sZXJwKG8ud2VzdCxvLmVhc3QsbS8keSksVD1QLmxlcnAoby5zb3V0aCxvLm5vcnRoLF8vJHkpLE89UC5sZXJwKGkscyxnLyR5KSxFPXN0LmZyb21SYWRpYW5zKGIsVCxPLFQ0KSx3PXIuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oRSx3NCk7YS5wYWNrKHcscCxkKjMpfXJldHVybiBlLnB1c2gocC5idWZmZXIpLHtwb3NpdGlvbnM6cC5idWZmZXJ9fXZhciAkeSxUNCx3NCxiUixUUixWZCxSNCxReT0kKCgpPT57YXMoKTtMdCgpO0llKCk7JHQoKTtLdCgpO3duKCk7c28oKTskeT0zMjc2NyxUND1uZXcgc3QsdzQ9bmV3IGEsYlI9bmV3IE10LFRSPW5ldyBZLFZkPXttaW46dm9pZCAwLG1heDp2b2lkIDB9O1I0PVFlKEU0KX0pO3ZhciBKeT17fTtwZShKeSx7ZGVmYXVsdDooKT0+TDR9KTtmdW5jdGlvbiBTNCh0KXtsZXQgZT1uZXcgRmxvYXQ2NEFycmF5KHQpLG49MDtEYS5pbmRleEJ5dGVzUGVyRWxlbWVudD1lW24rK10sRGEubWluPWVbbisrXSxEYS5tYXg9ZVtuKytdLGEudW5wYWNrKGUsbixSUiksbis9YS5wYWNrZWRMZW5ndGgsWS51bnBhY2soZSxuLFNSKSxuKz1ZLnBhY2tlZExlbmd0aCxNdC51bnBhY2soZSxuLENSKX1mdW5jdGlvbiBDNCh0KXtsZXQgZT10Lmxlbmd0aCxuPTA7Zm9yKGxldCBvPTA7bzxlOysrbyluKz1uZS5wYWNrZWRMZW5ndGgrMyt0W29dLmJhdGNoSWRzLmxlbmd0aDtyZXR1cm4gbn1mdW5jdGlvbiB4NCh0LGUsbil7bGV0IG89ZS5sZW5ndGgscj0yK28qU28ucGFja2VkTGVuZ3RoKzErQzQobiksaT1uZXcgRmxvYXQ2NEFycmF5KHIpLHM9MDtpW3MrK109dCxpW3MrK109bztmb3IobGV0IHU9MDt1PG87Kyt1KVNvLnBhY2soZVt1XSxpLHMpLHMrPVNvLnBhY2tlZExlbmd0aDtsZXQgZj1uLmxlbmd0aDtpW3MrK109Zjtmb3IobGV0IHU9MDt1PGY7Kyt1KXtsZXQgYz1uW3VdO25lLnBhY2soYy5jb2xvcixpLHMpLHMrPW5lLnBhY2tlZExlbmd0aCxpW3MrK109Yy5vZmZzZXQsaVtzKytdPWMuY291bnQ7bGV0IGw9Yy5iYXRjaElkcyxwPWwubGVuZ3RoO2lbcysrXT1wO2ZvcihsZXQgZD0wO2Q8cDsrK2QpaVtzKytdPWxbZF19cmV0dXJuIGl9ZnVuY3Rpb24gRjQodCxlKXtTNCh0LnBhY2tlZEJ1ZmZlcik7bGV0IG47RGEuaW5kZXhCeXRlc1BlckVsZW1lbnQ9PT0yP249bmV3IFVpbnQxNkFycmF5KHQuaW5kaWNlcyk6bj1uZXcgVWludDMyQXJyYXkodC5pbmRpY2VzKTtsZXQgcj1uZXcgVWludDE2QXJyYXkodC5wb3NpdGlvbnMpLGk9bmV3IFVpbnQzMkFycmF5KHQuY291bnRzKSxzPW5ldyBVaW50MzJBcnJheSh0LmluZGV4Q291bnRzKSxmPW5ldyBVaW50MzJBcnJheSh0LmJhdGNoSWRzKSx1PW5ldyBVaW50MzJBcnJheSh0LmJhdGNoVGFibGVDb2xvcnMpLGM9bmV3IEFycmF5KGkubGVuZ3RoKSxsPVJSLHA9U1IsZD1DUixtPURhLm1pbixfPURhLm1heCxnPXQubWluaW11bUhlaWdodHMsYj10Lm1heGltdW1IZWlnaHRzO2goZykmJmgoYikmJihnPW5ldyBGbG9hdDMyQXJyYXkoZyksYj1uZXcgRmxvYXQzMkFycmF5KGIpKTtsZXQgVCxPLEUsdz1yLmxlbmd0aC8yLEM9ci5zdWJhcnJheSgwLHcpLE09ci5zdWJhcnJheSh3LDIqdyk7bm4uemlnWmFnRGVsdGFEZWNvZGUoQyxNKTtsZXQgTj1uZXcgRmxvYXQ2NEFycmF5KHcqMyk7Zm9yKFQ9MDtUPHc7KytUKXtsZXQgb3Q9Q1tUXSx4dD1NW1RdLHl0PVAubGVycChkLndlc3QsZC5lYXN0LG90L3dSKSxTdD1QLmxlcnAoZC5zb3V0aCxkLm5vcnRoLHh0L3dSKSxkdD1zdC5mcm9tUmFkaWFucyh5dCxTdCwwLEVSKSxmdD1wLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGR0LE9SKTthLnBhY2soZnQsTixUKjMpfWxldCBGPWkubGVuZ3RoLEk9bmV3IEFycmF5KEYpLHY9bmV3IEFycmF5KEYpLEI9MCxBPTA7Zm9yKFQ9MDtUPEY7KytUKUlbVF09Qix2W1RdPUEsQis9aVtUXSxBKz1zW1RdO2xldCBTPW5ldyBGbG9hdDMyQXJyYXkodyozKjIpLHg9bmV3IFVpbnQxNkFycmF5KHcqMiksRD1uZXcgVWludDMyQXJyYXkodi5sZW5ndGgpLHo9bmV3IFVpbnQzMkFycmF5KHMubGVuZ3RoKSxqPVtdLGs9e307Zm9yKFQ9MDtUPEY7KytUKUU9dVtUXSxoKGtbRV0pPyhrW0VdLnBvc2l0aW9uTGVuZ3RoKz1pW1RdLGtbRV0uaW5kZXhMZW5ndGgrPXNbVF0sa1tFXS5iYXRjaElkcy5wdXNoKFQpKTprW0VdPXtwb3NpdGlvbkxlbmd0aDppW1RdLGluZGV4TGVuZ3RoOnNbVF0sb2Zmc2V0OjAsaW5kZXhPZmZzZXQ6MCxiYXRjaElkczpbVF19O2xldCBxLFc9MCxSPTA7Zm9yKEUgaW4gaylpZihrLmhhc093blByb3BlcnR5KEUpKXtxPWtbRV0scS5vZmZzZXQ9VyxxLmluZGV4T2Zmc2V0PVI7bGV0IG90PXEucG9zaXRpb25MZW5ndGgqMix4dD1xLmluZGV4TGVuZ3RoKjIrcS5wb3NpdGlvbkxlbmd0aCo2O1crPW90LFIrPXh0LHEuaW5kZXhMZW5ndGg9eHR9bGV0IG50PVtdO2ZvcihFIGluIGspay5oYXNPd25Qcm9wZXJ0eShFKSYmKHE9a1tFXSxudC5wdXNoKHtjb2xvcjpuZS5mcm9tUmdiYShwYXJzZUludChFKSksb2Zmc2V0OnEuaW5kZXhPZmZzZXQsY291bnQ6cS5pbmRleExlbmd0aCxiYXRjaElkczpxLmJhdGNoSWRzfSkpO2ZvcihUPTA7VDxGOysrVCl7RT11W1RdLHE9a1tFXTtsZXQgb3Q9cS5vZmZzZXQseHQ9b3QqMyx5dD1vdCxTdD1JW1RdLGR0PWlbVF0sZnQ9ZltUXSxJdD1tLFZ0PV87aChnKSYmaChiKSYmKEl0PWdbVF0sVnQ9YltUXSk7bGV0IGRlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxzZT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksbGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGZlPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IoTz0wO088ZHQ7KytPKXtsZXQgZ2U9YS51bnBhY2soTixTdCozK08qMyxPUik7cC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGdlLGdlKTtsZXQgRWU9cC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhnZSxFUiksdW49RWUubGF0aXR1ZGUsR2U9RWUubG9uZ2l0dWRlO2RlPU1hdGgubWluKHVuLGRlKSxzZT1NYXRoLm1heCh1bixzZSksbGU9TWF0aC5taW4oR2UsbGUpLGZlPU1hdGgubWF4KEdlLGZlKTtsZXQgYmU9cC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZ2UsUDQpLGxuPWEubXVsdGlwbHlCeVNjYWxhcihiZSxJdCxNNCkscG49YS5hZGQoZ2UsbG4sTjQpO2xuPWEubXVsdGlwbHlCeVNjYWxhcihiZSxWdCxsbik7bGV0IEVuPWEuYWRkKGdlLGxuLEk0KTthLnN1YnRyYWN0KEVuLGwsRW4pLGEuc3VidHJhY3QocG4sbCxwbiksYS5wYWNrKEVuLFMseHQpLGEucGFjayhwbixTLHh0KzMpLHhbeXRdPWZ0LHhbeXQrMV09ZnQseHQrPTYseXQrPTJ9ZD12NCxkLndlc3Q9bGUsZC5lYXN0PWZlLGQuc291dGg9ZGUsZC5ub3J0aD1zZSxjW1RdPVNvLmZyb21SZWN0YW5nbGUoZCxtLF8scCk7bGV0IFp0PXEuaW5kZXhPZmZzZXQsUXQ9dltUXSxOZT1zW1RdO2ZvcihEW1RdPVp0LE89MDtPPE5lO08rPTMpe2xldCBnZT1uW1F0K09dLVN0LEVlPW5bUXQrTysxXS1TdCx1bj1uW1F0K08rMl0tU3Q7altadCsrXT1nZSoyK290LGpbWnQrK109RWUqMitvdCxqW1p0KytdPXVuKjIrb3QsaltadCsrXT11bioyKzErb3QsaltadCsrXT1FZSoyKzErb3QsaltadCsrXT1nZSoyKzErb3R9Zm9yKE89MDtPPGR0OysrTyl7bGV0IGdlPU8sRWU9KE8rMSklZHQ7altadCsrXT1nZSoyKzErb3QsaltadCsrXT1FZSoyK290LGpbWnQrK109Z2UqMitvdCxqW1p0KytdPWdlKjIrMStvdCxqW1p0KytdPUVlKjIrMStvdCxqW1p0KytdPUVlKjIrb3R9cS5vZmZzZXQrPWR0KjIscS5pbmRleE9mZnNldD1adCx6W1RdPVp0LURbVF19aj1GdC5jcmVhdGVUeXBlZEFycmF5KFMubGVuZ3RoLzMsaik7bGV0IGN0PW50Lmxlbmd0aDtmb3IobGV0IG90PTA7b3Q8Y3Q7KytvdCl7bGV0IHh0PW50W290XS5iYXRjaElkcyx5dD0wLFN0PXh0Lmxlbmd0aDtmb3IobGV0IGR0PTA7ZHQ8U3Q7KytkdCl5dCs9elt4dFtkdF1dO250W290XS5jb3VudD15dH1sZXQgbHQ9ai5CWVRFU19QRVJfRUxFTUVOVD09PTI/RnQuVU5TSUdORURfU0hPUlQ6RnQuVU5TSUdORURfSU5ULF90PXg0KGx0LGMsbnQpO3JldHVybiBlLnB1c2goUy5idWZmZXIsai5idWZmZXIsRC5idWZmZXIsei5idWZmZXIseC5idWZmZXIsX3QuYnVmZmVyKSx7cG9zaXRpb25zOlMuYnVmZmVyLGluZGljZXM6ai5idWZmZXIsaW5kZXhPZmZzZXRzOkQuYnVmZmVyLGluZGV4Q291bnRzOnouYnVmZmVyLGJhdGNoSWRzOnguYnVmZmVyLHBhY2tlZEJ1ZmZlcjpfdC5idWZmZXJ9fXZhciBSUixTUixDUixEYSx3UixPUixQNCxNNCxONCxJNCxFUix2NCxMNCx0Zz0kKCgpPT57YXMoKTtMdCgpO0llKCk7UGEoKTthdCgpOyR0KCk7JGUoKTtLdCgpO3BhKCk7d24oKTtzbygpO1JSPW5ldyBhLFNSPW5ldyBZLENSPW5ldyBNdCxEYT17bWluOnZvaWQgMCxtYXg6dm9pZCAwLGluZGV4Qnl0ZXNQZXJFbGVtZW50OnZvaWQgMH07d1I9MzI3NjcsT1I9bmV3IGEsUDQ9bmV3IGEsTTQ9bmV3IGEsTjQ9bmV3IGEsSTQ9bmV3IGEsRVI9bmV3IHN0LHY0PW5ldyBNdDtMND1RZShGNCl9KTtmdW5jdGlvbiBVNCh0LGUsbixvLHIpe2xldCBpPXQubGVuZ3RoLzMscz10LnN1YmFycmF5KDAsaSksZj10LnN1YmFycmF5KGksMippKSx1PXQuc3ViYXJyYXkoMippLDMqaSk7bm4uemlnWmFnRGVsdGFEZWNvZGUocyxmLHUpO2xldCBjPW5ldyBGbG9hdDY0QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbD0wO2w8aTsrK2wpe2xldCBwPXNbbF0sZD1mW2xdLG09dVtsXSxfPVAubGVycChlLndlc3QsZS5lYXN0LHAvZWcpLGc9UC5sZXJwKGUuc291dGgsZS5ub3J0aCxkL2VnKSxiPVAubGVycChuLG8sbS9lZyksVD1zdC5mcm9tUmFkaWFucyhfLGcsYixENCksTz1yLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFQsQjQpO2EucGFjayhPLGMsbCozKX1yZXR1cm4gY312YXIgZWcsRDQsQjQseFIsUFI9JCgoKT0+e2FzKCk7THQoKTtJZSgpO0t0KCk7ZWc9MzI3NjcsRDQ9bmV3IHN0LEI0PW5ldyBhO3hSPVU0fSk7dmFyIG5nPXt9O3BlKG5nLHtkZWZhdWx0OigpPT5qNH0pO2Z1bmN0aW9uIGs0KHQpe3Q9bmV3IEZsb2F0NjRBcnJheSh0KTtsZXQgZT0wO3pkLm1pbj10W2UrK10semQubWF4PXRbZSsrXSxNdC51bnBhY2sodCxlLEZSKSxlKz1NdC5wYWNrZWRMZW5ndGgsWS51bnBhY2sodCxlLExSKSxlKz1ZLnBhY2tlZExlbmd0aCxhLnVucGFjayh0LGUsRFIpfWZ1bmN0aW9uIEc0KHQpe2xldCBlPXQubGVuZ3RoLG49bmV3IFVpbnQzMkFycmF5KGUrMSksbz0wO2ZvcihsZXQgcj0wO3I8ZTsrK3IpbltyXT1vLG8rPXRbcl07cmV0dXJuIG5bZV09byxufWZ1bmN0aW9uIHo0KHQsZSl7bGV0IG49bmV3IFVpbnQxNkFycmF5KHQucG9zaXRpb25zKSxvPW5ldyBVaW50MTZBcnJheSh0LndpZHRocykscj1uZXcgVWludDMyQXJyYXkodC5jb3VudHMpLGk9bmV3IFVpbnQxNkFycmF5KHQuYmF0Y2hJZHMpO2s0KHQucGFja2VkQnVmZmVyKTtsZXQgcz1GUixmPUxSLHU9RFIsYz16ZC5taW4sbD16ZC5tYXgscD14UihuLHMsYyxsLGYpLGQ9cC5sZW5ndGgvMyxtPWQqNC00LF89bmV3IEZsb2F0MzJBcnJheShtKjMpLGc9bmV3IEZsb2F0MzJBcnJheShtKjMpLGI9bmV3IEZsb2F0MzJBcnJheShtKjMpLFQ9bmV3IEZsb2F0MzJBcnJheShtKjIpLE89bmV3IFVpbnQxNkFycmF5KG0pLEU9MCx3PTAsQz0wLE0sTj0wLEY9ci5sZW5ndGg7Zm9yKE09MDtNPEY7KytNKXtsZXQgUz1yW01dLHg9b1tNXSxEPWlbTV07Zm9yKGxldCB6PTA7ejxTOysreil7bGV0IGo7aWYoej09PTApe2xldCBudD1hLnVucGFjayhwLE4qMyxNUiksY3Q9YS51bnBhY2socCwoTisxKSozLE5SKTtqPWEuc3VidHJhY3QobnQsY3QsSVIpLGEuYWRkKG50LGosail9ZWxzZSBqPWEudW5wYWNrKHAsKE4rei0xKSozLElSKTtsZXQgaz1hLnVucGFjayhwLChOK3opKjMsVjQpLHE7aWYoej09PVMtMSl7bGV0IG50PWEudW5wYWNrKHAsKE4rUy0xKSozLE1SKSxjdD1hLnVucGFjayhwLChOK1MtMikqMyxOUik7cT1hLnN1YnRyYWN0KG50LGN0LHZSKSxhLmFkZChudCxxLHEpfWVsc2UgcT1hLnVucGFjayhwLChOK3orMSkqMyx2Uik7YS5zdWJ0cmFjdChqLHUsaiksYS5zdWJ0cmFjdChrLHUsayksYS5zdWJ0cmFjdChxLHUscSk7bGV0IFc9ej09PTA/MjowLFI9ej09PVMtMT8yOjQ7Zm9yKGxldCBudD1XO250PFI7KytudCl7YS5wYWNrKGssXyxFKSxhLnBhY2soaixnLEUpLGEucGFjayhxLGIsRSksRSs9MztsZXQgY3Q9bnQtMjwwPy0xOjE7VFt3KytdPTIqKG50JTIpLTEsVFt3KytdPWN0KngsT1tDKytdPUR9fU4rPVN9bGV0IEk9RnQuY3JlYXRlVHlwZWRBcnJheShtLGQqNi02KSx2PTAsQj0wO2ZvcihGPWQtMSxNPTA7TTxGOysrTSlJW0IrK109dixJW0IrK109disyLElbQisrXT12KzEsSVtCKytdPXYrMSxJW0IrK109disyLElbQisrXT12KzMsdis9NDtlLnB1c2goXy5idWZmZXIsZy5idWZmZXIsYi5idWZmZXIpLGUucHVzaChULmJ1ZmZlcixPLmJ1ZmZlcixJLmJ1ZmZlcik7bGV0IEE9e2luZGV4RGF0YXR5cGU6SS5CWVRFU19QRVJfRUxFTUVOVD09PTI/RnQuVU5TSUdORURfU0hPUlQ6RnQuVU5TSUdORURfSU5ULGN1cnJlbnRQb3NpdGlvbnM6Xy5idWZmZXIscHJldmlvdXNQb3NpdGlvbnM6Zy5idWZmZXIsbmV4dFBvc2l0aW9uczpiLmJ1ZmZlcixleHBhbmRBbmRXaWR0aDpULmJ1ZmZlcixiYXRjaElkczpPLmJ1ZmZlcixpbmRpY2VzOkkuYnVmZmVyfTtpZih0LmtlZXBEZWNvZGVkUG9zaXRpb25zKXtsZXQgUz1HNChyKTtlLnB1c2gocC5idWZmZXIsUy5idWZmZXIpLEE9X3IoQSx7ZGVjb2RlZFBvc2l0aW9uczpwLmJ1ZmZlcixkZWNvZGVkUG9zaXRpb25PZmZzZXRzOlMuYnVmZmVyfSl9cmV0dXJuIEF9dmFyIEZSLExSLERSLHpkLE1SLE5SLElSLFY0LHZSLGo0LG9nPSQoKCk9PntMdCgpO3JwKCk7UFIoKTskdCgpOyRlKCk7d24oKTtzbygpO0ZSPW5ldyBNdCxMUj1uZXcgWSxEUj1uZXcgYSx6ZD17bWluOnZvaWQgMCxtYXg6dm9pZCAwfTtNUj1uZXcgYSxOUj1uZXcgYSxJUj1uZXcgYSxWND1uZXcgYSx2Uj1uZXcgYTtqND1RZSh6NCl9KTtmdW5jdGlvbiBoaSh0LGUpe3kudHlwZU9mLm9iamVjdCgiZWxsaXBzb2lkIix0KSx0aGlzLl9lbGxpcHNvaWQ9dCx0aGlzLl9jYW1lcmFQb3NpdGlvbj1uZXcgYSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2U9bmV3IGEsdGhpcy5fZGlzdGFuY2VUb0xpbWJJblNjYWxlZFNwYWNlU3F1YXJlZD0wLGgoZSkmJih0aGlzLmNhbWVyYVBvc2l0aW9uPWUpfWZ1bmN0aW9uIGtSKHQsZSxuKXtpZihoKGUpJiZlPDAmJnQubWluaW11bVJhZGl1cz4tZSl7bGV0IG89YS5mcm9tRWxlbWVudHModC5yYWRpaS54K2UsdC5yYWRpaS55K2UsdC5yYWRpaS56K2UsSzQpO3Q9WS5mcm9tQ2FydGVzaWFuMyhvLG4pfXJldHVybiB0fWZ1bmN0aW9uIEdSKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgiZGlyZWN0aW9uVG9Qb2ludCIsZSkseS5kZWZpbmVkKCJwb3NpdGlvbnMiLG4pLGgobyl8fChvPW5ldyBhKTtsZXQgcj1IUih0LGUpLGk9MDtmb3IobGV0IHM9MCxmPW4ubGVuZ3RoO3M8ZjsrK3Mpe2xldCB1PW5bc10sYz16Uih0LHUscik7aWYoYzwwKXJldHVybjtpPU1hdGgubWF4KGksYyl9cmV0dXJuIGpSKHIsaSxvKX1mdW5jdGlvbiBWUih0LGUsbixvLHIsaSl7eS50eXBlT2Yub2JqZWN0KCJkaXJlY3Rpb25Ub1BvaW50IixlKSx5LmRlZmluZWQoInZlcnRpY2VzIixuKSx5LnR5cGVPZi5udW1iZXIoInN0cmlkZSIsbyksaChpKXx8KGk9bmV3IGEpLG89bz8/MyxyPXI/P2EuWkVSTztsZXQgcz1IUih0LGUpLGY9MDtmb3IobGV0IHU9MCxjPW4ubGVuZ3RoO3U8Yzt1Kz1vKXtqZC54PW5bdV0rci54LGpkLnk9blt1KzFdK3IueSxqZC56PW5bdSsyXStyLno7bGV0IGw9elIodCxqZCxzKTtpZihsPDApcmV0dXJuO2Y9TWF0aC5tYXgoZixsKX1yZXR1cm4galIocyxmLGkpfWZ1bmN0aW9uIGlnKHQsZSxuKXtsZXQgbz1lLHI9bixpPWEuc3VidHJhY3QodCxvLEJSKSxzPS1hLmRvdChpLG8pO3JldHVybiEocjwwP3M+MDpzPnImJnMqcy9hLm1hZ25pdHVkZVNxdWFyZWQoaSk+cil9ZnVuY3Rpb24gelIodCxlLG4pe2xldCBvPXQudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKGUsVzQpLHI9YS5tYWduaXR1ZGVTcXVhcmVkKG8pLGk9TWF0aC5zcXJ0KHIpLHM9YS5kaXZpZGVCeVNjYWxhcihvLGksWDQpO3I9TWF0aC5tYXgoMSxyKSxpPU1hdGgubWF4KDEsaSk7bGV0IGY9YS5kb3QocyxuKSx1PWEubWFnbml0dWRlKGEuY3Jvc3MocyxuLHMpKSxjPTEvaSxsPU1hdGguc3FydChyLTEpKmM7cmV0dXJuIDEvKGYqYy11KmwpfWZ1bmN0aW9uIGpSKHQsZSxuKXtpZighKGU8PTB8fGU9PT0xLzB8fGUhPT1lKSlyZXR1cm4gYS5tdWx0aXBseUJ5U2NhbGFyKHQsZSxuKX1mdW5jdGlvbiBIUih0LGUpe3JldHVybiBhLmVxdWFscyhlLGEuWkVSTyk/ZToodC50cmFuc2Zvcm1Qb3NpdGlvblRvU2NhbGVkU3BhY2UoZSxyZyksYS5ub3JtYWxpemUocmcscmcpKX12YXIgQlIsSDQsVVIscTQsSzQsamQsVzQsWDQscmcseHMsc3U9JCgoKT0+e3ZlKCk7THQoKTtXdCgpO2F0KCk7JHQoKTt3bigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGhpLnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfX0sY2FtZXJhUG9zaXRpb246e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW1lcmFQb3NpdGlvbn0sc2V0OmZ1bmN0aW9uKHQpe2xldCBuPXRoaXMuX2VsbGlwc29pZC50cmFuc2Zvcm1Qb3NpdGlvblRvU2NhbGVkU3BhY2UodCx0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2UpLG89YS5tYWduaXR1ZGVTcXVhcmVkKG4pLTE7YS5jbG9uZSh0LHRoaXMuX2NhbWVyYVBvc2l0aW9uKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2U9bix0aGlzLl9kaXN0YW5jZVRvTGltYkluU2NhbGVkU3BhY2VTcXVhcmVkPW99fX0pO0JSPW5ldyBhO2hpLnByb3RvdHlwZS5pc1BvaW50VmlzaWJsZT1mdW5jdGlvbih0KXtsZXQgbj10aGlzLl9lbGxpcHNvaWQudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKHQsQlIpO3JldHVybiBpZyhuLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5TY2FsZWRTcGFjZSx0aGlzLl9kaXN0YW5jZVRvTGltYkluU2NhbGVkU3BhY2VTcXVhcmVkKX07aGkucHJvdG90eXBlLmlzU2NhbGVkU3BhY2VQb2ludFZpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIGlnKHQsdGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlLHRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQpfTtIND1uZXcgYTtoaS5wcm90b3R5cGUuaXNTY2FsZWRTcGFjZVBvaW50VmlzaWJsZVBvc3NpYmx5VW5kZXJFbGxpcHNvaWQ9ZnVuY3Rpb24odCxlKXtsZXQgbj10aGlzLl9lbGxpcHNvaWQsbyxyO3JldHVybiBoKGUpJiZlPDAmJm4ubWluaW11bVJhZGl1cz4tZT8ocj1INCxyLng9dGhpcy5fY2FtZXJhUG9zaXRpb24ueC8obi5yYWRpaS54K2UpLHIueT10aGlzLl9jYW1lcmFQb3NpdGlvbi55LyhuLnJhZGlpLnkrZSksci56PXRoaXMuX2NhbWVyYVBvc2l0aW9uLnovKG4ucmFkaWkueitlKSxvPXIueCpyLngrci55KnIueStyLnoqci56LTEpOihyPXRoaXMuX2NhbWVyYVBvc2l0aW9uSW5TY2FsZWRTcGFjZSxvPXRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQpLGlnKHQscixvKX07aGkucHJvdG90eXBlLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gR1IodGhpcy5fZWxsaXBzb2lkLHQsZSxuKX07VVI9WS5jbG9uZShZLlVOSVRfU1BIRVJFKTtoaS5wcm90b3R5cGUuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRQb3NzaWJseVVuZGVyRWxsaXBzb2lkPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPWtSKHRoaXMuX2VsbGlwc29pZCxuLFVSKTtyZXR1cm4gR1Iocix0LGUsbyl9O2hpLnByb3RvdHlwZS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludEZyb21WZXJ0aWNlcz1mdW5jdGlvbih0LGUsbixvLHIpe3JldHVybiBWUih0aGlzLl9lbGxpcHNvaWQsdCxlLG4sbyxyKX07aGkucHJvdG90eXBlLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50RnJvbVZlcnRpY2VzUG9zc2libHlVbmRlckVsbGlwc29pZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7bGV0IHM9a1IodGhpcy5fZWxsaXBzb2lkLHIsVVIpO3JldHVybiBWUihzLHQsZSxuLG8saSl9O3E0PVtdO2hpLnByb3RvdHlwZS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludEZyb21SZWN0YW5nbGU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KTtsZXQgbz1NdC5zdWJzYW1wbGUodCxlLDAscTQpLHI9Z3QuZnJvbVBvaW50cyhvKTtpZighKGEubWFnbml0dWRlKHIuY2VudGVyKTwuMSplLm1pbmltdW1SYWRpdXMpKXJldHVybiB0aGlzLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50KHIuY2VudGVyLG8sbil9O0s0PW5ldyBhO2pkPW5ldyBhO1c0PW5ldyBhLFg0PW5ldyBhO3JnPW5ldyBhO3hzPWhpfSk7dmFyIEhkLFk0LHFSLEtSPSQoKCk9PntMdCgpO0llKCk7anQoKTthdCgpO0hkPXt9O0hkLmdldEhlaWdodD1mdW5jdGlvbih0LGUsbil7aWYoIU51bWJlci5pc0Zpbml0ZShlKSl0aHJvdyBuZXcgTCgic2NhbGUgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIuIik7aWYoIU51bWJlci5pc0Zpbml0ZShuKSl0aHJvdyBuZXcgTCgicmVsYXRpdmVIZWlnaHQgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIuIik7cmV0dXJuKHQtbikqZStufTtZND1uZXcgc3Q7SGQuZ2V0UG9zaXRpb249ZnVuY3Rpb24odCxlLG4sbyxyKXtsZXQgaT1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHQsWTQpO2lmKCFoKGkpKXJldHVybiBhLmNsb25lKHQscik7bGV0IHM9SGQuZ2V0SGVpZ2h0KGkuaGVpZ2h0LG4sbyk7cmV0dXJuIGEuZnJvbVJhZGlhbnMoaS5sb25naXR1ZGUsaS5sYXRpdHVkZSxzLGUscil9O3FSPUhkfSk7dmFyICQ0LHhyLFdSPSQoKCk9PnskND17Tk9ORTowLEJJVFMxMjoxfSx4cj1PYmplY3QuZnJlZXplKCQ0KX0pO2Z1bmN0aW9uIE1vKHQsZSxuLG8scixpLHMsZix1LGMpe2xldCBsPXhyLk5PTkUscCxkO2lmKGgoZSkmJmgobikmJmgobykmJmgocikpe2xldCBtPWUubWluaW11bSxfPWUubWF4aW11bSxnPWEuc3VidHJhY3QoXyxtLFo0KSxiPW8tbjtNYXRoLm1heChhLm1heGltdW1Db21wb25lbnQoZyksYik8SjQtMT9sPXhyLkJJVFMxMjpsPXhyLk5PTkUscD1pdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24ocixuZXcgaXQpO2xldCBPPWEubmVnYXRlKG0sd2MpO2l0Lm11bHRpcGx5KGl0LmZyb21UcmFuc2xhdGlvbihPLHFkKSxwLHApO2xldCBFPXdjO0UueD0xL2cueCxFLnk9MS9nLnksRS56PTEvZy56LGl0Lm11bHRpcGx5KGl0LmZyb21TY2FsZShFLHFkKSxwLHApLGQ9aXQuY2xvbmUociksaXQuc2V0VHJhbnNsYXRpb24oZCxhLlpFUk8sZCkscj1pdC5jbG9uZShyLG5ldyBpdCk7bGV0IHc9aXQuZnJvbVRyYW5zbGF0aW9uKG0scWQpLEM9aXQuZnJvbVNjYWxlKGcsUTQpLE09aXQubXVsdGlwbHkodyxDLHFkKTtpdC5tdWx0aXBseShyLE0sciksaXQubXVsdGlwbHkoZCxNLGQpfXRoaXMucXVhbnRpemF0aW9uPWwsdGhpcy5taW5pbXVtSGVpZ2h0PW4sdGhpcy5tYXhpbXVtSGVpZ2h0PW8sdGhpcy5jZW50ZXI9YS5jbG9uZSh0KSx0aGlzLnRvU2NhbGVkRU5VPXAsdGhpcy5mcm9tU2NhbGVkRU5VPXIsdGhpcy5tYXRyaXg9ZCx0aGlzLmhhc1ZlcnRleE5vcm1hbHM9aSx0aGlzLmhhc1dlYk1lcmNhdG9yVD1zPz8hMSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHM9Zj8/ITEsdGhpcy5leGFnZ2VyYXRpb249dT8/MSx0aGlzLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0PWM/PzAsdGhpcy5zdHJpZGU9MCx0aGlzLl9vZmZzZXRHZW9kZXRpY1N1cmZhY2VOb3JtYWw9MCx0aGlzLl9vZmZzZXRWZXJ0ZXhOb3JtYWw9MCx0aGlzLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzKCl9dmFyIHdjLFo0LFByLHFkLFE0LEo0LHRVLFhSLEtkLFdkLFBzLGN1PSQoKCk9PnthcygpO1VlKCk7THQoKTtEZSgpO2F0KCk7S3QoKTtVbigpO0tSKCk7V1IoKTt3Yz1uZXcgYSxaND1uZXcgYSxQcj1uZXcgSixxZD1uZXcgaXQsUTQ9bmV3IGl0LEo0PU1hdGgucG93KDIsMTIpO01vLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyxmKXtsZXQgdT1vLngsYz1vLnk7aWYodGhpcy5xdWFudGl6YXRpb249PT14ci5CSVRTMTIpe249aXQubXVsdGlwbHlCeVBvaW50KHRoaXMudG9TY2FsZWRFTlUsbix3Yyksbi54PVAuY2xhbXAobi54LDAsMSksbi55PVAuY2xhbXAobi55LDAsMSksbi56PVAuY2xhbXAobi56LDAsMSk7bGV0IGw9dGhpcy5tYXhpbXVtSGVpZ2h0LXRoaXMubWluaW11bUhlaWdodCxwPVAuY2xhbXAoKHItdGhpcy5taW5pbXVtSGVpZ2h0KS9sLDAsMSk7Si5mcm9tRWxlbWVudHMobi54LG4ueSxQcik7bGV0IGQ9bm4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoUHIpO0ouZnJvbUVsZW1lbnRzKG4ueixwLFByKTtsZXQgbT1ubi5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyhQcik7Si5mcm9tRWxlbWVudHModSxjLFByKTtsZXQgXz1ubi5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyhQcik7aWYodFtlKytdPWQsdFtlKytdPW0sdFtlKytdPV8sdGhpcy5oYXNXZWJNZXJjYXRvclQpe0ouZnJvbUVsZW1lbnRzKHMsMCxQcik7bGV0IGc9bm4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoUHIpO3RbZSsrXT1nfX1lbHNlIGEuc3VidHJhY3Qobix0aGlzLmNlbnRlcix3YyksdFtlKytdPXdjLngsdFtlKytdPXdjLnksdFtlKytdPXdjLnosdFtlKytdPXIsdFtlKytdPXUsdFtlKytdPWMsdGhpcy5oYXNXZWJNZXJjYXRvclQmJih0W2UrK109cyk7cmV0dXJuIHRoaXMuaGFzVmVydGV4Tm9ybWFscyYmKHRbZSsrXT1ubi5vY3RQYWNrRmxvYXQoaSkpLHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyYmKHRbZSsrXT1mLngsdFtlKytdPWYueSx0W2UrK109Zi56KSxlfTt0VT1uZXcgYSxYUj1uZXcgYTtNby5wcm90b3R5cGUuYWRkR2VvZGV0aWNTdXJmYWNlTm9ybWFscz1mdW5jdGlvbih0LGUsbil7aWYodGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzKXJldHVybjtsZXQgbz10aGlzLnN0cmlkZSxyPXQubGVuZ3RoL287dGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPSEwLHRoaXMuX2NhbGN1bGF0ZVN0cmlkZUFuZE9mZnNldHMoKTtsZXQgaT10aGlzLnN0cmlkZTtmb3IobGV0IHM9MDtzPHI7cysrKXtmb3IobGV0IGw9MDtsPG87bCsrKXtsZXQgcD1zKm8rbCxkPXMqaStsO2VbZF09dFtwXX1sZXQgZj10aGlzLmRlY29kZVBvc2l0aW9uKGUscyx0VSksdT1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChmLFhSKSxjPXMqaSt0aGlzLl9vZmZzZXRHZW9kZXRpY1N1cmZhY2VOb3JtYWw7ZVtjXT11LngsZVtjKzFdPXUueSxlW2MrMl09dS56fX07TW8ucHJvdG90eXBlLnJlbW92ZUdlb2RldGljU3VyZmFjZU5vcm1hbHM9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzKXJldHVybjtsZXQgbj10aGlzLnN0cmlkZSxvPXQubGVuZ3RoL247dGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPSExLHRoaXMuX2NhbGN1bGF0ZVN0cmlkZUFuZE9mZnNldHMoKTtsZXQgcj10aGlzLnN0cmlkZTtmb3IobGV0IGk9MDtpPG87aSsrKWZvcihsZXQgcz0wO3M8cjtzKyspe2xldCBmPWkqbitzLHU9aSpyK3M7ZVt1XT10W2ZdfX07TW8ucHJvdG90eXBlLmRlY29kZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxuKXtpZihoKG4pfHwobj1uZXcgYSksZSo9dGhpcy5zdHJpZGUsdGhpcy5xdWFudGl6YXRpb249PT14ci5CSVRTMTIpe2xldCBvPW5uLmRlY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXModFtlXSxQcik7bi54PW8ueCxuLnk9by55O2xldCByPW5uLmRlY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXModFtlKzFdLFByKTtyZXR1cm4gbi56PXIueCxpdC5tdWx0aXBseUJ5UG9pbnQodGhpcy5mcm9tU2NhbGVkRU5VLG4sbil9cmV0dXJuIG4ueD10W2VdLG4ueT10W2UrMV0sbi56PXRbZSsyXSxhLmFkZChuLHRoaXMuY2VudGVyLG4pfTtNby5wcm90b3R5cGUuZ2V0RXhhZ2dlcmF0ZWRQb3NpdGlvbj1mdW5jdGlvbih0LGUsbil7bj10aGlzLmRlY29kZVBvc2l0aW9uKHQsZSxuKTtsZXQgbz10aGlzLmV4YWdnZXJhdGlvbixyPXRoaXMuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ7aWYobyE9PTEmJnRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyl7bGV0IHM9dGhpcy5kZWNvZGVHZW9kZXRpY1N1cmZhY2VOb3JtYWwodCxlLFhSKSxmPXRoaXMuZGVjb2RlSGVpZ2h0KHQsZSksdT1xUi5nZXRIZWlnaHQoZixvLHIpLWY7bi54Kz1zLngqdSxuLnkrPXMueSp1LG4ueis9cy56KnV9cmV0dXJuIG59O01vLnByb3RvdHlwZS5kZWNvZGVUZXh0dXJlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBoKG4pfHwobj1uZXcgSiksZSo9dGhpcy5zdHJpZGUsdGhpcy5xdWFudGl6YXRpb249PT14ci5CSVRTMTI/bm4uZGVjb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh0W2UrMl0sbik6Si5mcm9tRWxlbWVudHModFtlKzRdLHRbZSs1XSxuKX07TW8ucHJvdG90eXBlLmRlY29kZUhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBlKj10aGlzLnN0cmlkZSx0aGlzLnF1YW50aXphdGlvbj09PXhyLkJJVFMxMj9ubi5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKHRbZSsxXSxQcikueSoodGhpcy5tYXhpbXVtSGVpZ2h0LXRoaXMubWluaW11bUhlaWdodCkrdGhpcy5taW5pbXVtSGVpZ2h0OnRbZSszXX07TW8ucHJvdG90eXBlLmRlY29kZVdlYk1lcmNhdG9yVD1mdW5jdGlvbih0LGUpe3JldHVybiBlKj10aGlzLnN0cmlkZSx0aGlzLnF1YW50aXphdGlvbj09PXhyLkJJVFMxMj9ubi5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKHRbZSszXSxQcikueDp0W2UrNl19O01vLnByb3RvdHlwZS5nZXRPY3RFbmNvZGVkTm9ybWFsPWZ1bmN0aW9uKHQsZSxuKXtlPWUqdGhpcy5zdHJpZGUrdGhpcy5fb2Zmc2V0VmVydGV4Tm9ybWFsO2xldCBvPXRbZV0vMjU2LHI9TWF0aC5mbG9vcihvKSxpPShvLXIpKjI1NjtyZXR1cm4gSi5mcm9tRWxlbWVudHMocixpLG4pfTtNby5wcm90b3R5cGUuZGVjb2RlR2VvZGV0aWNTdXJmYWNlTm9ybWFsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT1lKnRoaXMuc3RyaWRlK3RoaXMuX29mZnNldEdlb2RldGljU3VyZmFjZU5vcm1hbCxuLng9dFtlXSxuLnk9dFtlKzFdLG4uej10W2UrMl0sbn07TW8ucHJvdG90eXBlLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzPWZ1bmN0aW9uKCl7bGV0IHQ9MDtzd2l0Y2godGhpcy5xdWFudGl6YXRpb24pe2Nhc2UgeHIuQklUUzEyOnQrPTM7YnJlYWs7ZGVmYXVsdDp0Kz02fXRoaXMuaGFzV2ViTWVyY2F0b3JUJiYodCs9MSksdGhpcy5oYXNWZXJ0ZXhOb3JtYWxzJiYodGhpcy5fb2Zmc2V0VmVydGV4Tm9ybWFsPXQsdCs9MSksdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzJiYodGhpcy5fb2Zmc2V0R2VvZGV0aWNTdXJmYWNlTm9ybWFsPXQsdCs9MyksdGhpcy5zdHJpZGU9dH07S2Q9e3Bvc2l0aW9uM0RBbmRIZWlnaHQ6MCx0ZXh0dXJlQ29vcmRBbmRFbmNvZGVkTm9ybWFsczoxLGdlb2RldGljU3VyZmFjZU5vcm1hbDoyfSxXZD17Y29tcHJlc3NlZDA6MCxjb21wcmVzc2VkMToxLGdlb2RldGljU3VyZmFjZU5vcm1hbDoyfTtNby5wcm90b3R5cGUuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbih0KXtsZXQgZT1ldC5GTE9BVCxuPWV0LmdldFNpemVJbkJ5dGVzKGUpLG89dGhpcy5zdHJpZGUqbixyPTAsaT1bXTtmdW5jdGlvbiBzKGYsdSl7aS5wdXNoKHtpbmRleDpmLHZlcnRleEJ1ZmZlcjp0LGNvbXBvbmVudERhdGF0eXBlOmUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTp1LG9mZnNldEluQnl0ZXM6cixzdHJpZGVJbkJ5dGVzOm99KSxyKz11Km59aWYodGhpcy5xdWFudGl6YXRpb249PT14ci5OT05FKXtzKEtkLnBvc2l0aW9uM0RBbmRIZWlnaHQsNCk7bGV0IGY9MjtmKz10aGlzLmhhc1dlYk1lcmNhdG9yVD8xOjAsZis9dGhpcy5oYXNWZXJ0ZXhOb3JtYWxzPzE6MCxzKEtkLnRleHR1cmVDb29yZEFuZEVuY29kZWROb3JtYWxzLGYpLHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyYmcyhLZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwsMyl9ZWxzZXtsZXQgZj10aGlzLmhhc1dlYk1lcmNhdG9yVHx8dGhpcy5oYXNWZXJ0ZXhOb3JtYWxzLHU9dGhpcy5oYXNXZWJNZXJjYXRvclQmJnRoaXMuaGFzVmVydGV4Tm9ybWFscztzKFdkLmNvbXByZXNzZWQwLGY/NDozKSx1JiZzKFdkLmNvbXByZXNzZWQxLDEpLHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyYmcyhXZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwsMyl9cmV0dXJuIGl9O01vLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVMb2NhdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWFudGl6YXRpb249PT14ci5OT05FP0tkOldkfTtNby5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSl8fChlPW5ldyBNbyksZS5xdWFudGl6YXRpb249dC5xdWFudGl6YXRpb24sZS5taW5pbXVtSGVpZ2h0PXQubWluaW11bUhlaWdodCxlLm1heGltdW1IZWlnaHQ9dC5tYXhpbXVtSGVpZ2h0LGUuY2VudGVyPWEuY2xvbmUodC5jZW50ZXIpLGUudG9TY2FsZWRFTlU9aXQuY2xvbmUodC50b1NjYWxlZEVOVSksZS5mcm9tU2NhbGVkRU5VPWl0LmNsb25lKHQuZnJvbVNjYWxlZEVOVSksZS5tYXRyaXg9aXQuY2xvbmUodC5tYXRyaXgpLGUuaGFzVmVydGV4Tm9ybWFscz10Lmhhc1ZlcnRleE5vcm1hbHMsZS5oYXNXZWJNZXJjYXRvclQ9dC5oYXNXZWJNZXJjYXRvclQsZS5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPXQuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyxlLmV4YWdnZXJhdGlvbj10LmV4YWdnZXJhdGlvbixlLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0PXQuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQsZS5fY2FsY3VsYXRlU3RyaWRlQW5kT2Zmc2V0cygpLGV9O1BzPU1vfSk7dmFyIGNnPXt9O3BlKGNnLHtkZWZhdWx0OigpPT5hVX0pO2Z1bmN0aW9uIGF1KHQsZSxuKXtuPW4/P1A7bGV0IG89dC5sZW5ndGg7Zm9yKGxldCByPTA7cjxvOysrcilpZihuLmVxdWFsc0Vwc2lsb24odFtyXSxlLFAuRVBTSUxPTjEyKSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBvVSh0LGUpe3QuZWxsaXBzb2lkPVkuY2xvbmUodC5lbGxpcHNvaWQpLHQucmVjdGFuZ2xlPU10LmNsb25lKHQucmVjdGFuZ2xlKTtsZXQgbj1jVSh0LmJ1ZmZlcix0LnJlbGF0aXZlVG9DZW50ZXIsdC5lbGxpcHNvaWQsdC5yZWN0YW5nbGUsdC5uYXRpdmVSZWN0YW5nbGUsdC5leGFnZ2VyYXRpb24sdC5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodCx0LnNraXJ0SGVpZ2h0LHQuaW5jbHVkZVdlYk1lcmNhdG9yVCx0Lm5lZ2F0aXZlQWx0aXR1ZGVFeHBvbmVudEJpYXMsdC5uZWdhdGl2ZUVsZXZhdGlvblRocmVzaG9sZCksbz1uLnZlcnRpY2VzO2UucHVzaChvLmJ1ZmZlcik7bGV0IHI9bi5pbmRpY2VzO3JldHVybiBlLnB1c2goci5idWZmZXIpLHt2ZXJ0aWNlczpvLmJ1ZmZlcixpbmRpY2VzOnIuYnVmZmVyLG51bWJlck9mQXR0cmlidXRlczpuLmVuY29kaW5nLnN0cmlkZSxtaW5pbXVtSGVpZ2h0Om4ubWluaW11bUhlaWdodCxtYXhpbXVtSGVpZ2h0Om4ubWF4aW11bUhlaWdodCxib3VuZGluZ1NwaGVyZTNEOm4uYm91bmRpbmdTcGhlcmUzRCxvcmllbnRlZEJvdW5kaW5nQm94Om4ub3JpZW50ZWRCb3VuZGluZ0JveCxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTpuLm9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlLGVuY29kaW5nOm4uZW5jb2RpbmcsdmVydGV4Q291bnRXaXRob3V0U2tpcnRzOm4udmVydGV4Q291bnRXaXRob3V0U2tpcnRzLGluZGV4Q291bnRXaXRob3V0U2tpcnRzOm4uaW5kZXhDb3VudFdpdGhvdXRTa2lydHMsd2VzdEluZGljZXNTb3V0aFRvTm9ydGg6bi53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aCxzb3V0aEluZGljZXNFYXN0VG9XZXN0Om4uc291dGhJbmRpY2VzRWFzdFRvV2VzdCxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDpuLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6bi5ub3J0aEluZGljZXNXZXN0VG9FYXN0fX1mdW5jdGlvbiBjVSh0LGUsbixvLHIsaSxzLGYsdSxjLGwpe2xldCBwLGQsbSxfLGcsYjtoKG8pPyhwPW8ud2VzdCxkPW8uc291dGgsbT1vLmVhc3QsXz1vLm5vcnRoLGc9by53aWR0aCxiPW8uaGVpZ2h0KToocD1QLnRvUmFkaWFucyhyLndlc3QpLGQ9UC50b1JhZGlhbnMoci5zb3V0aCksbT1QLnRvUmFkaWFucyhyLmVhc3QpLF89UC50b1JhZGlhbnMoci5ub3J0aCksZz1QLnRvUmFkaWFucyhvLndpZHRoKSxiPVAudG9SYWRpYW5zKG8uaGVpZ2h0KSk7bGV0IFQ9W2QsX10sTz1bcCxtXSxFPVhvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKGUsbiksdz1pdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24oRSxzVSksQyxNO3UmJihDPW5vLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoZCksTT0xLyhuby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKF8pLUMpKTtsZXQgRj1pIT09MSxJPW5ldyBEYXRhVmlldyh0KSx2PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxCPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxBPXJVO0EueD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksQS55PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxBLno9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBTPWlVO1MueD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksUy55PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxTLno9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2xldCB4PTAsRD0wLHo9MCxqLGs7Zm9yKGs9MDtrPDQ7KytrKXtsZXQgb2U9eDtqPUkuZ2V0VWludDMyKG9lLCEwKSxvZSs9c2c7bGV0IFl0PVAudG9SYWRpYW5zKEkuZ2V0RmxvYXQ2NChvZSwhMCkqMTgwKTtvZSs9T2MsYXUoTyxZdCk9PT0tMSYmTy5wdXNoKFl0KTtsZXQgVmU9UC50b1JhZGlhbnMoSS5nZXRGbG9hdDY0KG9lLCEwKSoxODApO29lKz1PYyxhdShULFZlKT09PS0xJiZULnB1c2goVmUpLG9lKz0yKk9jO2xldCBkbj1JLmdldEludDMyKG9lLCEwKTtvZSs9WGQsRCs9ZG4sZG49SS5nZXRJbnQzMihvZSwhMCkseis9ZG4qMyx4Kz1qK3NnfWxldCBxPVtdLFc9W10sUj1uZXcgQXJyYXkoRCksbnQ9bmV3IEFycmF5KEQpLGN0PW5ldyBBcnJheShEKSxsdD11P25ldyBBcnJheShEKTpbXSxfdD1GP25ldyBBcnJheShEKTpbXSxvdD1uZXcgQXJyYXkoeikseHQ9W10seXQ9W10sU3Q9W10sZHQ9W10sZnQ9MCxJdD0wO2Zvcih4PTAsaz0wO2s8NDsrK2spe2o9SS5nZXRVaW50MzIoeCwhMCkseCs9c2c7bGV0IG9lPXgsWXQ9UC50b1JhZGlhbnMoSS5nZXRGbG9hdDY0KHgsITApKjE4MCk7eCs9T2M7bGV0IFZlPVAudG9SYWRpYW5zKEkuZ2V0RmxvYXQ2NCh4LCEwKSoxODApO3grPU9jO2xldCBkbj1QLnRvUmFkaWFucyhJLmdldEZsb2F0NjQoeCwhMCkqMTgwKSxzbj1kbiouNTt4Kz1PYztsZXQgbW49UC50b1JhZGlhbnMoSS5nZXRGbG9hdDY0KHgsITApKjE4MCksZm89bW4qLjU7eCs9T2M7bGV0IEhuPUkuZ2V0SW50MzIoeCwhMCk7eCs9WGQ7bGV0IFplPUkuZ2V0SW50MzIoeCwhMCk7eCs9WGQseCs9WGQ7bGV0IGNuPW5ldyBBcnJheShIbik7Zm9yKGxldCBobj0wO2huPEhuOysraG4pe2xldCB1bz1ZdCtJLmdldFVpbnQ4KHgrKykqZG47Tm8ubG9uZ2l0dWRlPXVvO2xldCBxbj1WZStJLmdldFVpbnQ4KHgrKykqbW47Tm8ubGF0aXR1ZGU9cW47bGV0IEtuPUkuZ2V0RmxvYXQzMih4LCEwKTtpZih4Kz1uVSxLbiE9PTAmJktuPGwmJihLbio9LU1hdGgucG93KDIsYykpLEtuKj02MzcxMDEwLE5vLmhlaWdodD1LbixhdShPLHVvKSE9PS0xfHxhdShULHFuKSE9PS0xKXtsZXQgTG49YXUocSxObyxzdCk7aWYoTG49PT0tMSlxLnB1c2goc3QuY2xvbmUoTm8pKSxXLnB1c2goZnQpO2Vsc2V7Y25baG5dPVdbTG5dO2NvbnRpbnVlfX1jbltobl09ZnQsTWF0aC5hYnModW8tcCk8c24/eHQucHVzaCh7aW5kZXg6ZnQsY2FydG9ncmFwaGljOnN0LmNsb25lKE5vKX0pOk1hdGguYWJzKHVvLW0pPHNuP1N0LnB1c2goe2luZGV4OmZ0LGNhcnRvZ3JhcGhpYzpzdC5jbG9uZShObyl9KTpNYXRoLmFicyhxbi1kKTxmbz95dC5wdXNoKHtpbmRleDpmdCxjYXJ0b2dyYXBoaWM6c3QuY2xvbmUoTm8pfSk6TWF0aC5hYnMocW4tXyk8Zm8mJmR0LnB1c2goe2luZGV4OmZ0LGNhcnRvZ3JhcGhpYzpzdC5jbG9uZShObyl9KSx2PU1hdGgubWluKEtuLHYpLEI9TWF0aC5tYXgoS24sQiksY3RbZnRdPUtuO2xldCBsbz1uLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKE5vKTtpZihSW2Z0XT1sbyx1JiYobHRbZnRdPShuby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKHFuKS1DKSpNKSxGKXtsZXQgTG49bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwobG8pO190W2Z0XT1Mbn1pdC5tdWx0aXBseUJ5UG9pbnQodyxsbyxCYSksYS5taW5pbXVtQnlDb21wb25lbnQoQmEsQSxBKSxhLm1heGltdW1CeUNvbXBvbmVudChCYSxTLFMpO2xldCB6ZT0odW8tcCkvKG0tcCk7emU9UC5jbGFtcCh6ZSwwLDEpO2xldCBGZT0ocW4tZCkvKF8tZCk7RmU9UC5jbGFtcChGZSwwLDEpLG50W2Z0XT1uZXcgSih6ZSxGZSksKytmdH1sZXQgS2U9WmUqMztmb3IobGV0IGhuPTA7aG48S2U7KytobiwrK0l0KW90W0l0XT1jbltJLmdldFVpbnQxNih4LCEwKV0seCs9ZVU7aWYoaiE9PXgtb2UpdGhyb3cgbmV3IEFlKCJJbnZhbGlkIHRlcnJhaW4gdGlsZS4iKX1SLmxlbmd0aD1mdCxudC5sZW5ndGg9ZnQsY3QubGVuZ3RoPWZ0LHUmJihsdC5sZW5ndGg9ZnQpLEYmJihfdC5sZW5ndGg9ZnQpO2xldCBWdD1mdCxkZT1JdCxzZT17aE1pbjp2LGxhc3RCb3JkZXJQb2ludDp2b2lkIDAsc2tpcnRIZWlnaHQ6Zix0b0VOVTp3LGVsbGlwc29pZDpuLG1pbmltdW06QSxtYXhpbXVtOlN9O3h0LnNvcnQoZnVuY3Rpb24ob2UsWXQpe3JldHVybiBZdC5jYXJ0b2dyYXBoaWMubGF0aXR1ZGUtb2UuY2FydG9ncmFwaGljLmxhdGl0dWRlfSkseXQuc29ydChmdW5jdGlvbihvZSxZdCl7cmV0dXJuIG9lLmNhcnRvZ3JhcGhpYy5sb25naXR1ZGUtWXQuY2FydG9ncmFwaGljLmxvbmdpdHVkZX0pLFN0LnNvcnQoZnVuY3Rpb24ob2UsWXQpe3JldHVybiBvZS5jYXJ0b2dyYXBoaWMubGF0aXR1ZGUtWXQuY2FydG9ncmFwaGljLmxhdGl0dWRlfSksZHQuc29ydChmdW5jdGlvbihvZSxZdCl7cmV0dXJuIFl0LmNhcnRvZ3JhcGhpYy5sb25naXR1ZGUtb2UuY2FydG9ncmFwaGljLmxvbmdpdHVkZX0pO2xldCBsZT0xZS01O2lmKFlkKFIsY3QsbnQsbHQsX3Qsb3Qsc2UseHQsLWxlKmcsITAsLWxlKmIpLFlkKFIsY3QsbnQsbHQsX3Qsb3Qsc2UseXQsLWxlKmIsITEpLFlkKFIsY3QsbnQsbHQsX3Qsb3Qsc2UsU3QsbGUqZywhMCxsZSpiKSxZZChSLGN0LG50LGx0LF90LG90LHNlLGR0LGxlKmIsITEpLHh0Lmxlbmd0aD4wJiZkdC5sZW5ndGg+MCl7bGV0IG9lPXh0WzBdLmluZGV4LFl0PVZ0LFZlPWR0W2R0Lmxlbmd0aC0xXS5pbmRleCxkbj1SLmxlbmd0aC0xO290LnB1c2goVmUsZG4sWXQsWXQsb2UsVmUpfUQ9Ui5sZW5ndGg7bGV0IGZlPWd0LmZyb21Qb2ludHMoUiksWnQ7aChvKSYmKFp0PVNvLmZyb21SZWN0YW5nbGUobyx2LEIsbikpO2xldCBOZT1uZXcgeHMobikuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRQb3NzaWJseVVuZGVyRWxsaXBzb2lkKGUsUix2KSxnZT1uZXcgTGkoQSxTLGUpLEVlPW5ldyBQcyhlLGdlLHNlLmhNaW4sQixFLCExLHUsRixpLHMpLHVuPW5ldyBGbG9hdDMyQXJyYXkoRCpFZS5zdHJpZGUpLEdlPTA7Zm9yKGxldCBvZT0wO29lPEQ7KytvZSlHZT1FZS5lbmNvZGUodW4sR2UsUltvZV0sbnRbb2VdLGN0W29lXSx2b2lkIDAsbHRbb2VdLF90W29lXSk7bGV0IGJlPXh0Lm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmluZGV4fSkucmV2ZXJzZSgpLGxuPXl0Lm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmluZGV4fSkucmV2ZXJzZSgpLHBuPVN0Lm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmluZGV4fSkucmV2ZXJzZSgpLEVuPWR0Lm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmluZGV4fSkucmV2ZXJzZSgpO3JldHVybiBsbi51bnNoaWZ0KHBuW3BuLmxlbmd0aC0xXSksbG4ucHVzaChiZVswXSksRW4udW5zaGlmdChiZVtiZS5sZW5ndGgtMV0pLEVuLnB1c2gocG5bMF0pLHt2ZXJ0aWNlczp1bixpbmRpY2VzOm5ldyBVaW50MTZBcnJheShvdCksbWF4aW11bUhlaWdodDpCLG1pbmltdW1IZWlnaHQ6dixlbmNvZGluZzpFZSxib3VuZGluZ1NwaGVyZTNEOmZlLG9yaWVudGVkQm91bmRpbmdCb3g6WnQsb2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2U6TmUsdmVydGV4Q291bnRXaXRob3V0U2tpcnRzOlZ0LGluZGV4Q291bnRXaXRob3V0U2tpcnRzOmRlLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOmJlLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6bG4sZWFzdEluZGljZXNOb3J0aFRvU291dGg6cG4sbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpFbn19ZnVuY3Rpb24gWWQodCxlLG4sbyxyLGkscyxmLHUsYyxsKXtsZXQgcD1mLmxlbmd0aDtmb3IobGV0IGQ9MDtkPHA7KytkKXtsZXQgbT1mW2RdLF89bS5jYXJ0b2dyYXBoaWMsZz1tLmluZGV4LGI9dC5sZW5ndGgsVD1fLmxvbmdpdHVkZSxPPV8ubGF0aXR1ZGU7Tz1QLmNsYW1wKE8sLVAuUElfT1ZFUl9UV08sUC5QSV9PVkVSX1RXTyk7bGV0IEU9Xy5oZWlnaHQtcy5za2lydEhlaWdodDtzLmhNaW49TWF0aC5taW4ocy5oTWluLEUpLHN0LmZyb21SYWRpYW5zKFQsTyxFLE5vKSxjJiYoTm8ubG9uZ2l0dWRlKz11KSxjP2Q9PT1wLTE/Tm8ubGF0aXR1ZGUrPWw6ZD09PTAmJihOby5sYXRpdHVkZS09bCk6Tm8ubGF0aXR1ZGUrPXU7bGV0IHc9cy5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTm8pO3QucHVzaCh3KSxlLnB1c2goRSksbi5wdXNoKEouY2xvbmUobltnXSkpLG8ubGVuZ3RoPjAmJm8ucHVzaChvW2ddKSxyLmxlbmd0aD4wJiZyLnB1c2gocltnXSksaXQubXVsdGlwbHlCeVBvaW50KHMudG9FTlUsdyxCYSk7bGV0IEM9cy5taW5pbXVtLE09cy5tYXhpbXVtO2EubWluaW11bUJ5Q29tcG9uZW50KEJhLEMsQyksYS5tYXhpbXVtQnlDb21wb25lbnQoQmEsTSxNKTtsZXQgTj1zLmxhc3RCb3JkZXJQb2ludDtpZihoKE4pKXtsZXQgRj1OLmluZGV4O2kucHVzaChGLGItMSxiLGIsZyxGKX1zLmxhc3RCb3JkZXJQb2ludD1tfX12YXIgZVUsWGQsc2csblUsT2MsTm8sQmEsclUsaVUsc1UsYVUsYWc9JCgoKT0+e3hmKCk7dmUoKTtVZSgpO0x0KCk7SWUoKTthdCgpOyR0KCk7c3UoKTtLdCgpO1VuKCk7cGEoKTt3bigpO0pyKCk7Y3UoKTtjcygpO2ljKCk7c28oKTtlVT1VaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxYZD1JbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULHNnPVVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULG5VPUZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxPYz1GbG9hdDY0QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Tm89bmV3IHN0LEJhPW5ldyBhLHJVPW5ldyBhLGlVPW5ldyBhLHNVPW5ldyBpdDthVT1RZShvVSl9KTt2YXIgZlUsWVIsJFI9JCgoKT0+e2ZVPXtOT05FOjAsTEVSQzoxfSxZUj1PYmplY3QuZnJlZXplKGZVKX0pO3ZhciBfaSxmZyx1VSxsVSxwVSxaUixRUj0kKCgpPT57eGYoKTt2ZSgpO1VlKCk7THQoKTthdCgpO2p0KCk7JHQoKTtzdSgpO0t0KCk7VW4oKTtwYSgpO3duKCk7Y3UoKTtjcygpO2ljKCk7X2k9e307X2kuREVGQVVMVF9TVFJVQ1RVUkU9T2JqZWN0LmZyZWV6ZSh7aGVpZ2h0U2NhbGU6MSxoZWlnaHRPZmZzZXQ6MCxlbGVtZW50c1BlckhlaWdodDoxLHN0cmlkZToxLGVsZW1lbnRNdWx0aXBsaWVyOjI1Nixpc0JpZ0VuZGlhbjohMX0pO2ZnPW5ldyBhLHVVPW5ldyBpdCxsVT1uZXcgYSxwVT1uZXcgYTtfaS5jb21wdXRlVmVydGljZXM9ZnVuY3Rpb24odCl7aWYoIWgodCl8fCFoKHQuaGVpZ2h0bWFwKSl0aHJvdyBuZXcgTCgib3B0aW9ucy5oZWlnaHRtYXAgaXMgcmVxdWlyZWQuIik7aWYoIWgodC53aWR0aCl8fCFoKHQuaGVpZ2h0KSl0aHJvdyBuZXcgTCgib3B0aW9ucy53aWR0aCBhbmQgb3B0aW9ucy5oZWlnaHQgYXJlIHJlcXVpcmVkLiIpO2lmKCFoKHQubmF0aXZlUmVjdGFuZ2xlKSl0aHJvdyBuZXcgTCgib3B0aW9ucy5uYXRpdmVSZWN0YW5nbGUgaXMgcmVxdWlyZWQuIik7aWYoIWgodC5za2lydEhlaWdodCkpdGhyb3cgbmV3IEwoIm9wdGlvbnMuc2tpcnRIZWlnaHQgaXMgcmVxdWlyZWQuIik7bGV0IGU9TWF0aC5jb3Msbj1NYXRoLnNpbixvPU1hdGguc3FydCxyPU1hdGguYXRhbixpPU1hdGguZXhwLHM9UC5QSV9PVkVSX1RXTyxmPVAudG9SYWRpYW5zLHU9dC5oZWlnaHRtYXAsYz10LndpZHRoLGw9dC5oZWlnaHQscD10LnNraXJ0SGVpZ2h0LGQ9cD4wLG09dC5pc0dlb2dyYXBoaWM/PyEwLF89dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCxnPTEvXy5tYXhpbXVtUmFkaXVzLGI9TXQuY2xvbmUodC5uYXRpdmVSZWN0YW5nbGUpLFQ9TXQuY2xvbmUodC5yZWN0YW5nbGUpLE8sRSx3LEM7aChUKT8oTz1ULndlc3QsRT1ULnNvdXRoLHc9VC5lYXN0LEM9VC5ub3J0aCk6bT8oTz1mKGIud2VzdCksRT1mKGIuc291dGgpLHc9ZihiLmVhc3QpLEM9ZihiLm5vcnRoKSk6KE89Yi53ZXN0KmcsRT1zLTIqcihpKC1iLnNvdXRoKmcpKSx3PWIuZWFzdCpnLEM9cy0yKnIoaSgtYi5ub3J0aCpnKSkpO2xldCBNPXQucmVsYXRpdmVUb0NlbnRlcixOPWgoTSk7TT1OP006YS5aRVJPO2xldCBGPXQuaW5jbHVkZVdlYk1lcmNhdG9yVD8/ITEsST10LmV4YWdnZXJhdGlvbj8/MSx2PXQuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ/PzAsQT1JIT09MSxTPXQuc3RydWN0dXJlPz9faS5ERUZBVUxUX1NUUlVDVFVSRSx4PVMuaGVpZ2h0U2NhbGU/P19pLkRFRkFVTFRfU1RSVUNUVVJFLmhlaWdodFNjYWxlLEQ9Uy5oZWlnaHRPZmZzZXQ/P19pLkRFRkFVTFRfU1RSVUNUVVJFLmhlaWdodE9mZnNldCx6PVMuZWxlbWVudHNQZXJIZWlnaHQ/P19pLkRFRkFVTFRfU1RSVUNUVVJFLmVsZW1lbnRzUGVySGVpZ2h0LGo9Uy5zdHJpZGU/P19pLkRFRkFVTFRfU1RSVUNUVVJFLnN0cmlkZSxrPVMuZWxlbWVudE11bHRpcGxpZXI/P19pLkRFRkFVTFRfU1RSVUNUVVJFLmVsZW1lbnRNdWx0aXBsaWVyLHE9Uy5pc0JpZ0VuZGlhbj8/X2kuREVGQVVMVF9TVFJVQ1RVUkUuaXNCaWdFbmRpYW4sVz1NdC5jb21wdXRlV2lkdGgoYiksUj1NdC5jb21wdXRlSGVpZ2h0KGIpLG50PVcvKGMtMSksY3Q9Ui8obC0xKTttfHwoVyo9ZyxSKj1nKTtsZXQgbHQ9Xy5yYWRpaVNxdWFyZWQsX3Q9bHQueCxvdD1sdC55LHh0PWx0LnoseXQ9NjU1MzYsU3Q9LTY1NTM2LGR0PVhvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKE0sXyksZnQ9aXQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGR0LHVVKSxJdCxWdDtGJiYoSXQ9bm8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShFKSxWdD0xLyhuby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKEMpLUl0KSk7bGV0IGRlPWxVO2RlLng9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGRlLnk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGRlLno9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBzZT1wVTtzZS54PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzZS55PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzZS56PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgbGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGZlPWMqbCxadD1wPjA/YyoyK2wqMjowLFF0PWZlK1p0LE5lPW5ldyBBcnJheShRdCksZ2U9bmV3IEFycmF5KFF0KSxFZT1uZXcgQXJyYXkoUXQpLHVuPUY/bmV3IEFycmF5KFF0KTpbXSxHZT1BP25ldyBBcnJheShRdCk6W10sYmU9MCxsbj1sLHBuPTAsRW49YztkJiYoLS1iZSwrK2xuLC0tcG4sKytFbik7bGV0IG9lPTFlLTU7Zm9yKGxldCBaZT1iZTtaZTxsbjsrK1plKXtsZXQgY249WmU7Y248MCYmKGNuPTApLGNuPj1sJiYoY249bC0xKTtsZXQgS2U9Yi5ub3J0aC1jdCpjbjttP0tlPWYoS2UpOktlPXMtMipyKGkoLUtlKmcpKTtsZXQgaG49KEtlLUUpLyhDLUUpO2huPVAuY2xhbXAoaG4sMCwxKTtsZXQgdW89WmU9PT1iZSxxbj1aZT09PWxuLTE7cD4wJiYodW8/S2UrPW9lKlI6cW4mJihLZS09b2UqUikpO2xldCBLbj1lKEtlKSxsbz1uKEtlKSx6ZT14dCpsbyxGZTtGJiYoRmU9KG5vLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoS2UpLUl0KSpWdCk7Zm9yKGxldCBMbj1wbjtMbjxFbjsrK0xuKXtsZXQgV249TG47V248MCYmKFduPTApLFduPj1jJiYoV249Yy0xKTtsZXQgem89Y24qKGMqaikrV24qaixybjtpZih6PT09MSlybj11W3pvXTtlbHNle3JuPTA7bGV0IHBvO2lmKHEpZm9yKHBvPTA7cG88ejsrK3BvKXJuPXJuKmsrdVt6bytwb107ZWxzZSBmb3IocG89ei0xO3BvPj0wOy0tcG8pcm49cm4qayt1W3pvK3BvXX1ybj1ybip4K0QsU3Q9TWF0aC5tYXgoU3Qscm4pLHl0PU1hdGgubWluKHl0LHJuKTtsZXQgUm49Yi53ZXN0K250KlduO20/Um49ZihSbik6Um49Um4qZztsZXQgYXI9KFJuLU8pLyh3LU8pO2FyPVAuY2xhbXAoYXIsMCwxKTtsZXQgUW49Y24qYytXbjtpZihwPjApe2xldCBwbz1Mbj09PXBuLHZyPUxuPT09RW4tMSxNYz11b3x8cW58fHBvfHx2cjtpZigodW98fHFuKSYmKHBvfHx2cikpY29udGludWU7TWMmJihybi09cCxwbz8oUW49ZmUrKGwtY24tMSksUm4tPW9lKlcpOnFuP1FuPWZlK2wrKGMtV24tMSk6dnI/KFFuPWZlK2wrYytjbixSbis9b2UqVyk6dW8mJihRbj1mZStsK2MrbCtXbikpfWxldCBqbz1LbiplKFJuKSxOcj1LbipuKFJuKSxOcz1fdCpqbyxJcz1vdCpOcixJcj0xL28oTnMqam8rSXMqTnIremUqbG8pLCRpPU5zKklyLHZzPUlzKklyLGJpPXplKklyLG9vPW5ldyBhO29vLng9JGkram8qcm4sb28ueT12cytOcipybixvby56PWJpK2xvKnJuLGl0Lm11bHRpcGx5QnlQb2ludChmdCxvbyxmZyksYS5taW5pbXVtQnlDb21wb25lbnQoZmcsZGUsZGUpLGEubWF4aW11bUJ5Q29tcG9uZW50KGZnLHNlLHNlKSxsZT1NYXRoLm1pbihsZSxybiksTmVbUW5dPW9vLEVlW1FuXT1uZXcgSihhcixobiksZ2VbUW5dPXJuLEYmJih1bltRbl09RmUpLEEmJihHZVtRbl09Xy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwob28pKX19bGV0IFl0PWd0LmZyb21Qb2ludHMoTmUpLFZlO2goVCkmJihWZT1Tby5mcm9tUmVjdGFuZ2xlKFQseXQsU3QsXykpO2xldCBkbjtOJiYoZG49bmV3IHhzKF8pLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50UG9zc2libHlVbmRlckVsbGlwc29pZChNLE5lLHl0KSk7bGV0IHNuPW5ldyBMaShkZSxzZSxNKSxtbj1uZXcgUHMoTSxzbixsZSxTdCxkdCwhMSxGLEEsSSx2KSxmbz1uZXcgRmxvYXQzMkFycmF5KFF0Km1uLnN0cmlkZSksSG49MDtmb3IobGV0IFplPTA7WmU8UXQ7KytaZSlIbj1tbi5lbmNvZGUoZm8sSG4sTmVbWmVdLEVlW1plXSxnZVtaZV0sdm9pZCAwLHVuW1plXSxHZVtaZV0pO3JldHVybnt2ZXJ0aWNlczpmbyxtYXhpbXVtSGVpZ2h0OlN0LG1pbmltdW1IZWlnaHQ6eXQsZW5jb2Rpbmc6bW4sYm91bmRpbmdTcGhlcmUzRDpZdCxvcmllbnRlZEJvdW5kaW5nQm94OlZlLG9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlOmRufX07WlI9X2l9KTt2YXIgSlI9WG4oKGRhdCwkZCk9PnsvKiBDb3B5cmlnaHQgMjAxNS0yMDE4IEVzcmkuIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgQHByZXNlcnZlICovKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXt2YXIgcj17fTtyLmRlZmF1bHROb0RhdGFWYWx1ZT0tMzQwMjc5OTkzODc5MDE0ODRlMjIsci5kZWNvZGU9ZnVuY3Rpb24obCxwKXtwPXB8fHt9O3ZhciBkPXAuZW5jb2RlZE1hc2tEYXRhfHxwLmVuY29kZWRNYXNrRGF0YT09PW51bGwsbT11KGwscC5pbnB1dE9mZnNldHx8MCxkKSxfPXAubm9EYXRhVmFsdWUhPT1udWxsP3Aubm9EYXRhVmFsdWU6ci5kZWZhdWx0Tm9EYXRhVmFsdWUsZz1pKG0scC5waXhlbFR5cGV8fEZsb2F0MzJBcnJheSxwLmVuY29kZWRNYXNrRGF0YSxfLHAucmV0dXJuTWFzayksYj17d2lkdGg6bS53aWR0aCxoZWlnaHQ6bS5oZWlnaHQscGl4ZWxEYXRhOmcucmVzdWx0UGl4ZWxzLG1pblZhbHVlOmcubWluVmFsdWUsbWF4VmFsdWU6bS5waXhlbHMubWF4VmFsdWUsbm9EYXRhVmFsdWU6X307cmV0dXJuIGcucmVzdWx0TWFzayYmKGIubWFza0RhdGE9Zy5yZXN1bHRNYXNrKSxwLnJldHVybkVuY29kZWRNYXNrJiZtLm1hc2smJihiLmVuY29kZWRNYXNrRGF0YT1tLm1hc2suYml0c2V0P20ubWFzay5iaXRzZXQ6bnVsbCkscC5yZXR1cm5GaWxlSW5mbyYmKGIuZmlsZUluZm89cyhtKSxwLmNvbXB1dGVVc2VkQml0RGVwdGhzJiYoYi5maWxlSW5mby5iaXREZXB0aHM9ZihtKSkpLGJ9O3ZhciBpPWZ1bmN0aW9uKGwscCxkLG0sXyl7dmFyIGc9MCxiPWwucGl4ZWxzLm51bUJsb2Nrc1gsVD1sLnBpeGVscy5udW1CbG9ja3NZLE89TWF0aC5mbG9vcihsLndpZHRoL2IpLEU9TWF0aC5mbG9vcihsLmhlaWdodC9UKSx3PTIqbC5tYXhaRXJyb3IsQz1OdW1iZXIuTUFYX1ZBTFVFLE07ZD1kfHwobC5tYXNrP2wubWFzay5iaXRzZXQ6bnVsbCk7dmFyIE4sRjtOPW5ldyBwKGwud2lkdGgqbC5oZWlnaHQpLF8mJmQmJihGPW5ldyBVaW50OEFycmF5KGwud2lkdGgqbC5oZWlnaHQpKTtmb3IodmFyIEk9bmV3IEZsb2F0MzJBcnJheShPKkUpLHYsQixBPTA7QTw9VDtBKyspe3ZhciBTPUEhPT1UP0U6bC5oZWlnaHQlVDtpZihTIT09MClmb3IodmFyIHg9MDt4PD1iO3grKyl7dmFyIEQ9eCE9PWI/TzpsLndpZHRoJWI7aWYoRCE9PTApe3ZhciB6PUEqbC53aWR0aCpFK3gqTyxqPWwud2lkdGgtRCxrPWwucGl4ZWxzLmJsb2Nrc1tnXSxxLFcsUjtrLmVuY29kaW5nPDI/KGsuZW5jb2Rpbmc9PT0wP3E9ay5yYXdEYXRhOihjKGsuc3R1ZmZlZERhdGEsay5iaXRzUGVyUGl4ZWwsay5udW1WYWxpZFBpeGVscyxrLm9mZnNldCx3LEksbC5waXhlbHMubWF4VmFsdWUpLHE9SSksVz0wKTprLmVuY29kaW5nPT09Mj9SPTA6Uj1rLm9mZnNldDt2YXIgbnQ7aWYoZClmb3IoQj0wO0I8UztCKyspe2Zvcih6JjcmJihudD1kW3o+PjNdLG50PDw9eiY3KSx2PTA7djxEO3YrKyl6Jjd8fChudD1kW3o+PjNdKSxudCYxMjg/KEYmJihGW3pdPTEpLE09ay5lbmNvZGluZzwyP3FbVysrXTpSLEM9Qz5NP006QyxOW3orK109TSk6KEYmJihGW3pdPTApLE5beisrXT1tKSxudDw8PTE7eis9an1lbHNlIGlmKGsuZW5jb2Rpbmc8Milmb3IoQj0wO0I8UztCKyspe2Zvcih2PTA7djxEO3YrKylNPXFbVysrXSxDPUM+TT9NOkMsTlt6KytdPU07eis9an1lbHNlIGZvcihDPUM+Uj9SOkMsQj0wO0I8UztCKyspe2Zvcih2PTA7djxEO3YrKylOW3orK109Ujt6Kz1qfWlmKGsuZW5jb2Rpbmc9PT0xJiZXIT09ay5udW1WYWxpZFBpeGVscyl0aHJvdyJCbG9jayBhbmQgTWFzayBkbyBub3QgbWF0Y2giO2crK319fXJldHVybntyZXN1bHRQaXhlbHM6TixyZXN1bHRNYXNrOkYsbWluVmFsdWU6Q319LHM9ZnVuY3Rpb24obCl7cmV0dXJue2ZpbGVJZGVudGlmaWVyU3RyaW5nOmwuZmlsZUlkZW50aWZpZXJTdHJpbmcsZmlsZVZlcnNpb246bC5maWxlVmVyc2lvbixpbWFnZVR5cGU6bC5pbWFnZVR5cGUsaGVpZ2h0OmwuaGVpZ2h0LHdpZHRoOmwud2lkdGgsbWF4WkVycm9yOmwubWF4WkVycm9yLGVvZk9mZnNldDpsLmVvZk9mZnNldCxtYXNrOmwubWFzaz97bnVtQmxvY2tzWDpsLm1hc2subnVtQmxvY2tzWCxudW1CbG9ja3NZOmwubWFzay5udW1CbG9ja3NZLG51bUJ5dGVzOmwubWFzay5udW1CeXRlcyxtYXhWYWx1ZTpsLm1hc2subWF4VmFsdWV9Om51bGwscGl4ZWxzOntudW1CbG9ja3NYOmwucGl4ZWxzLm51bUJsb2Nrc1gsbnVtQmxvY2tzWTpsLnBpeGVscy5udW1CbG9ja3NZLG51bUJ5dGVzOmwucGl4ZWxzLm51bUJ5dGVzLG1heFZhbHVlOmwucGl4ZWxzLm1heFZhbHVlLG5vRGF0YVZhbHVlOmwubm9EYXRhVmFsdWV9fX0sZj1mdW5jdGlvbihsKXtmb3IodmFyIHA9bC5waXhlbHMubnVtQmxvY2tzWCpsLnBpeGVscy5udW1CbG9ja3NZLGQ9e30sbT0wO208cDttKyspe3ZhciBfPWwucGl4ZWxzLmJsb2Nrc1ttXTtfLmVuY29kaW5nPT09MD9kLmZsb2F0MzI9ITA6Xy5lbmNvZGluZz09PTE/ZFtfLmJpdHNQZXJQaXhlbF09ITA6ZFswXT0hMH1yZXR1cm4gT2JqZWN0LmtleXMoZCl9LHU9ZnVuY3Rpb24obCxwLGQpe3ZhciBtPXt9LF89bmV3IFVpbnQ4QXJyYXkobCxwLDEwKTtpZihtLmZpbGVJZGVudGlmaWVyU3RyaW5nPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxfKSxtLmZpbGVJZGVudGlmaWVyU3RyaW5nLnRyaW0oKSE9PSJDbnRaSW1hZ2UiKXRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZzogIittLmZpbGVJZGVudGlmaWVyU3RyaW5nO3ArPTEwO3ZhciBnPW5ldyBEYXRhVmlldyhsLHAsMjQpO2lmKG0uZmlsZVZlcnNpb249Zy5nZXRJbnQzMigwLCEwKSxtLmltYWdlVHlwZT1nLmdldEludDMyKDQsITApLG0uaGVpZ2h0PWcuZ2V0VWludDMyKDgsITApLG0ud2lkdGg9Zy5nZXRVaW50MzIoMTIsITApLG0ubWF4WkVycm9yPWcuZ2V0RmxvYXQ2NCgxNiwhMCkscCs9MjQsIWQpaWYoZz1uZXcgRGF0YVZpZXcobCxwLDE2KSxtLm1hc2s9e30sbS5tYXNrLm51bUJsb2Nrc1k9Zy5nZXRVaW50MzIoMCwhMCksbS5tYXNrLm51bUJsb2Nrc1g9Zy5nZXRVaW50MzIoNCwhMCksbS5tYXNrLm51bUJ5dGVzPWcuZ2V0VWludDMyKDgsITApLG0ubWFzay5tYXhWYWx1ZT1nLmdldEZsb2F0MzIoMTIsITApLHArPTE2LG0ubWFzay5udW1CeXRlcz4wKXt2YXIgYj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwobS53aWR0aCptLmhlaWdodC84KSk7Zz1uZXcgRGF0YVZpZXcobCxwLG0ubWFzay5udW1CeXRlcyk7dmFyIFQ9Zy5nZXRJbnQxNigwLCEwKSxPPTIsRT0wO2Rve2lmKFQ+MClmb3IoO1QtLTspYltFKytdPWcuZ2V0VWludDgoTysrKTtlbHNle3ZhciB3PWcuZ2V0VWludDgoTysrKTtmb3IoVD0tVDtULS07KWJbRSsrXT13fVQ9Zy5nZXRJbnQxNihPLCEwKSxPKz0yfXdoaWxlKE88bS5tYXNrLm51bUJ5dGVzKTtpZihUIT09LTMyNzY4fHxFPGIubGVuZ3RoKXRocm93IlVuZXhwZWN0ZWQgZW5kIG9mIG1hc2sgUkxFIGVuY29kaW5nIjttLm1hc2suYml0c2V0PWIscCs9bS5tYXNrLm51bUJ5dGVzfWVsc2UgbS5tYXNrLm51bUJ5dGVzfG0ubWFzay5udW1CbG9ja3NZfG0ubWFzay5tYXhWYWx1ZXx8KG0ubWFzay5iaXRzZXQ9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKG0ud2lkdGgqbS5oZWlnaHQvOCkpKTtnPW5ldyBEYXRhVmlldyhsLHAsMTYpLG0ucGl4ZWxzPXt9LG0ucGl4ZWxzLm51bUJsb2Nrc1k9Zy5nZXRVaW50MzIoMCwhMCksbS5waXhlbHMubnVtQmxvY2tzWD1nLmdldFVpbnQzMig0LCEwKSxtLnBpeGVscy5udW1CeXRlcz1nLmdldFVpbnQzMig4LCEwKSxtLnBpeGVscy5tYXhWYWx1ZT1nLmdldEZsb2F0MzIoMTIsITApLHArPTE2O3ZhciBDPW0ucGl4ZWxzLm51bUJsb2Nrc1gsTT1tLnBpeGVscy5udW1CbG9ja3NZLE49QysobS53aWR0aCVDPjA/MTowKSxGPU0rKG0uaGVpZ2h0JU0+MD8xOjApO20ucGl4ZWxzLmJsb2Nrcz1uZXcgQXJyYXkoTipGKTtmb3IodmFyIEk9MCx2PTA7djxGO3YrKylmb3IodmFyIEI9MDtCPE47QisrKXt2YXIgQT0wLFM9bC5ieXRlTGVuZ3RoLXA7Zz1uZXcgRGF0YVZpZXcobCxwLE1hdGgubWluKDEwLFMpKTt2YXIgeD17fTttLnBpeGVscy5ibG9ja3NbSSsrXT14O3ZhciBEPWcuZ2V0VWludDgoMCk7aWYoQSsrLHguZW5jb2Rpbmc9RCY2Myx4LmVuY29kaW5nPjMpdGhyb3ciSW52YWxpZCBibG9jayBlbmNvZGluZyAoIit4LmVuY29kaW5nKyIpIjtpZih4LmVuY29kaW5nPT09Mil7cCsrO2NvbnRpbnVlfWlmKEQhPT0wJiZEIT09Mil7aWYoRD4+PTYseC5vZmZzZXRUeXBlPUQsRD09PTIpeC5vZmZzZXQ9Zy5nZXRJbnQ4KDEpLEErKztlbHNlIGlmKEQ9PT0xKXgub2Zmc2V0PWcuZ2V0SW50MTYoMSwhMCksQSs9MjtlbHNlIGlmKEQ9PT0wKXgub2Zmc2V0PWcuZ2V0RmxvYXQzMigxLCEwKSxBKz00O2Vsc2UgdGhyb3ciSW52YWxpZCBibG9jayBvZmZzZXQgdHlwZSI7aWYoeC5lbmNvZGluZz09PTEpaWYoRD1nLmdldFVpbnQ4KEEpLEErKyx4LmJpdHNQZXJQaXhlbD1EJjYzLEQ+Pj02LHgubnVtVmFsaWRQaXhlbHNUeXBlPUQsRD09PTIpeC5udW1WYWxpZFBpeGVscz1nLmdldFVpbnQ4KEEpLEErKztlbHNlIGlmKEQ9PT0xKXgubnVtVmFsaWRQaXhlbHM9Zy5nZXRVaW50MTYoQSwhMCksQSs9MjtlbHNlIGlmKEQ9PT0wKXgubnVtVmFsaWRQaXhlbHM9Zy5nZXRVaW50MzIoQSwhMCksQSs9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSJ9aWYocCs9QSx4LmVuY29kaW5nIT09Myl7dmFyIHosajtpZih4LmVuY29kaW5nPT09MCl7dmFyIGs9KG0ucGl4ZWxzLm51bUJ5dGVzLTEpLzQ7aWYoayE9PU1hdGguZmxvb3IoaykpdGhyb3cidW5jb21wcmVzc2VkIGJsb2NrIGhhcyBpbnZhbGlkIGxlbmd0aCI7ej1uZXcgQXJyYXlCdWZmZXIoayo0KSxqPW5ldyBVaW50OEFycmF5KHopLGouc2V0KG5ldyBVaW50OEFycmF5KGwscCxrKjQpKTt2YXIgcT1uZXcgRmxvYXQzMkFycmF5KHopO3gucmF3RGF0YT1xLHArPWsqNH1lbHNlIGlmKHguZW5jb2Rpbmc9PT0xKXt2YXIgVz1NYXRoLmNlaWwoeC5udW1WYWxpZFBpeGVscyp4LmJpdHNQZXJQaXhlbC84KSxSPU1hdGguY2VpbChXLzQpO3o9bmV3IEFycmF5QnVmZmVyKFIqNCksaj1uZXcgVWludDhBcnJheSh6KSxqLnNldChuZXcgVWludDhBcnJheShsLHAsVykpLHguc3R1ZmZlZERhdGE9bmV3IFVpbnQzMkFycmF5KHopLHArPVd9fX1yZXR1cm4gbS5lb2ZPZmZzZXQ9cCxtfSxjPWZ1bmN0aW9uKGwscCxkLG0sXyxnLGIpe3ZhciBUPSgxPDxwKS0xLE89MCxFLHc9MCxDLE0sTj1NYXRoLmNlaWwoKGItbSkvXyksRj1sLmxlbmd0aCo0LU1hdGguY2VpbChwKmQvOCk7Zm9yKGxbbC5sZW5ndGgtMV08PD04KkYsRT0wO0U8ZDtFKyspe2lmKHc9PT0wJiYoTT1sW08rK10sdz0zMiksdz49cClDPU0+Pj53LXAmVCx3LT1wO2Vsc2V7dmFyIEk9cC13O0M9KE0mVCk8PEkmVCxNPWxbTysrXSx3PTMyLUksQys9TT4+Pnd9Z1tFXT1DPE4/bStDKl86Yn1yZXR1cm4gZ307cmV0dXJuIHJ9KCksZT1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgcj17dW5zdHVmZjpmdW5jdGlvbih1LGMsbCxwLGQsbSxfLGcpe3ZhciBiPSgxPDxsKS0xLFQ9MCxPLEU9MCx3LEMsTSxOLEY9dS5sZW5ndGgqNC1NYXRoLmNlaWwobCpwLzgpO2lmKHVbdS5sZW5ndGgtMV08PD04KkYsZClmb3IoTz0wO088cDtPKyspRT09PTAmJihDPXVbVCsrXSxFPTMyKSxFPj1sPyh3PUM+Pj5FLWwmYixFLT1sKTooTT1sLUUsdz0oQyZiKTw8TSZiLEM9dVtUKytdLEU9MzItTSx3Kz1DPj4+RSksY1tPXT1kW3ddO2Vsc2UgZm9yKE49TWF0aC5jZWlsKChnLW0pL18pLE89MDtPPHA7TysrKUU9PT0wJiYoQz11W1QrK10sRT0zMiksRT49bD8odz1DPj4+RS1sJmIsRS09bCk6KE09bC1FLHc9KEMmYik8PE0mYixDPXVbVCsrXSxFPTMyLU0sdys9Qz4+PkUpLGNbT109dzxOP20rdypfOmd9LHVuc3R1ZmZMVVQ6ZnVuY3Rpb24odSxjLGwscCxkLG0pe3ZhciBfPSgxPDxjKS0xLGc9MCxiPTAsVD0wLE89MCxFPTAsdyxDPVtdLE09dS5sZW5ndGgqNC1NYXRoLmNlaWwoYypsLzgpO3VbdS5sZW5ndGgtMV08PD04Kk07dmFyIE49TWF0aC5jZWlsKChtLXApL2QpO2ZvcihiPTA7YjxsO2IrKylPPT09MCYmKHc9dVtnKytdLE89MzIpLE8+PWM/KEU9dz4+Pk8tYyZfLE8tPWMpOihUPWMtTyxFPSh3Jl8pPDxUJl8sdz11W2crK10sTz0zMi1ULEUrPXc+Pj5PKSxDW2JdPUU8Tj9wK0UqZDptO3JldHVybiBDLnVuc2hpZnQocCksQ30sdW5zdHVmZjI6ZnVuY3Rpb24odSxjLGwscCxkLG0sXyxnKXt2YXIgYj0oMTw8bCktMSxUPTAsTyxFPTAsdz0wLEMsTSxOO2lmKGQpZm9yKE89MDtPPHA7TysrKUU9PT0wJiYoTT11W1QrK10sRT0zMix3PTApLEU+PWw/KEM9TT4+PncmYixFLT1sLHcrPWwpOihOPWwtRSxDPU0+Pj53JmIsTT11W1QrK10sRT0zMi1OLEN8PShNJigxPDxOKS0xKTw8bC1OLHc9TiksY1tPXT1kW0NdO2Vsc2V7dmFyIEY9TWF0aC5jZWlsKChnLW0pL18pO2ZvcihPPTA7TzxwO08rKylFPT09MCYmKE09dVtUKytdLEU9MzIsdz0wKSxFPj1sPyhDPU0+Pj53JmIsRS09bCx3Kz1sKTooTj1sLUUsQz1NPj4+dyZiLE09dVtUKytdLEU9MzItTixDfD0oTSYoMTw8TiktMSk8PGwtTix3PU4pLGNbT109QzxGP20rQypfOmd9cmV0dXJuIGN9LHVuc3R1ZmZMVVQyOmZ1bmN0aW9uKHUsYyxsLHAsZCxtKXt2YXIgXz0oMTw8YyktMSxnPTAsYj0wLFQ9MCxPPTAsRT0wLHc9MCxDLE09W10sTj1NYXRoLmNlaWwoKG0tcCkvZCk7Zm9yKGI9MDtiPGw7YisrKU89PT0wJiYoQz11W2crK10sTz0zMix3PTApLE8+PWM/KEU9Qz4+PncmXyxPLT1jLHcrPWMpOihUPWMtTyxFPUM+Pj53Jl8sQz11W2crK10sTz0zMi1ULEV8PShDJigxPDxUKS0xKTw8Yy1ULHc9VCksTVtiXT1FPE4/cCtFKmQ6bTtyZXR1cm4gTS51bnNoaWZ0KHApLE19LG9yaWdpbmFsVW5zdHVmZjpmdW5jdGlvbih1LGMsbCxwKXt2YXIgZD0oMTw8bCktMSxtPTAsXyxnPTAsYixULE8sRT11Lmxlbmd0aCo0LU1hdGguY2VpbChsKnAvOCk7Zm9yKHVbdS5sZW5ndGgtMV08PD04KkUsXz0wO188cDtfKyspZz09PTAmJihUPXVbbSsrXSxnPTMyKSxnPj1sPyhiPVQ+Pj5nLWwmZCxnLT1sKTooTz1sLWcsYj0oVCZkKTw8TyZkLFQ9dVttKytdLGc9MzItTyxiKz1UPj4+ZyksY1tfXT1iO3JldHVybiBjfSxvcmlnaW5hbFVuc3R1ZmYyOmZ1bmN0aW9uKHUsYyxsLHApe3ZhciBkPSgxPDxsKS0xLG09MCxfLGc9MCxiPTAsVCxPLEU7Zm9yKF89MDtfPHA7XysrKWc9PT0wJiYoTz11W20rK10sZz0zMixiPTApLGc+PWw/KFQ9Tz4+PmImZCxnLT1sLGIrPWwpOihFPWwtZyxUPU8+Pj5iJmQsTz11W20rK10sZz0zMi1FLFR8PShPJigxPDxFKS0xKTw8bC1FLGI9RSksY1tfXT1UO3JldHVybiBjfX0saT17SFVGRk1BTl9MVVRfQklUU19NQVg6MTIsY29tcHV0ZUNoZWNrc3VtRmxldGNoZXIzMjpmdW5jdGlvbih1KXtmb3IodmFyIGM9NjU1MzUsbD02NTUzNSxwPXUubGVuZ3RoLGQ9TWF0aC5mbG9vcihwLzIpLG09MDtkOyl7dmFyIF89ZD49MzU5PzM1OTpkO2QtPV87ZG8gYys9dVttKytdPDw4LGwrPWMrPXVbbSsrXTt3aGlsZSgtLV8pO2M9KGMmNjU1MzUpKyhjPj4+MTYpLGw9KGwmNjU1MzUpKyhsPj4+MTYpfXJldHVybiBwJjEmJihsKz1jKz11W21dPDw4KSxjPShjJjY1NTM1KSsoYz4+PjE2KSxsPShsJjY1NTM1KSsobD4+PjE2KSwobDw8MTZ8Yyk+Pj4wfSxyZWFkSGVhZGVySW5mbzpmdW5jdGlvbih1LGMpe3ZhciBsPWMucHRyLHA9bmV3IFVpbnQ4QXJyYXkodSxsLDYpLGQ9e307aWYoZC5maWxlSWRlbnRpZmllclN0cmluZz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwscCksZC5maWxlSWRlbnRpZmllclN0cmluZy5sYXN0SW5kZXhPZigiTGVyYzIiLDApIT09MCl0aHJvdyJVbmV4cGVjdGVkIGZpbGUgaWRlbnRpZmllciBzdHJpbmcgKGV4cGVjdCBMZXJjMiApOiAiK2QuZmlsZUlkZW50aWZpZXJTdHJpbmc7bCs9Njt2YXIgbT1uZXcgRGF0YVZpZXcodSxsLDgpLF89bS5nZXRJbnQzMigwLCEwKTtkLmZpbGVWZXJzaW9uPV8sbCs9NCxfPj0zJiYoZC5jaGVja3N1bT1tLmdldFVpbnQzMig0LCEwKSxsKz00KSxtPW5ldyBEYXRhVmlldyh1LGwsMTIpLGQuaGVpZ2h0PW0uZ2V0VWludDMyKDAsITApLGQud2lkdGg9bS5nZXRVaW50MzIoNCwhMCksbCs9OCxfPj00PyhkLm51bURpbXM9bS5nZXRVaW50MzIoOCwhMCksbCs9NCk6ZC5udW1EaW1zPTEsbT1uZXcgRGF0YVZpZXcodSxsLDQwKSxkLm51bVZhbGlkUGl4ZWw9bS5nZXRVaW50MzIoMCwhMCksZC5taWNyb0Jsb2NrU2l6ZT1tLmdldEludDMyKDQsITApLGQuYmxvYlNpemU9bS5nZXRJbnQzMig4LCEwKSxkLmltYWdlVHlwZT1tLmdldEludDMyKDEyLCEwKSxkLm1heFpFcnJvcj1tLmdldEZsb2F0NjQoMTYsITApLGQuek1pbj1tLmdldEZsb2F0NjQoMjQsITApLGQuek1heD1tLmdldEZsb2F0NjQoMzIsITApLGwrPTQwLGMuaGVhZGVySW5mbz1kLGMucHRyPWw7dmFyIGcsYjtpZihfPj0zJiYoYj1fPj00PzUyOjQ4LGc9dGhpcy5jb21wdXRlQ2hlY2tzdW1GbGV0Y2hlcjMyKG5ldyBVaW50OEFycmF5KHUsbC1iLGQuYmxvYlNpemUtMTQpKSxnIT09ZC5jaGVja3N1bSkpdGhyb3ciQ2hlY2tzdW0gZmFpbGVkLiI7cmV0dXJuITB9LGNoZWNrTWluTWF4UmFuZ2VzOmZ1bmN0aW9uKHUsYyl7dmFyIGw9Yy5oZWFkZXJJbmZvLHA9dGhpcy5nZXREYXRhVHlwZUFycmF5KGwuaW1hZ2VUeXBlKSxkPWwubnVtRGltcyp0aGlzLmdldERhdGFUeXBlU2l6ZShsLmltYWdlVHlwZSksbT10aGlzLnJlYWRTdWJBcnJheSh1LGMucHRyLHAsZCksXz10aGlzLnJlYWRTdWJBcnJheSh1LGMucHRyK2QscCxkKTtjLnB0cis9MipkO3ZhciBnLGI9ITA7Zm9yKGc9MDtnPGwubnVtRGltcztnKyspaWYobVtnXSE9PV9bZ10pe2I9ITE7YnJlYWt9cmV0dXJuIGwubWluVmFsdWVzPW0sbC5tYXhWYWx1ZXM9XyxifSxyZWFkU3ViQXJyYXk6ZnVuY3Rpb24odSxjLGwscCl7dmFyIGQ7aWYobD09PVVpbnQ4QXJyYXkpZD1uZXcgVWludDhBcnJheSh1LGMscCk7ZWxzZXt2YXIgbT1uZXcgQXJyYXlCdWZmZXIocCksXz1uZXcgVWludDhBcnJheShtKTtfLnNldChuZXcgVWludDhBcnJheSh1LGMscCkpLGQ9bmV3IGwobSl9cmV0dXJuIGR9LHJlYWRNYXNrOmZ1bmN0aW9uKHUsYyl7dmFyIGw9Yy5wdHIscD1jLmhlYWRlckluZm8sZD1wLndpZHRoKnAuaGVpZ2h0LG09cC5udW1WYWxpZFBpeGVsLF89bmV3IERhdGFWaWV3KHUsbCw0KSxnPXt9O2lmKGcubnVtQnl0ZXM9Xy5nZXRVaW50MzIoMCwhMCksbCs9NCwobT09PTB8fGQ9PT1tKSYmZy5udW1CeXRlcyE9PTApdGhyb3ciaW52YWxpZCBtYXNrIjt2YXIgYixUO2lmKG09PT0wKWI9bmV3IFVpbnQ4QXJyYXkoTWF0aC5jZWlsKGQvOCkpLGcuYml0c2V0PWIsVD1uZXcgVWludDhBcnJheShkKSxjLnBpeGVscy5yZXN1bHRNYXNrPVQsbCs9Zy5udW1CeXRlcztlbHNlIGlmKGcubnVtQnl0ZXM+MCl7Yj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoZC84KSksXz1uZXcgRGF0YVZpZXcodSxsLGcubnVtQnl0ZXMpO3ZhciBPPV8uZ2V0SW50MTYoMCwhMCksRT0yLHc9MCxDPTA7ZG97aWYoTz4wKWZvcig7Ty0tOyliW3crK109Xy5nZXRVaW50OChFKyspO2Vsc2UgZm9yKEM9Xy5nZXRVaW50OChFKyspLE89LU87Ty0tOyliW3crK109QztPPV8uZ2V0SW50MTYoRSwhMCksRSs9Mn13aGlsZShFPGcubnVtQnl0ZXMpO2lmKE8hPT0tMzI3Njh8fHc8Yi5sZW5ndGgpdGhyb3ciVW5leHBlY3RlZCBlbmQgb2YgbWFzayBSTEUgZW5jb2RpbmciO1Q9bmV3IFVpbnQ4QXJyYXkoZCk7dmFyIE09MCxOPTA7Zm9yKE49MDtOPGQ7TisrKU4mNz8oTT1iW04+PjNdLE08PD1OJjcpOk09YltOPj4zXSxNJjEyOCYmKFRbTl09MSk7Yy5waXhlbHMucmVzdWx0TWFzaz1ULGcuYml0c2V0PWIsbCs9Zy5udW1CeXRlc31yZXR1cm4gYy5wdHI9bCxjLm1hc2s9ZywhMH0scmVhZERhdGFPbmVTd2VlcDpmdW5jdGlvbih1LGMsbCl7dmFyIHA9Yy5wdHIsZD1jLmhlYWRlckluZm8sbT1kLm51bURpbXMsXz1kLndpZHRoKmQuaGVpZ2h0LGc9ZC5pbWFnZVR5cGUsYj1kLm51bVZhbGlkUGl4ZWwqaS5nZXREYXRhVHlwZVNpemUoZykqbSxULE89Yy5waXhlbHMucmVzdWx0TWFzaztpZihsPT09VWludDhBcnJheSlUPW5ldyBVaW50OEFycmF5KHUscCxiKTtlbHNle3ZhciBFPW5ldyBBcnJheUJ1ZmZlcihiKSx3PW5ldyBVaW50OEFycmF5KEUpO3cuc2V0KG5ldyBVaW50OEFycmF5KHUscCxiKSksVD1uZXcgbChFKX1pZihULmxlbmd0aD09PV8qbSljLnBpeGVscy5yZXN1bHRQaXhlbHM9VDtlbHNle2MucGl4ZWxzLnJlc3VsdFBpeGVscz1uZXcgbChfKm0pO3ZhciBDPTAsTT0wLE49MCxGPTA7aWYobT4xKWZvcihOPTA7TjxtO04rKylmb3IoRj1OKl8sTT0wO008XztNKyspT1tNXSYmKGMucGl4ZWxzLnJlc3VsdFBpeGVsc1tGK01dPVRbQysrXSk7ZWxzZSBmb3IoTT0wO008XztNKyspT1tNXSYmKGMucGl4ZWxzLnJlc3VsdFBpeGVsc1tNXT1UW0MrK10pfXJldHVybiBwKz1iLGMucHRyPXAsITB9LHJlYWRIdWZmbWFuVHJlZTpmdW5jdGlvbih1LGMpe3ZhciBsPXRoaXMuSFVGRk1BTl9MVVRfQklUU19NQVgscD1uZXcgRGF0YVZpZXcodSxjLnB0ciwxNik7Yy5wdHIrPTE2O3ZhciBkPXAuZ2V0SW50MzIoMCwhMCk7aWYoZDwyKXRocm93InVuc3VwcG9ydGVkIEh1ZmZtYW4gdmVyc2lvbiI7dmFyIG09cC5nZXRJbnQzMig0LCEwKSxfPXAuZ2V0SW50MzIoOCwhMCksZz1wLmdldEludDMyKDEyLCEwKTtpZihfPj1nKXJldHVybiExO3ZhciBiPW5ldyBVaW50MzJBcnJheShnLV8pO2kuZGVjb2RlQml0cyh1LGMsYik7dmFyIFQ9W10sTyxFLHcsQztmb3IoTz1fO088ZztPKyspRT1PLShPPG0/MDptKSxUW0VdPXtmaXJzdDpiW08tX10sc2Vjb25kOm51bGx9O3ZhciBNPXUuYnl0ZUxlbmd0aC1jLnB0cixOPU1hdGguY2VpbChNLzQpLEY9bmV3IEFycmF5QnVmZmVyKE4qNCksST1uZXcgVWludDhBcnJheShGKTtJLnNldChuZXcgVWludDhBcnJheSh1LGMucHRyLE0pKTt2YXIgdj1uZXcgVWludDMyQXJyYXkoRiksQj0wLEEsUz0wO2ZvcihBPXZbMF0sTz1fO088ZztPKyspRT1PLShPPG0/MDptKSxDPVRbRV0uZmlyc3QsQz4wJiYoVFtFXS5zZWNvbmQ9QTw8Qj4+PjMyLUMsMzItQj49Qz8oQis9QyxCPT09MzImJihCPTAsUysrLEE9dltTXSkpOihCKz1DLTMyLFMrKyxBPXZbU10sVFtFXS5zZWNvbmR8PUE+Pj4zMi1CKSk7dmFyIHg9MCxEPTAsej1uZXcgcztmb3IoTz0wO088VC5sZW5ndGg7TysrKVRbT10hPT12b2lkIDAmJih4PU1hdGgubWF4KHgsVFtPXS5maXJzdCkpO3g+PWw/RD1sOkQ9eCx4Pj0zMCYmY29uc29sZS5sb2coIldBUm5pbmcsIGxhcmdlIE5VTSBMVVQgQklUUyBJUyAiK3gpO3ZhciBqPVtdLGsscSxXLFIsbnQsY3Q7Zm9yKE89XztPPGc7TysrKWlmKEU9Ty0oTzxtPzA6bSksQz1UW0VdLmZpcnN0LEM+MClpZihrPVtDLEVdLEM8PUQpZm9yKHE9VFtFXS5zZWNvbmQ8PEQtQyxXPTE8PEQtQyx3PTA7dzxXO3crKylqW3F8d109aztlbHNlIGZvcihxPVRbRV0uc2Vjb25kLGN0PXosUj1DLTE7Uj49MDtSLS0pbnQ9cT4+PlImMSxudD8oY3QucmlnaHR8fChjdC5yaWdodD1uZXcgcyksY3Q9Y3QucmlnaHQpOihjdC5sZWZ0fHwoY3QubGVmdD1uZXcgcyksY3Q9Y3QubGVmdCksUj09PTAmJiFjdC52YWwmJihjdC52YWw9a1sxXSk7cmV0dXJue2RlY29kZUx1dDpqLG51bUJpdHNMVVRRaWNrOkQsbnVtQml0c0xVVDp4LHRyZWU6eixzdHVmZmVkRGF0YTp2LHNyY1B0cjpTLGJpdFBvczpCfX0scmVhZEh1ZmZtYW46ZnVuY3Rpb24odSxjLGwpe3ZhciBwPWMuaGVhZGVySW5mbyxkPXAubnVtRGltcyxtPWMuaGVhZGVySW5mby5oZWlnaHQsXz1jLmhlYWRlckluZm8ud2lkdGgsZz1fKm0sYj10aGlzLnJlYWRIdWZmbWFuVHJlZSh1LGMpLFQ9Yi5kZWNvZGVMdXQsTz1iLnRyZWUsRT1iLnN0dWZmZWREYXRhLHc9Yi5zcmNQdHIsQz1iLmJpdFBvcyxNPWIubnVtQml0c0xVVFFpY2ssTj1iLm51bUJpdHNMVVQsRj1jLmhlYWRlckluZm8uaW1hZ2VUeXBlPT09MD8xMjg6MCxJLHYsQixBPWMucGl4ZWxzLnJlc3VsdE1hc2ssUyx4LEQseixqLGsscSxXPTA7Qz4wJiYodysrLEM9MCk7dmFyIFI9RVt3XSxudD1jLmVuY29kZU1vZGU9PT0xLGN0PW5ldyBsKGcqZCksbHQ9Y3QsX3Q7Zm9yKF90PTA7X3Q8cC5udW1EaW1zO190Kyspe2lmKGQ+MSYmKGx0PW5ldyBsKGN0LmJ1ZmZlcixnKl90LGcpLFc9MCksYy5oZWFkZXJJbmZvLm51bVZhbGlkUGl4ZWw9PT1fKm0pZm9yKGs9MCx6PTA7ejxtO3orKylmb3Ioaj0wO2o8XztqKyssaysrKXtpZih2PTAsUz1SPDxDPj4+MzItTSx4PVMsMzItQzxNJiYoU3w9RVt3KzFdPj4+NjQtQy1NLHg9UyksVFt4XSl2PVRbeF1bMV0sQys9VFt4XVswXTtlbHNlIGZvcihTPVI8PEM+Pj4zMi1OLHg9UywzMi1DPE4mJihTfD1FW3crMV0+Pj42NC1DLU4seD1TKSxJPU8scT0wO3E8TjtxKyspaWYoRD1TPj4+Ti1xLTEmMSxJPUQ/SS5yaWdodDpJLmxlZnQsIShJLmxlZnR8fEkucmlnaHQpKXt2PUkudmFsLEM9QytxKzE7YnJlYWt9Qz49MzImJihDLT0zMix3KyssUj1FW3ddKSxCPXYtRixudD8oaj4wP0IrPVc6ej4wP0IrPWx0W2stX106Qis9VyxCJj0yNTUsbHRba109QixXPUIpOmx0W2tdPUJ9ZWxzZSBmb3Ioaz0wLHo9MDt6PG07eisrKWZvcihqPTA7ajxfO2orKyxrKyspaWYoQVtrXSl7aWYodj0wLFM9Ujw8Qz4+PjMyLU0seD1TLDMyLUM8TSYmKFN8PUVbdysxXT4+PjY0LUMtTSx4PVMpLFRbeF0pdj1UW3hdWzFdLEMrPVRbeF1bMF07ZWxzZSBmb3IoUz1SPDxDPj4+MzItTix4PVMsMzItQzxOJiYoU3w9RVt3KzFdPj4+NjQtQy1OLHg9UyksST1PLHE9MDtxPE47cSsrKWlmKEQ9Uz4+Pk4tcS0xJjEsST1EP0kucmlnaHQ6SS5sZWZ0LCEoSS5sZWZ0fHxJLnJpZ2h0KSl7dj1JLnZhbCxDPUMrcSsxO2JyZWFrfUM+PTMyJiYoQy09MzIsdysrLFI9RVt3XSksQj12LUYsbnQ/KGo+MCYmQVtrLTFdP0IrPVc6ej4wJiZBW2stX10/Qis9bHRbay1fXTpCKz1XLEImPTI1NSxsdFtrXT1CLFc9Qik6bHRba109Qn1jLnB0cj1jLnB0cisodysxKSo0KyhDPjA/NDowKX1jLnBpeGVscy5yZXN1bHRQaXhlbHM9Y3R9LGRlY29kZUJpdHM6ZnVuY3Rpb24odSxjLGwscCxkKXt7dmFyIG09Yy5oZWFkZXJJbmZvLF89bS5maWxlVmVyc2lvbixnPTAsYj1uZXcgRGF0YVZpZXcodSxjLnB0ciw1KSxUPWIuZ2V0VWludDgoMCk7ZysrO3ZhciBPPVQ+PjYsRT1PPT09MD80OjMtTyx3PShUJjMyKT4wLEM9VCYzMSxNPTA7aWYoRT09PTEpTT1iLmdldFVpbnQ4KGcpLGcrKztlbHNlIGlmKEU9PT0yKU09Yi5nZXRVaW50MTYoZywhMCksZys9MjtlbHNlIGlmKEU9PT00KU09Yi5nZXRVaW50MzIoZywhMCksZys9NDtlbHNlIHRocm93IkludmFsaWQgdmFsaWQgcGl4ZWwgY291bnQgdHlwZSI7dmFyIE49MiptLm1heFpFcnJvcixGLEksdixCLEEsUyx4LEQseixqLGs9bS5udW1EaW1zPjE/bS5tYXhWYWx1ZXNbZF06bS56TWF4O2lmKHcpe2ZvcihjLmNvdW50ZXIubHV0KyssRD1iLmdldFVpbnQ4KGcpLHo9QyxnKyssQj1NYXRoLmNlaWwoKEQtMSkqQy84KSxBPU1hdGguY2VpbChCLzQpLEk9bmV3IEFycmF5QnVmZmVyKEEqNCksdj1uZXcgVWludDhBcnJheShJKSxjLnB0cis9Zyx2LnNldChuZXcgVWludDhBcnJheSh1LGMucHRyLEIpKSx4PW5ldyBVaW50MzJBcnJheShJKSxjLnB0cis9QixqPTA7RC0xPj4+ajspaisrO0I9TWF0aC5jZWlsKE0qai84KSxBPU1hdGguY2VpbChCLzQpLEk9bmV3IEFycmF5QnVmZmVyKEEqNCksdj1uZXcgVWludDhBcnJheShJKSx2LnNldChuZXcgVWludDhBcnJheSh1LGMucHRyLEIpKSxGPW5ldyBVaW50MzJBcnJheShJKSxjLnB0cis9QixfPj0zP1M9ci51bnN0dWZmTFVUMih4LEMsRC0xLHAsTixrKTpTPXIudW5zdHVmZkxVVCh4LEMsRC0xLHAsTixrKSxfPj0zP3IudW5zdHVmZjIoRixsLGosTSxTKTpyLnVuc3R1ZmYoRixsLGosTSxTKX1lbHNlIGMuY291bnRlci5iaXRzdHVmZmVyKyssaj1DLGMucHRyKz1nLGo+MCYmKEI9TWF0aC5jZWlsKE0qai84KSxBPU1hdGguY2VpbChCLzQpLEk9bmV3IEFycmF5QnVmZmVyKEEqNCksdj1uZXcgVWludDhBcnJheShJKSx2LnNldChuZXcgVWludDhBcnJheSh1LGMucHRyLEIpKSxGPW5ldyBVaW50MzJBcnJheShJKSxjLnB0cis9QixfPj0zP3A9PW51bGw/ci5vcmlnaW5hbFVuc3R1ZmYyKEYsbCxqLE0pOnIudW5zdHVmZjIoRixsLGosTSwhMSxwLE4sayk6cD09bnVsbD9yLm9yaWdpbmFsVW5zdHVmZihGLGwsaixNKTpyLnVuc3R1ZmYoRixsLGosTSwhMSxwLE4saykpfX0scmVhZFRpbGVzOmZ1bmN0aW9uKHUsYyxsKXt2YXIgcD1jLmhlYWRlckluZm8sZD1wLndpZHRoLG09cC5oZWlnaHQsXz1wLm1pY3JvQmxvY2tTaXplLGc9cC5pbWFnZVR5cGUsYj1pLmdldERhdGFUeXBlU2l6ZShnKSxUPU1hdGguY2VpbChkL18pLE89TWF0aC5jZWlsKG0vXyk7Yy5waXhlbHMubnVtQmxvY2tzWT1PLGMucGl4ZWxzLm51bUJsb2Nrc1g9VCxjLnBpeGVscy5wdHI9MDt2YXIgRT0wLHc9MCxDPTAsTT0wLE49MCxGPTAsST0wLHY9MCxCPTAsQT0wLFM9MCx4PTAsRD0wLHo9MCxqPTAsaz0wLHEsVyxSLG50LGN0LGx0LF90PW5ldyBsKF8qXyksb3Q9bSVffHxfLHh0PWQlX3x8Xyx5dCxTdCxkdD1wLm51bURpbXMsZnQsSXQ9Yy5waXhlbHMucmVzdWx0TWFzayxWdD1jLnBpeGVscy5yZXN1bHRQaXhlbHM7Zm9yKEM9MDtDPE87QysrKWZvcihOPUMhPT1PLTE/XzpvdCxNPTA7TTxUO00rKylmb3IoRj1NIT09VC0xP186eHQsUz1DKmQqXytNKl8seD1kLUYsZnQ9MDtmdDxkdDtmdCsrKXtpZihkdD4xJiYoVnQ9bmV3IGwoYy5waXhlbHMucmVzdWx0UGl4ZWxzLmJ1ZmZlcixkKm0qZnQqYixkKm0pKSxJPXUuYnl0ZUxlbmd0aC1jLnB0cixxPW5ldyBEYXRhVmlldyh1LGMucHRyLE1hdGgubWluKDEwLEkpKSxXPXt9LGs9MCx2PXEuZ2V0VWludDgoMCksaysrLEI9dj4+NiYyNTUsQT12Pj4yJjE1LEEhPT0oTSpfPj4zJjE1KSl0aHJvdyJpbnRlZ3JpdHkgaXNzdWUiO2lmKGx0PXYmMyxsdD4zKXRocm93IGMucHRyKz1rLCJJbnZhbGlkIGJsb2NrIGVuY29kaW5nICgiK2x0KyIpIjtpZihsdD09PTIpe2MuY291bnRlci5jb25zdGFudCsrLGMucHRyKz1rO2NvbnRpbnVlfWVsc2UgaWYobHQ9PT0wKXtpZihjLmNvdW50ZXIudW5jb21wcmVzc2VkKyssYy5wdHIrPWssRD1OKkYqYix6PXUuYnl0ZUxlbmd0aC1jLnB0cixEPUQ8ej9EOnosUj1uZXcgQXJyYXlCdWZmZXIoRCViPT09MD9EOkQrYi1EJWIpLG50PW5ldyBVaW50OEFycmF5KFIpLG50LnNldChuZXcgVWludDhBcnJheSh1LGMucHRyLEQpKSxjdD1uZXcgbChSKSxqPTAsSXQpZm9yKEU9MDtFPE47RSsrKXtmb3Iodz0wO3c8Rjt3KyspSXRbU10mJihWdFtTXT1jdFtqKytdKSxTKys7Uys9eH1lbHNlIGZvcihFPTA7RTxOO0UrKyl7Zm9yKHc9MDt3PEY7dysrKVZ0W1MrK109Y3RbaisrXTtTKz14fWMucHRyKz1qKmJ9ZWxzZSBpZih5dD1pLmdldERhdGFUeXBlVXNlZChnLEIpLFN0PWkuZ2V0T25lUGl4ZWwoVyxrLHl0LHEpLGsrPWkuZ2V0RGF0YVR5cGVTaXplKHl0KSxsdD09PTMpaWYoYy5wdHIrPWssYy5jb3VudGVyLmNvbnN0YW50b2Zmc2V0KyssSXQpZm9yKEU9MDtFPE47RSsrKXtmb3Iodz0wO3c8Rjt3KyspSXRbU10mJihWdFtTXT1TdCksUysrO1MrPXh9ZWxzZSBmb3IoRT0wO0U8TjtFKyspe2Zvcih3PTA7dzxGO3crKylWdFtTKytdPVN0O1MrPXh9ZWxzZSBpZihjLnB0cis9ayxpLmRlY29kZUJpdHModSxjLF90LFN0LGZ0KSxrPTAsSXQpZm9yKEU9MDtFPE47RSsrKXtmb3Iodz0wO3c8Rjt3KyspSXRbU10mJihWdFtTXT1fdFtrKytdKSxTKys7Uys9eH1lbHNlIGZvcihFPTA7RTxOO0UrKyl7Zm9yKHc9MDt3PEY7dysrKVZ0W1MrK109X3RbaysrXTtTKz14fX19LGZvcm1hdEZpbGVJbmZvOmZ1bmN0aW9uKHUpe3JldHVybntmaWxlSWRlbnRpZmllclN0cmluZzp1LmhlYWRlckluZm8uZmlsZUlkZW50aWZpZXJTdHJpbmcsZmlsZVZlcnNpb246dS5oZWFkZXJJbmZvLmZpbGVWZXJzaW9uLGltYWdlVHlwZTp1LmhlYWRlckluZm8uaW1hZ2VUeXBlLGhlaWdodDp1LmhlYWRlckluZm8uaGVpZ2h0LHdpZHRoOnUuaGVhZGVySW5mby53aWR0aCxudW1WYWxpZFBpeGVsOnUuaGVhZGVySW5mby5udW1WYWxpZFBpeGVsLG1pY3JvQmxvY2tTaXplOnUuaGVhZGVySW5mby5taWNyb0Jsb2NrU2l6ZSxibG9iU2l6ZTp1LmhlYWRlckluZm8uYmxvYlNpemUsbWF4WkVycm9yOnUuaGVhZGVySW5mby5tYXhaRXJyb3IscGl4ZWxUeXBlOmkuZ2V0UGl4ZWxUeXBlKHUuaGVhZGVySW5mby5pbWFnZVR5cGUpLGVvZk9mZnNldDp1LmVvZk9mZnNldCxtYXNrOnUubWFzaz97bnVtQnl0ZXM6dS5tYXNrLm51bUJ5dGVzfTpudWxsLHBpeGVsczp7bnVtQmxvY2tzWDp1LnBpeGVscy5udW1CbG9ja3NYLG51bUJsb2Nrc1k6dS5waXhlbHMubnVtQmxvY2tzWSxtYXhWYWx1ZTp1LmhlYWRlckluZm8uek1heCxtaW5WYWx1ZTp1LmhlYWRlckluZm8uek1pbixub0RhdGFWYWx1ZTp1Lm5vRGF0YVZhbHVlfX19LGNvbnN0cnVjdENvbnN0YW50U3VyZmFjZTpmdW5jdGlvbih1KXt2YXIgYz11LmhlYWRlckluZm8uek1heCxsPXUuaGVhZGVySW5mby5udW1EaW1zLHA9dS5oZWFkZXJJbmZvLmhlaWdodCp1LmhlYWRlckluZm8ud2lkdGgsZD1wKmwsbT0wLF89MCxnPTAsYj11LnBpeGVscy5yZXN1bHRNYXNrO2lmKGIpaWYobD4xKWZvcihtPTA7bTxsO20rKylmb3IoZz1tKnAsXz0wO188cDtfKyspYltfXSYmKHUucGl4ZWxzLnJlc3VsdFBpeGVsc1tnK19dPWMpO2Vsc2UgZm9yKF89MDtfPHA7XysrKWJbX10mJih1LnBpeGVscy5yZXN1bHRQaXhlbHNbX109Yyk7ZWxzZSBpZih1LnBpeGVscy5yZXN1bHRQaXhlbHMuZmlsbCl1LnBpeGVscy5yZXN1bHRQaXhlbHMuZmlsbChjKTtlbHNlIGZvcihfPTA7XzxkO18rKyl1LnBpeGVscy5yZXN1bHRQaXhlbHNbX109Y30sZ2V0RGF0YVR5cGVBcnJheTpmdW5jdGlvbih1KXt2YXIgYztzd2l0Y2godSl7Y2FzZSAwOmM9SW50OEFycmF5O2JyZWFrO2Nhc2UgMTpjPVVpbnQ4QXJyYXk7YnJlYWs7Y2FzZSAyOmM9SW50MTZBcnJheTticmVhaztjYXNlIDM6Yz1VaW50MTZBcnJheTticmVhaztjYXNlIDQ6Yz1JbnQzMkFycmF5O2JyZWFrO2Nhc2UgNTpjPVVpbnQzMkFycmF5O2JyZWFrO2Nhc2UgNjpjPUZsb2F0MzJBcnJheTticmVhaztjYXNlIDc6Yz1GbG9hdDY0QXJyYXk7YnJlYWs7ZGVmYXVsdDpjPUZsb2F0MzJBcnJheX1yZXR1cm4gY30sZ2V0UGl4ZWxUeXBlOmZ1bmN0aW9uKHUpe3ZhciBjO3N3aXRjaCh1KXtjYXNlIDA6Yz0iUzgiO2JyZWFrO2Nhc2UgMTpjPSJVOCI7YnJlYWs7Y2FzZSAyOmM9IlMxNiI7YnJlYWs7Y2FzZSAzOmM9IlUxNiI7YnJlYWs7Y2FzZSA0OmM9IlMzMiI7YnJlYWs7Y2FzZSA1OmM9IlUzMiI7YnJlYWs7Y2FzZSA2OmM9IkYzMiI7YnJlYWs7Y2FzZSA3OmM9IkY2NCI7YnJlYWs7ZGVmYXVsdDpjPSJGMzIifXJldHVybiBjfSxpc1ZhbGlkUGl4ZWxWYWx1ZTpmdW5jdGlvbih1LGMpe2lmKGM9PW51bGwpcmV0dXJuITE7dmFyIGw7c3dpdGNoKHUpe2Nhc2UgMDpsPWM+PS0xMjgmJmM8PTEyNzticmVhaztjYXNlIDE6bD1jPj0wJiZjPD0yNTU7YnJlYWs7Y2FzZSAyOmw9Yz49LTMyNzY4JiZjPD0zMjc2NzticmVhaztjYXNlIDM6bD1jPj0wJiZjPD02NTUzNjticmVhaztjYXNlIDQ6bD1jPj0tMjE0NzQ4MzY0OCYmYzw9MjE0NzQ4MzY0NzticmVhaztjYXNlIDU6bD1jPj0wJiZjPD00Mjk0OTY3Mjk2O2JyZWFrO2Nhc2UgNjpsPWM+PS0zNDAyNzk5OTM4NzkwMTQ4NGUyMiYmYzw9MzQwMjc5OTkzODc5MDE0ODRlMjI7YnJlYWs7Y2FzZSA3Omw9Yz49NWUtMzI0JiZjPD0xNzk3NjkzMTM0ODYyMzE1N2UyOTI7YnJlYWs7ZGVmYXVsdDpsPSExfXJldHVybiBsfSxnZXREYXRhVHlwZVNpemU6ZnVuY3Rpb24odSl7dmFyIGM9MDtzd2l0Y2godSl7Y2FzZSAwOmNhc2UgMTpjPTE7YnJlYWs7Y2FzZSAyOmNhc2UgMzpjPTI7YnJlYWs7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Yz00O2JyZWFrO2Nhc2UgNzpjPTg7YnJlYWs7ZGVmYXVsdDpjPXV9cmV0dXJuIGN9LGdldERhdGFUeXBlVXNlZDpmdW5jdGlvbih1LGMpe3ZhciBsPXU7c3dpdGNoKHUpe2Nhc2UgMjpjYXNlIDQ6bD11LWM7YnJlYWs7Y2FzZSAzOmNhc2UgNTpsPXUtMipjO2JyZWFrO2Nhc2UgNjpjPT09MD9sPXU6Yz09PTE/bD0yOmw9MTticmVhaztjYXNlIDc6Yz09PTA/bD11Omw9dS0yKmMrMTticmVhaztkZWZhdWx0Omw9dTticmVha31yZXR1cm4gbH0sZ2V0T25lUGl4ZWw6ZnVuY3Rpb24odSxjLGwscCl7dmFyIGQ9MDtzd2l0Y2gobCl7Y2FzZSAwOmQ9cC5nZXRJbnQ4KGMpO2JyZWFrO2Nhc2UgMTpkPXAuZ2V0VWludDgoYyk7YnJlYWs7Y2FzZSAyOmQ9cC5nZXRJbnQxNihjLCEwKTticmVhaztjYXNlIDM6ZD1wLmdldFVpbnQxNihjLCEwKTticmVhaztjYXNlIDQ6ZD1wLmdldEludDMyKGMsITApO2JyZWFrO2Nhc2UgNTpkPXAuZ2V0VUludDMyKGMsITApO2JyZWFrO2Nhc2UgNjpkPXAuZ2V0RmxvYXQzMihjLCEwKTticmVhaztjYXNlIDc6ZD1wLmdldEZsb2F0NjQoYywhMCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJ0aGUgZGVjb2RlciBkb2VzIG5vdCB1bmRlcnN0YW5kIHRoaXMgcGl4ZWwgdHlwZSJ9cmV0dXJuIGR9fSxzPWZ1bmN0aW9uKHUsYyxsKXt0aGlzLnZhbD11LHRoaXMubGVmdD1jLHRoaXMucmlnaHQ9bH0sZj17ZGVjb2RlOmZ1bmN0aW9uKHUsYyl7Yz1jfHx7fTt2YXIgbD1jLm5vRGF0YVZhbHVlLHA9MCxkPXt9O2lmKGQucHRyPWMuaW5wdXRPZmZzZXR8fDAsZC5waXhlbHM9e30sISFpLnJlYWRIZWFkZXJJbmZvKHUsZCkpe3ZhciBtPWQuaGVhZGVySW5mbyxfPW0uZmlsZVZlcnNpb24sZz1pLmdldERhdGFUeXBlQXJyYXkobS5pbWFnZVR5cGUpO2kucmVhZE1hc2sodSxkKSxtLm51bVZhbGlkUGl4ZWwhPT1tLndpZHRoKm0uaGVpZ2h0JiYhZC5waXhlbHMucmVzdWx0TWFzayYmKGQucGl4ZWxzLnJlc3VsdE1hc2s9Yy5tYXNrRGF0YSk7dmFyIGI9bS53aWR0aCptLmhlaWdodDtpZihkLnBpeGVscy5yZXN1bHRQaXhlbHM9bmV3IGcoYiptLm51bURpbXMpLGQuY291bnRlcj17b25lc3dlZXA6MCx1bmNvbXByZXNzZWQ6MCxsdXQ6MCxiaXRzdHVmZmVyOjAsY29uc3RhbnQ6MCxjb25zdGFudG9mZnNldDowfSxtLm51bVZhbGlkUGl4ZWwhPT0wKWlmKG0uek1heD09PW0uek1pbilpLmNvbnN0cnVjdENvbnN0YW50U3VyZmFjZShkKTtlbHNlIGlmKF8+PTQmJmkuY2hlY2tNaW5NYXhSYW5nZXModSxkKSlpLmNvbnN0cnVjdENvbnN0YW50U3VyZmFjZShkKTtlbHNle3ZhciBUPW5ldyBEYXRhVmlldyh1LGQucHRyLDIpLE89VC5nZXRVaW50OCgwKTtpZihkLnB0cisrLE8paS5yZWFkRGF0YU9uZVN3ZWVwKHUsZCxnKTtlbHNlIGlmKF8+MSYmbS5pbWFnZVR5cGU8PTEmJk1hdGguYWJzKG0ubWF4WkVycm9yLS41KTwxZS01KXt2YXIgRT1ULmdldFVpbnQ4KDEpO2lmKGQucHRyKyssZC5lbmNvZGVNb2RlPUUsRT4yfHxfPDQmJkU+MSl0aHJvdyJJbnZhbGlkIEh1ZmZtYW4gZmxhZyAiK0U7RT9pLnJlYWRIdWZmbWFuKHUsZCxnKTppLnJlYWRUaWxlcyh1LGQsZyl9ZWxzZSBpLnJlYWRUaWxlcyh1LGQsZyl9ZC5lb2ZPZmZzZXQ9ZC5wdHI7dmFyIHc7Yy5pbnB1dE9mZnNldD8odz1kLmhlYWRlckluZm8uYmxvYlNpemUrYy5pbnB1dE9mZnNldC1kLnB0cixNYXRoLmFicyh3KT49MSYmKGQuZW9mT2Zmc2V0PWMuaW5wdXRPZmZzZXQrZC5oZWFkZXJJbmZvLmJsb2JTaXplKSk6KHc9ZC5oZWFkZXJJbmZvLmJsb2JTaXplLWQucHRyLE1hdGguYWJzKHcpPj0xJiYoZC5lb2ZPZmZzZXQ9ZC5oZWFkZXJJbmZvLmJsb2JTaXplKSk7dmFyIEM9e3dpZHRoOm0ud2lkdGgsaGVpZ2h0Om0uaGVpZ2h0LHBpeGVsRGF0YTpkLnBpeGVscy5yZXN1bHRQaXhlbHMsbWluVmFsdWU6bS56TWluLG1heFZhbHVlOm0uek1heCx2YWxpZFBpeGVsQ291bnQ6bS5udW1WYWxpZFBpeGVsLGRpbUNvdW50Om0ubnVtRGltcyxkaW1TdGF0czp7bWluVmFsdWVzOm0ubWluVmFsdWVzLG1heFZhbHVlczptLm1heFZhbHVlc30sbWFza0RhdGE6ZC5waXhlbHMucmVzdWx0TWFza307aWYoZC5waXhlbHMucmVzdWx0TWFzayYmaS5pc1ZhbGlkUGl4ZWxWYWx1ZShtLmltYWdlVHlwZSxsKSl7dmFyIE09ZC5waXhlbHMucmVzdWx0TWFzaztmb3IocD0wO3A8YjtwKyspTVtwXXx8KEMucGl4ZWxEYXRhW3BdPWwpO0Mubm9EYXRhVmFsdWU9bH1yZXR1cm4gZC5ub0RhdGFWYWx1ZT1sLGMucmV0dXJuRmlsZUluZm8mJihDLmZpbGVJbmZvPWkuZm9ybWF0RmlsZUluZm8oZCkpLEN9fSxnZXRCYW5kQ291bnQ6ZnVuY3Rpb24odSl7dmFyIGM9MCxsPTAscD17fTtmb3IocC5wdHI9MCxwLnBpeGVscz17fTtsPHUuYnl0ZUxlbmd0aC01ODspaS5yZWFkSGVhZGVySW5mbyh1LHApLGwrPXAuaGVhZGVySW5mby5ibG9iU2l6ZSxjKysscC5wdHI9bDtyZXR1cm4gY319O3JldHVybiBmfSgpLG49ZnVuY3Rpb24oKXt2YXIgcj1uZXcgQXJyYXlCdWZmZXIoNCksaT1uZXcgVWludDhBcnJheShyKSxzPW5ldyBVaW50MzJBcnJheShyKTtyZXR1cm4gc1swXT0xLGlbMF09PT0xfSgpLG89e2RlY29kZTpmdW5jdGlvbihyLGkpe2lmKCFuKXRocm93IkJpZyBlbmRpYW4gc3lzdGVtIGlzIG5vdCBzdXBwb3J0ZWQuIjtpPWl8fHt9O3ZhciBzPWkuaW5wdXRPZmZzZXR8fDAsZj1uZXcgVWludDhBcnJheShyLHMsMTApLHU9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGYpLGMsbDtpZih1LnRyaW0oKT09PSJDbnRaSW1hZ2UiKWM9dCxsPTE7ZWxzZSBpZih1LnN1YnN0cmluZygwLDUpPT09IkxlcmMyIiljPWUsbD0yO2Vsc2UgdGhyb3ciVW5leHBlY3RlZCBmaWxlIGlkZW50aWZpZXIgc3RyaW5nOiAiK3U7Zm9yKHZhciBwPTAsZD1yLmJ5dGVMZW5ndGgtMTAsbSxfPVtdLGcsYixUPXt3aWR0aDowLGhlaWdodDowLHBpeGVsczpbXSxwaXhlbFR5cGU6aS5waXhlbFR5cGUsbWFzazpudWxsLHN0YXRpc3RpY3M6W119O3M8ZDspe3ZhciBPPWMuZGVjb2RlKHIse2lucHV0T2Zmc2V0OnMsZW5jb2RlZE1hc2tEYXRhOm0sbWFza0RhdGE6YixyZXR1cm5NYXNrOnA9PT0wLHJldHVybkVuY29kZWRNYXNrOnA9PT0wLHJldHVybkZpbGVJbmZvOiEwLHBpeGVsVHlwZTppLnBpeGVsVHlwZXx8bnVsbCxub0RhdGFWYWx1ZTppLm5vRGF0YVZhbHVlfHxudWxsfSk7cz1PLmZpbGVJbmZvLmVvZk9mZnNldCxwPT09MCYmKG09Ty5lbmNvZGVkTWFza0RhdGEsYj1PLm1hc2tEYXRhLFQud2lkdGg9Ty53aWR0aCxULmhlaWdodD1PLmhlaWdodCxULmRpbUNvdW50PU8uZGltQ291bnR8fDEsVC5waXhlbFR5cGU9Ty5waXhlbFR5cGV8fE8uZmlsZUluZm8ucGl4ZWxUeXBlLFQubWFzaz1PLm1hc2tEYXRhKSxsPjEmJk8uZmlsZUluZm8ubWFzayYmTy5maWxlSW5mby5tYXNrLm51bUJ5dGVzPjAmJl8ucHVzaChPLm1hc2tEYXRhKSxwKyssVC5waXhlbHMucHVzaChPLnBpeGVsRGF0YSksVC5zdGF0aXN0aWNzLnB1c2goe21pblZhbHVlOk8ubWluVmFsdWUsbWF4VmFsdWU6Ty5tYXhWYWx1ZSxub0RhdGFWYWx1ZTpPLm5vRGF0YVZhbHVlLGRpbVN0YXRzOk8uZGltU3RhdHN9KX12YXIgRSx3LEM7aWYobD4xJiZfLmxlbmd0aD4xKXtmb3IoQz1ULndpZHRoKlQuaGVpZ2h0LFQuYmFuZE1hc2tzPV8sYj1uZXcgVWludDhBcnJheShDKSxiLnNldChfWzBdKSxFPTE7RTxfLmxlbmd0aDtFKyspZm9yKGc9X1tFXSx3PTA7dzxDO3crKyliW3ddPWJbd10mZ1t3XTtULm1hc2tEYXRhPWJ9cmV0dXJuIFR9fTt0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShbXSxmdW5jdGlvbigpe3JldHVybiBvfSk6dHlwZW9mICRkPCJ1IiYmJGQuZXhwb3J0cz8kZC5leHBvcnRzPW86dGhpcy5MZXJjPW99KSgpfSk7dmFyIHVnPXt9O3BlKHVnLHtkZWZhdWx0OigpPT5tVX0pO2Z1bmN0aW9uIGRVKHQsZSl7aWYodC5lbmNvZGluZz09PVlSLkxFUkMpe2xldCByO3RyeXtyPXQyLmRlZmF1bHQuZGVjb2RlKHQuaGVpZ2h0bWFwKX1jYXRjaChzKXt0aHJvdyBuZXcgQWUocyl9aWYoci5zdGF0aXN0aWNzWzBdLm1pblZhbHVlPT09TnVtYmVyLk1BWF9WQUxVRSl0aHJvdyBuZXcgQWUoIkludmFsaWQgdGlsZSBkYXRhIik7dC5oZWlnaHRtYXA9ci5waXhlbHNbMF0sdC53aWR0aD1yLndpZHRoLHQuaGVpZ2h0PXIuaGVpZ2h0fXQuZWxsaXBzb2lkPVkuY2xvbmUodC5lbGxpcHNvaWQpLHQucmVjdGFuZ2xlPU10LmNsb25lKHQucmVjdGFuZ2xlKTtsZXQgbj1aUi5jb21wdXRlVmVydGljZXModCksbz1uLnZlcnRpY2VzO3JldHVybiBlLnB1c2goby5idWZmZXIpLHt2ZXJ0aWNlczpvLmJ1ZmZlcixudW1iZXJPZkF0dHJpYnV0ZXM6bi5lbmNvZGluZy5zdHJpZGUsbWluaW11bUhlaWdodDpuLm1pbmltdW1IZWlnaHQsbWF4aW11bUhlaWdodDpuLm1heGltdW1IZWlnaHQsZ3JpZFdpZHRoOnQud2lkdGgsZ3JpZEhlaWdodDp0LmhlaWdodCxib3VuZGluZ1NwaGVyZTNEOm4uYm91bmRpbmdTcGhlcmUzRCxvcmllbnRlZEJvdW5kaW5nQm94Om4ub3JpZW50ZWRCb3VuZGluZ0JveCxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTpuLm9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlLGVuY29kaW5nOm4uZW5jb2Rpbmcsd2VzdEluZGljZXNTb3V0aFRvTm9ydGg6bi53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aCxzb3V0aEluZGljZXNFYXN0VG9XZXN0Om4uc291dGhJbmRpY2VzRWFzdFRvV2VzdCxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDpuLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6bi5ub3J0aEluZGljZXNXZXN0VG9FYXN0fX12YXIgdDIsbVUsbGc9JCgoKT0+eyR0KCk7JFIoKTtRUigpO3duKCk7SnIoKTt0Mj1kcihKUigpLDEpO3NvKCk7bVU9UWUoZFUpfSk7ZnVuY3Rpb24ga28oKXtMLnRocm93SW5zdGFudGlhdGlvbkVycm9yKCl9ZnVuY3Rpb24gcjIodCxlKXtsZXQgbj1uZXcgQXJyYXkoZSksbz1uZXcgQXJyYXkodCkscj1uZXcgQXJyYXkoZSksaT1uZXcgQXJyYXkodCkscztmb3Iocz0wO3M8dDsrK3MpaVtzXT1zLG9bc109dCplLTEtcztmb3Iocz0wO3M8ZTsrK3MpcltzXT0ocysxKSp0LTEsbltzXT0oZS1zLTEpKnQ7cmV0dXJue3dlc3RJbmRpY2VzU291dGhUb05vcnRoOm4sc291dGhJbmRpY2VzRWFzdFRvV2VzdDpvLGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOnIsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDppfX1mdW5jdGlvbiBpMih0LGUsbixvKXtsZXQgcj0wO2ZvcihsZXQgaT0wO2k8ZS0xOysraSl7Zm9yKGxldCBzPTA7czx0LTE7KytzKXtsZXQgZj1yLHU9Zit0LGM9dSsxLGw9ZisxO25bbysrXT1mLG5bbysrXT11LG5bbysrXT1sLG5bbysrXT1sLG5bbysrXT11LG5bbysrXT1jLCsrcn0rK3J9fWZ1bmN0aW9uIFpkKHQsZSxuLG8pe2xldCByPXRbMF0saT10Lmxlbmd0aDtmb3IobGV0IHM9MTtzPGk7KytzKXtsZXQgZj10W3NdO25bbysrXT1yLG5bbysrXT1mLG5bbysrXT1lLG5bbysrXT1lLG5bbysrXT1mLG5bbysrXT1lKzEscj1mLCsrZX1yZXR1cm4gb312YXIgZTIsbjIsbzIsczIsYzI9JCgoKT0+e2F0KCk7anQoKTskZSgpO0t0KCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoa28ucHJvdG90eXBlLHtlcnJvckV2ZW50OntnZXQ6TC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0sY3JlZGl0OntnZXQ6TC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0sdGlsaW5nU2NoZW1lOntnZXQ6TC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0saGFzV2F0ZXJNYXNrOntnZXQ6TC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0saGFzVmVydGV4Tm9ybWFsczp7Z2V0OkwudGhyb3dJbnN0YW50aWF0aW9uRXJyb3J9LGF2YWlsYWJpbGl0eTp7Z2V0OkwudGhyb3dJbnN0YW50aWF0aW9uRXJyb3J9fSk7ZTI9W107a28uZ2V0UmVndWxhckdyaWRJbmRpY2VzPWZ1bmN0aW9uKHQsZSl7aWYodCplPj1QLkZPVVJfR0lHQUJZVEVTKXRocm93IG5ldyBMKCJUaGUgdG90YWwgbnVtYmVyIG9mIHZlcnRpY2VzICh3aWR0aCAqIGhlaWdodCkgbXVzdCBiZSBsZXNzIHRoYW4gNCwyOTQsOTY3LDI5Ni4iKTtsZXQgbj1lMlt0XTtoKG4pfHwoZTJbdF09bj1bXSk7bGV0IG89bltlXTtyZXR1cm4gaChvKXx8KHQqZTxQLlNJWFRZX0ZPVVJfS0lMT0JZVEVTP289bltlXT1uZXcgVWludDE2QXJyYXkoKHQtMSkqKGUtMSkqNik6bz1uW2VdPW5ldyBVaW50MzJBcnJheSgodC0xKSooZS0xKSo2KSxpMih0LGUsbywwKSksb307bjI9W107a28uZ2V0UmVndWxhckdyaWRJbmRpY2VzQW5kRWRnZUluZGljZXM9ZnVuY3Rpb24odCxlKXtpZih0KmU+PVAuRk9VUl9HSUdBQllURVMpdGhyb3cgbmV3IEwoIlRoZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXMgKHdpZHRoICogaGVpZ2h0KSBtdXN0IGJlIGxlc3MgdGhhbiA0LDI5NCw5NjcsMjk2LiIpO2xldCBuPW4yW3RdO2gobil8fChuMlt0XT1uPVtdKTtsZXQgbz1uW2VdO2lmKCFoKG8pKXtsZXQgcj1rby5nZXRSZWd1bGFyR3JpZEluZGljZXModCxlKSxpPXIyKHQsZSkscz1pLndlc3RJbmRpY2VzU291dGhUb05vcnRoLGY9aS5zb3V0aEluZGljZXNFYXN0VG9XZXN0LHU9aS5lYXN0SW5kaWNlc05vcnRoVG9Tb3V0aCxjPWkubm9ydGhJbmRpY2VzV2VzdFRvRWFzdDtvPW5bZV09e2luZGljZXM6cix3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpzLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6ZixlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDp1LG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6Y319cmV0dXJuIG99O28yPVtdO2tvLmdldFJlZ3VsYXJHcmlkQW5kU2tpcnRJbmRpY2VzQW5kRWRnZUluZGljZXM9ZnVuY3Rpb24odCxlKXtpZih0KmU+PVAuRk9VUl9HSUdBQllURVMpdGhyb3cgbmV3IEwoIlRoZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXMgKHdpZHRoICogaGVpZ2h0KSBtdXN0IGJlIGxlc3MgdGhhbiA0LDI5NCw5NjcsMjk2LiIpO2xldCBuPW8yW3RdO2gobil8fChvMlt0XT1uPVtdKTtsZXQgbz1uW2VdO2lmKCFoKG8pKXtsZXQgcj10KmUsaT0odC0xKSooZS0xKSo2LHM9dCoyK2UqMixmPU1hdGgubWF4KDAscy00KSo2LHU9citzLGM9aStmLGw9cjIodCxlKSxwPWwud2VzdEluZGljZXNTb3V0aFRvTm9ydGgsZD1sLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QsbT1sLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLF89bC5ub3J0aEluZGljZXNXZXN0VG9FYXN0LGc9RnQuY3JlYXRlVHlwZWRBcnJheSh1LGMpO2kyKHQsZSxnLDApLGtvLmFkZFNraXJ0SW5kaWNlcyhwLGQsbSxfLHIsZyxpKSxvPW5bZV09e2luZGljZXM6Zyx3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpwLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6ZCxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDptLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6XyxpbmRleENvdW50V2l0aG91dFNraXJ0czppfX1yZXR1cm4gb307a28uYWRkU2tpcnRJbmRpY2VzPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMpe2xldCBmPXI7cz1aZCh0LGYsaSxzKSxmKz10Lmxlbmd0aCxzPVpkKGUsZixpLHMpLGYrPWUubGVuZ3RoLHM9WmQobixmLGkscyksZis9bi5sZW5ndGgsWmQobyxmLGkscyl9O2tvLmhlaWdodG1hcFRlcnJhaW5RdWFsaXR5PS4yNTtrby5nZXRFc3RpbWF0ZWRMZXZlbFplcm9HZW9tZXRyaWNFcnJvckZvckFIZWlnaHRtYXA9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lm1heGltdW1SYWRpdXMqMipNYXRoLlBJKmtvLmhlaWdodG1hcFRlcnJhaW5RdWFsaXR5LyhlKm4pfTtrby5wcm90b3R5cGUucmVxdWVzdFRpbGVHZW9tZXRyeT1MLnRocm93SW5zdGFudGlhdGlvbkVycm9yO2tvLnByb3RvdHlwZS5nZXRMZXZlbE1heGltdW1HZW9tZXRyaWNFcnJvcj1MLnRocm93SW5zdGFudGlhdGlvbkVycm9yO2tvLnByb3RvdHlwZS5nZXRUaWxlRGF0YUF2YWlsYWJsZT1MLnRocm93SW5zdGFudGlhdGlvbkVycm9yO2tvLnByb3RvdHlwZS5sb2FkVGlsZURhdGFBdmFpbGFiaWxpdHk9TC50aHJvd0luc3RhbnRpYXRpb25FcnJvcjtzMj1rb30pO3ZhciBkZz17fTtwZShkZyx7ZGVmYXVsdDooKT0+Z1V9KTtmdW5jdGlvbiB5VSh0LGUpe2xldCBuPXQucXVhbnRpemVkVmVydGljZXMsbz1uLmxlbmd0aC8zLHI9dC5vY3RFbmNvZGVkTm9ybWFscyxpPXQud2VzdEluZGljZXMubGVuZ3RoK3QuZWFzdEluZGljZXMubGVuZ3RoK3Quc291dGhJbmRpY2VzLmxlbmd0aCt0Lm5vcnRoSW5kaWNlcy5sZW5ndGgscz10LmluY2x1ZGVXZWJNZXJjYXRvclQsZj10LmV4YWdnZXJhdGlvbix1PXQuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQsbD1mIT09MSxwPU10LmNsb25lKHQucmVjdGFuZ2xlKSxkPXAud2VzdCxtPXAuc291dGgsXz1wLmVhc3QsZz1wLm5vcnRoLGI9WS5jbG9uZSh0LmVsbGlwc29pZCksVD10Lm1pbmltdW1IZWlnaHQsTz10Lm1heGltdW1IZWlnaHQsRT10LnJlbGF0aXZlVG9DZW50ZXIsdz1Yby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShFLGIpLEM9aXQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKHcsbmV3IGl0KSxNLE47cyYmKE09bm8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShtKSxOPTEvKG5vLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoZyktTSkpO2xldCBGPW4uc3ViYXJyYXkoMCxvKSxJPW4uc3ViYXJyYXkobywyKm8pLHY9bi5zdWJhcnJheShvKjIsMypvKSxCPWgociksQT1uZXcgQXJyYXkobyksUz1uZXcgQXJyYXkobykseD1uZXcgQXJyYXkobyksRD1zP25ldyBBcnJheShvKTpbXSx6PWw/bmV3IEFycmF5KG8pOltdLGo9aFU7ai54PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxqLnk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGouej1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7bGV0IGs9X1U7ay54PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxrLnk9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGsuej1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7bGV0IHE9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFc9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFI9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG50PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IobGV0IFl0PTA7WXQ8bzsrK1l0KXtsZXQgVmU9RltZdF0sZG49SVtZdF0sc249VmUvcGcsbW49ZG4vcGcsZm89UC5sZXJwKFQsTyx2W1l0XS9wZyk7Wm4ubG9uZ2l0dWRlPVAubGVycChkLF8sc24pLFpuLmxhdGl0dWRlPVAubGVycChtLGcsbW4pLFpuLmhlaWdodD1mbyxxPU1hdGgubWluKFpuLmxvbmdpdHVkZSxxKSxXPU1hdGgubWF4KFpuLmxvbmdpdHVkZSxXKSxSPU1hdGgubWluKFpuLmxhdGl0dWRlLFIpLG50PU1hdGgubWF4KFpuLmxhdGl0dWRlLG50KTtsZXQgSG49Yi5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihabik7QVtZdF09bmV3IEooc24sbW4pLFNbWXRdPWZvLHhbWXRdPUhuLHMmJihEW1l0XT0obm8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShabi5sYXRpdHVkZSktTSkqTiksbCYmKHpbWXRdPWIuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEhuKSksaXQubXVsdGlwbHlCeVBvaW50KEMsSG4sZnUpLGEubWluaW11bUJ5Q29tcG9uZW50KGZ1LGosaiksYS5tYXhpbXVtQnlDb21wb25lbnQoZnUsayxrKX1sZXQgY3Q9dG0odC53ZXN0SW5kaWNlcyxmdW5jdGlvbihZdCxWZSl7cmV0dXJuIEFbWXRdLnktQVtWZV0ueX0pLGx0PXRtKHQuZWFzdEluZGljZXMsZnVuY3Rpb24oWXQsVmUpe3JldHVybiBBW1ZlXS55LUFbWXRdLnl9KSxfdD10bSh0LnNvdXRoSW5kaWNlcyxmdW5jdGlvbihZdCxWZSl7cmV0dXJuIEFbVmVdLngtQVtZdF0ueH0pLG90PXRtKHQubm9ydGhJbmRpY2VzLGZ1bmN0aW9uKFl0LFZlKXtyZXR1cm4gQVtZdF0ueC1BW1ZlXS54fSkseHQ7VDwwJiYoeHQ9bmV3IHhzKGIpLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50UG9zc2libHlVbmRlckVsbGlwc29pZChFLHgsVCkpO2xldCB5dD1UO3l0PU1hdGgubWluKHl0LFFkKHQud2VzdEluZGljZXMsdC53ZXN0U2tpcnRIZWlnaHQsUyxBLHAsYixDLGosaykpLHl0PU1hdGgubWluKHl0LFFkKHQuc291dGhJbmRpY2VzLHQuc291dGhTa2lydEhlaWdodCxTLEEscCxiLEMsaixrKSkseXQ9TWF0aC5taW4oeXQsUWQodC5lYXN0SW5kaWNlcyx0LmVhc3RTa2lydEhlaWdodCxTLEEscCxiLEMsaixrKSkseXQ9TWF0aC5taW4oeXQsUWQodC5ub3J0aEluZGljZXMsdC5ub3J0aFNraXJ0SGVpZ2h0LFMsQSxwLGIsQyxqLGspKTtsZXQgU3Q9bmV3IExpKGosayxFKSxkdD1uZXcgUHMoRSxTdCx5dCxPLHcsQixzLGwsZix1KSxmdD1kdC5zdHJpZGUsSXQ9bypmdCtpKmZ0LFZ0PW5ldyBGbG9hdDMyQXJyYXkoSXQpLGRlPTA7Zm9yKGxldCBZdD0wO1l0PG87KytZdCl7aWYoQil7bGV0IFZlPVl0KjI7VWEueD1yW1ZlXSxVYS55PXJbVmUrMV19ZGU9ZHQuZW5jb2RlKFZ0LGRlLHhbWXRdLEFbWXRdLFNbWXRdLFVhLERbWXRdLHpbWXRdKX1sZXQgc2U9TWF0aC5tYXgoMCwoaS00KSoyKSxsZT10LmluZGljZXMubGVuZ3RoK3NlKjMsZmU9RnQuY3JlYXRlVHlwZWRBcnJheShvK2ksbGUpO2ZlLnNldCh0LmluZGljZXMsMCk7bGV0IFp0PTFlLTQsUXQ9KFctcSkqWnQsTmU9KG50LVIpKlp0LGdlPS1RdCxFZT0wLHVuPVF0LEdlPTAsYmU9MCxsbj1OZSxwbj0wLEVuPS1OZSxvZT1vKmZ0O3JldHVybiBKZChWdCxvZSxjdCxkdCxTLEEscixiLHAsdC53ZXN0U2tpcnRIZWlnaHQsTSxOLGdlLEVlKSxvZSs9dC53ZXN0SW5kaWNlcy5sZW5ndGgqZnQsSmQoVnQsb2UsX3QsZHQsUyxBLHIsYixwLHQuc291dGhTa2lydEhlaWdodCxNLE4scG4sRW4pLG9lKz10LnNvdXRoSW5kaWNlcy5sZW5ndGgqZnQsSmQoVnQsb2UsbHQsZHQsUyxBLHIsYixwLHQuZWFzdFNraXJ0SGVpZ2h0LE0sTix1bixHZSksb2UrPXQuZWFzdEluZGljZXMubGVuZ3RoKmZ0LEpkKFZ0LG9lLG90LGR0LFMsQSxyLGIscCx0Lm5vcnRoU2tpcnRIZWlnaHQsTSxOLGJlLGxuKSxzMi5hZGRTa2lydEluZGljZXMoY3QsX3QsbHQsb3QsbyxmZSx0LmluZGljZXMubGVuZ3RoKSxlLnB1c2goVnQuYnVmZmVyLGZlLmJ1ZmZlcikse3ZlcnRpY2VzOlZ0LmJ1ZmZlcixpbmRpY2VzOmZlLmJ1ZmZlcix3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpjdCxzb3V0aEluZGljZXNFYXN0VG9XZXN0Ol90LGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOmx0LG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6b3QsdmVydGV4U3RyaWRlOmZ0LGNlbnRlcjpFLG1pbmltdW1IZWlnaHQ6VCxtYXhpbXVtSGVpZ2h0Ok8sb2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2U6eHQsZW5jb2Rpbmc6ZHQsaW5kZXhDb3VudFdpdGhvdXRTa2lydHM6dC5pbmRpY2VzLmxlbmd0aH19ZnVuY3Rpb24gUWQodCxlLG4sbyxyLGkscyxmLHUpe2xldCBjPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxsPXIubm9ydGgscD1yLnNvdXRoLGQ9ci5lYXN0LG09ci53ZXN0O2Q8bSYmKGQrPVAuVFdPX1BJKTtsZXQgXz10Lmxlbmd0aDtmb3IobGV0IGc9MDtnPF87KytnKXtsZXQgYj10W2ddLFQ9bltiXSxPPW9bYl07Wm4ubG9uZ2l0dWRlPVAubGVycChtLGQsTy54KSxabi5sYXRpdHVkZT1QLmxlcnAocCxsLE8ueSksWm4uaGVpZ2h0PVQtZTtsZXQgRT1pLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFpuLGZ1KTtpdC5tdWx0aXBseUJ5UG9pbnQocyxFLEUpLGEubWluaW11bUJ5Q29tcG9uZW50KEUsZixmKSxhLm1heGltdW1CeUNvbXBvbmVudChFLHUsdSksYz1NYXRoLm1pbihjLFpuLmhlaWdodCl9cmV0dXJuIGN9ZnVuY3Rpb24gSmQodCxlLG4sbyxyLGkscyxmLHUsYyxsLHAsZCxtKXtsZXQgXz1oKHMpLGc9dS5ub3J0aCxiPXUuc291dGgsVD11LmVhc3QsTz11Lndlc3Q7VDxPJiYoVCs9UC5UV09fUEkpO2xldCBFPW4ubGVuZ3RoO2ZvcihsZXQgdz0wO3c8RTsrK3cpe2xldCBDPW5bd10sTT1yW0NdLE49aVtDXTtabi5sb25naXR1ZGU9UC5sZXJwKE8sVCxOLngpK2QsWm4ubGF0aXR1ZGU9UC5sZXJwKGIsZyxOLnkpK20sWm4uaGVpZ2h0PU0tYztsZXQgRj1mLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFpuLGZ1KTtpZihfKXtsZXQgQj1DKjI7VWEueD1zW0JdLFVhLnk9c1tCKzFdfWxldCBJO28uaGFzV2ViTWVyY2F0b3JUJiYoST0obm8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShabi5sYXRpdHVkZSktbCkqcCk7bGV0IHY7by5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzJiYodj1mLmdlb2RldGljU3VyZmFjZU5vcm1hbChGKSksZT1vLmVuY29kZSh0LGUsRixOLFpuLmhlaWdodCxVYSxJLHYpfX1mdW5jdGlvbiB0bSh0LGUpe2xldCBuO3JldHVybiB0eXBlb2YgdC5zbGljZT09ImZ1bmN0aW9uIiYmKG49dC5zbGljZSgpLHR5cGVvZiBuLnNvcnQhPSJmdW5jdGlvbiImJihuPXZvaWQgMCkpLGgobil8fChuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKSxuLnNvcnQoZSksbn12YXIgcGcsZnUsaFUsX1UsWm4sVWEsZ1UsbWc9JCgoKT0+e3hmKCk7VWUoKTtMdCgpO0llKCk7YXQoKTskdCgpO3N1KCk7JGUoKTtLdCgpO1VuKCk7d24oKTtjdSgpO2MyKCk7Y3MoKTtpYygpO3NvKCk7cGc9MzI3NjcsZnU9bmV3IGEsaFU9bmV3IGEsX1U9bmV3IGEsWm49bmV3IHN0LFVhPW5ldyBKO2dVPVFlKHlVKX0pO2Z1bmN0aW9uIEFVKHQsZSl7cmV0dXJuIFAuZXF1YWxzRXBzaWxvbih0LmxhdGl0dWRlLGUubGF0aXR1ZGUsUC5FUFNJTE9OMTApJiZQLmVxdWFsc0Vwc2lsb24odC5sb25naXR1ZGUsZS5sb25naXR1ZGUsUC5FUFNJTE9OMTApfWZ1bmN0aW9uIHdVKHQsZSxuLG8pe2U9eG4oZSxhLmVxdWFsc0Vwc2lsb24pO2xldCByPWUubGVuZ3RoO2lmKHI8MilyZXR1cm47bGV0IGk9aChvKSxzPWgobiksZj1uZXcgQXJyYXkociksdT1uZXcgQXJyYXkociksYz1uZXcgQXJyYXkociksbD1lWzBdO2ZbMF09bDtsZXQgcD10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGwsYlUpO3MmJihwLmhlaWdodD1uWzBdKSx1WzBdPXAuaGVpZ2h0LGk/Y1swXT1vWzBdOmNbMF09MDtsZXQgZD11WzBdLG09Y1swXSxfPWQ9PT1tLGc9MTtmb3IobGV0IGI9MTtiPHI7KytiKXtsZXQgVD1lW2JdLE89dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhULFRVKTtzJiYoTy5oZWlnaHQ9bltiXSksXz1fJiZPLmhlaWdodD09PTAsQVUocCxPKT9wLmhlaWdodDxPLmhlaWdodCYmKHVbZy0xXT1PLmhlaWdodCk6KGZbZ109VCx1W2ddPU8uaGVpZ2h0LGk/Y1tnXT1vW2JdOmNbZ109MCxfPV8mJnVbZ109PT1jW2ddLHN0LmNsb25lKE8scCksKytnKX1pZighKF98fGc8MikpcmV0dXJuIGYubGVuZ3RoPWcsdS5sZW5ndGg9ZyxjLmxlbmd0aD1nLHtwb3NpdGlvbnM6Zix0b3BIZWlnaHRzOnUsYm90dG9tSGVpZ2h0czpjfX12YXIgYTIsYlUsVFUsT1UsRVUsUlUsZW0saGc9JCgoKT0+e2pyKCk7THQoKTtJZSgpO2F0KCk7S3QoKTt5YSgpO2EyPXt9O2JVPW5ldyBzdCxUVT1uZXcgc3Q7T1U9bmV3IEFycmF5KDIpLEVVPW5ldyBBcnJheSgyKSxSVT17cG9zaXRpb25zOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxlbGxpcHNvaWQ6dm9pZCAwfTthMi5jb21wdXRlUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSxuLG8scixpKXtsZXQgcz13VSh0LGUsbixvKTtpZighaChzKSlyZXR1cm47ZT1zLnBvc2l0aW9ucyxuPXMudG9wSGVpZ2h0cyxvPXMuYm90dG9tSGVpZ2h0cztsZXQgZj1lLmxlbmd0aCx1PWYtMixjLGwscD1QLmNob3JkTGVuZ3RoKHIsdC5tYXhpbXVtUmFkaXVzKSxkPVJVO2lmKGQubWluRGlzdGFuY2U9cCxkLmVsbGlwc29pZD10LGkpe2xldCBtPTAsXztmb3IoXz0wO188Zi0xO18rKyltKz1Bbi5udW1iZXJPZlBvaW50cyhlW19dLGVbXysxXSxwKSsxO2M9bmV3IEZsb2F0NjRBcnJheShtKjMpLGw9bmV3IEZsb2F0NjRBcnJheShtKjMpO2xldCBnPU9VLGI9RVU7ZC5wb3NpdGlvbnM9ZyxkLmhlaWdodD1iO2xldCBUPTA7Zm9yKF89MDtfPGYtMTtfKyspe2dbMF09ZVtfXSxnWzFdPWVbXysxXSxiWzBdPW5bX10sYlsxXT1uW18rMV07bGV0IE89QW4uZ2VuZXJhdGVBcmMoZCk7Yy5zZXQoTyxUKSxiWzBdPW9bX10sYlsxXT1vW18rMV0sbC5zZXQoQW4uZ2VuZXJhdGVBcmMoZCksVCksVCs9Ty5sZW5ndGh9fWVsc2UgZC5wb3NpdGlvbnM9ZSxkLmhlaWdodD1uLGM9bmV3IEZsb2F0NjRBcnJheShBbi5nZW5lcmF0ZUFyYyhkKSksZC5oZWlnaHQ9byxsPW5ldyBGbG9hdDY0QXJyYXkoQW4uZ2VuZXJhdGVBcmMoZCkpO3JldHVybntib3R0b21Qb3NpdGlvbnM6bCx0b3BQb3NpdGlvbnM6YyxudW1Db3JuZXJzOnV9fTtlbT1hMn0pO2Z1bmN0aW9uIEVjKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9zaXRpb25zLG49dC5tYXhpbXVtSGVpZ2h0cyxvPXQubWluaW11bUhlaWdodHM7aWYoIWgoZSkpdGhyb3cgbmV3IEwoIm9wdGlvbnMucG9zaXRpb25zIGlzIHJlcXVpcmVkLiIpO2lmKGgobikmJm4ubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEwoIm9wdGlvbnMucG9zaXRpb25zIGFuZCBvcHRpb25zLm1heGltdW1IZWlnaHRzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGguIik7aWYoaChvKSYmby5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgTCgib3B0aW9ucy5wb3NpdGlvbnMgYW5kIG9wdGlvbnMubWluaW11bUhlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4iKTtsZXQgcj10LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVCxpPXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHM9dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdDt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9taW5pbXVtSGVpZ2h0cz1vLHRoaXMuX21heGltdW1IZWlnaHRzPW4sdGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKHIpLHRoaXMuX2dyYW51bGFyaXR5PWksdGhpcy5fZWxsaXBzb2lkPVkuY2xvbmUocyksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlV2FsbEdlb21ldHJ5IjtsZXQgZj0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoKzI7aChvKSYmKGYrPW8ubGVuZ3RoKSxoKG4pJiYoZis9bi5sZW5ndGgpLHRoaXMucGFja2VkTGVuZ3RoPWYrWS5wYWNrZWRMZW5ndGgrcHQucGFja2VkTGVuZ3RoKzF9dmFyIF9nLG5tLFNVLGYyLENVLHhVLFBVLHUyLGwyLHV1LHlnLHAyPSQoKCk9Pnt2ZSgpO0x0KCk7RGUoKTt5ZSgpO2F0KCk7anQoKTskdCgpO1hlKCk7WWUoKTthbigpOyRlKCk7S3QoKTt0bigpO1JvKCk7aGcoKTtfZz1uZXcgYSxubT1uZXcgYSxTVT1uZXcgYSxmMj1uZXcgYSxDVT1uZXcgYSx4VT1uZXcgYSxQVT1uZXcgYTtFYy5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgTCgidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighaChlKSl0aHJvdyBuZXcgTCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtuPW4/PzA7bGV0IG8scj10Ll9wb3NpdGlvbnMsaT1yLmxlbmd0aDtmb3IoZVtuKytdPWksbz0wO288aTsrK28sbis9YS5wYWNrZWRMZW5ndGgpYS5wYWNrKHJbb10sZSxuKTtsZXQgcz10Ll9taW5pbXVtSGVpZ2h0cztpZihpPWgocyk/cy5sZW5ndGg6MCxlW24rK109aSxoKHMpKWZvcihvPTA7bzxpOysrbyllW24rK109c1tvXTtsZXQgZj10Ll9tYXhpbXVtSGVpZ2h0cztpZihpPWgoZik/Zi5sZW5ndGg6MCxlW24rK109aSxoKGYpKWZvcihvPTA7bzxpOysrbyllW24rK109ZltvXTtyZXR1cm4gWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLHB0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksbis9cHQucGFja2VkTGVuZ3RoLGVbbl09dC5fZ3JhbnVsYXJpdHksZX07dTI9WS5jbG9uZShZLlVOSVRfU1BIRVJFKSxsMj1uZXcgcHQsdXU9e3Bvc2l0aW9uczp2b2lkIDAsbWluaW11bUhlaWdodHM6dm9pZCAwLG1heGltdW1IZWlnaHRzOnZvaWQgMCxlbGxpcHNvaWQ6dTIsdmVydGV4Rm9ybWF0OmwyLGdyYW51bGFyaXR5OnZvaWQgMH07RWMudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgTCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPWU/PzA7bGV0IG8scj10W2UrK10saT1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPWEucGFja2VkTGVuZ3RoKWlbb109YS51bnBhY2sodCxlKTtyPXRbZSsrXTtsZXQgcztpZihyPjApZm9yKHM9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKXNbb109dFtlKytdO3I9dFtlKytdO2xldCBmO2lmKHI+MClmb3IoZj1uZXcgQXJyYXkociksbz0wO288cjsrK28pZltvXT10W2UrK107bGV0IHU9WS51bnBhY2sodCxlLHUyKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgYz1wdC51bnBhY2sodCxlLGwyKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IGw9dFtlXTtyZXR1cm4gaChuKT8obi5fcG9zaXRpb25zPWksbi5fbWluaW11bUhlaWdodHM9cyxuLl9tYXhpbXVtSGVpZ2h0cz1mLG4uX2VsbGlwc29pZD1ZLmNsb25lKHUsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoYyxuLl92ZXJ0ZXhGb3JtYXQpLG4uX2dyYW51bGFyaXR5PWwsbik6KHV1LnBvc2l0aW9ucz1pLHV1Lm1pbmltdW1IZWlnaHRzPXMsdXUubWF4aW11bUhlaWdodHM9Zix1dS5ncmFudWxhcml0eT1sLG5ldyBFYyh1dSkpfTtFYy5mcm9tQ29uc3RhbnRIZWlnaHRzPWZ1bmN0aW9uKHQpe3Q9dD8/TnQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9zaXRpb25zO2lmKCFoKGUpKXRocm93IG5ldyBMKCJvcHRpb25zLnBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTtsZXQgbixvLHI9dC5taW5pbXVtSGVpZ2h0LGk9dC5tYXhpbXVtSGVpZ2h0LHM9aChyKSxmPWgoaSk7aWYoc3x8Zil7bGV0IGM9ZS5sZW5ndGg7bj1zP25ldyBBcnJheShjKTp2b2lkIDAsbz1mP25ldyBBcnJheShjKTp2b2lkIDA7Zm9yKGxldCBsPTA7bDxjOysrbClzJiYobltsXT1yKSxmJiYob1tsXT1pKX1sZXQgdT17cG9zaXRpb25zOmUsbWF4aW11bUhlaWdodHM6byxtaW5pbXVtSGVpZ2h0czpuLGVsbGlwc29pZDp0LmVsbGlwc29pZCx2ZXJ0ZXhGb3JtYXQ6dC52ZXJ0ZXhGb3JtYXR9O3JldHVybiBuZXcgRWModSl9O0VjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3Bvc2l0aW9ucyxuPXQuX21pbmltdW1IZWlnaHRzLG89dC5fbWF4aW11bUhlaWdodHMscj10Ll92ZXJ0ZXhGb3JtYXQsaT10Ll9ncmFudWxhcml0eSxzPXQuX2VsbGlwc29pZCxmPWVtLmNvbXB1dGVQb3NpdGlvbnMocyxlLG8sbixpLCEwKTtpZighaChmKSlyZXR1cm47bGV0IHU9Zi5ib3R0b21Qb3NpdGlvbnMsYz1mLnRvcFBvc2l0aW9ucyxsPWYubnVtQ29ybmVycyxwPWMubGVuZ3RoLGQ9cCoyLG09ci5wb3NpdGlvbj9uZXcgRmxvYXQ2NEFycmF5KGQpOnZvaWQgMCxfPXIubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkoZCk6dm9pZCAwLGc9ci50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoZCk6dm9pZCAwLGI9ci5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShkKTp2b2lkIDAsVD1yLnN0P25ldyBGbG9hdDMyQXJyYXkoZC8zKjIpOnZvaWQgMCxPPTAsRT0wLHc9MCxDPTAsTT0wLE49UFUsRj14VSxJPUNVLHY9ITA7cC89MztsZXQgQixBPTAsUz0xLyhwLWwtMSk7Zm9yKEI9MDtCPHA7KytCKXtsZXQgaz1CKjMscT1hLmZyb21BcnJheShjLGssX2cpLFc9YS5mcm9tQXJyYXkodSxrLG5tKTtpZihyLnBvc2l0aW9uJiYobVtPKytdPVcueCxtW08rK109Vy55LG1bTysrXT1XLnosbVtPKytdPXEueCxtW08rK109cS55LG1bTysrXT1xLnopLHIuc3QmJihUW00rK109QSxUW00rK109MCxUW00rK109QSxUW00rK109MSksci5ub3JtYWx8fHIudGFuZ2VudHx8ci5iaXRhbmdlbnQpe2xldCBSPWEuY2xvbmUoYS5aRVJPLGYyKSxudD1hLnN1YnRyYWN0KHEscy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwocSxubSksbm0pO2lmKEIrMTxwJiYoUj1hLmZyb21BcnJheShjLGsrMyxmMikpLHYpe2xldCBjdD1hLnN1YnRyYWN0KFIscSxTVSksbHQ9YS5zdWJ0cmFjdChudCxxLF9nKTtOPWEubm9ybWFsaXplKGEuY3Jvc3MobHQsY3QsTiksTiksdj0hMX1hLmVxdWFsc0Vwc2lsb24ocSxSLFAuRVBTSUxPTjEwKT92PSEwOihBKz1TLHIudGFuZ2VudCYmKEY9YS5ub3JtYWxpemUoYS5zdWJ0cmFjdChSLHEsRiksRikpLHIuYml0YW5nZW50JiYoST1hLm5vcm1hbGl6ZShhLmNyb3NzKE4sRixJKSxJKSkpLHIubm9ybWFsJiYoX1tFKytdPU4ueCxfW0UrK109Ti55LF9bRSsrXT1OLnosX1tFKytdPU4ueCxfW0UrK109Ti55LF9bRSsrXT1OLnopLHIudGFuZ2VudCYmKGdbQysrXT1GLngsZ1tDKytdPUYueSxnW0MrK109Ri56LGdbQysrXT1GLngsZ1tDKytdPUYueSxnW0MrK109Ri56KSxyLmJpdGFuZ2VudCYmKGJbdysrXT1JLngsYlt3KytdPUkueSxiW3crK109SS56LGJbdysrXT1JLngsYlt3KytdPUkueSxiW3crK109SS56KX19bGV0IHg9bmV3IHJlO3IucG9zaXRpb24mJih4LnBvc2l0aW9uPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pKSxyLm5vcm1hbCYmKHgubm9ybWFsPW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpffSkpLHIudGFuZ2VudCYmKHgudGFuZ2VudD1uZXcgcnQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Z30pKSxyLmJpdGFuZ2VudCYmKHguYml0YW5nZW50PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSkpLHIuc3QmJih4LnN0PW5ldyBydCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpUfSkpO2xldCBEPWQvMztkLT02KihsKzEpO2xldCB6PUZ0LmNyZWF0ZVR5cGVkQXJyYXkoRCxkKSxqPTA7Zm9yKEI9MDtCPEQtMjtCKz0yKXtsZXQgaz1CLHE9QisyLFc9YS5mcm9tQXJyYXkobSxrKjMsX2cpLFI9YS5mcm9tQXJyYXkobSxxKjMsbm0pO2lmKGEuZXF1YWxzRXBzaWxvbihXLFIsUC5FUFNJTE9OMTApKWNvbnRpbnVlO2xldCBudD1CKzEsY3Q9QiszO3pbaisrXT1udCx6W2orK109ayx6W2orK109Y3QseltqKytdPWN0LHpbaisrXT1rLHpbaisrXT1xfXJldHVybiBuZXcgQnQoe2F0dHJpYnV0ZXM6eCxpbmRpY2VzOnoscHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6bmV3IGd0LmZyb21WZXJ0aWNlcyhtKX0pfTt5Zz1FY30pO3ZhciBnZz17fTtwZShnZyx7ZGVmYXVsdDooKT0+TlV9KTtmdW5jdGlvbiBNVSh0LGUpe3JldHVybiBoKGUpJiYodD15Zy51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSx5Zy5jcmVhdGVHZW9tZXRyeSh0KX12YXIgTlUsQWc9JCgoKT0+e2F0KCk7JHQoKTtwMigpO05VPU1VfSk7ZnVuY3Rpb24gUmModCl7dD10Pz9OdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5wb3NpdGlvbnMsbj10Lm1heGltdW1IZWlnaHRzLG89dC5taW5pbXVtSGVpZ2h0cztpZighaChlKSl0aHJvdyBuZXcgTCgib3B0aW9ucy5wb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7aWYoaChuKSYmbi5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgTCgib3B0aW9ucy5wb3NpdGlvbnMgYW5kIG9wdGlvbnMubWF4aW11bUhlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4iKTtpZihoKG8pJiZvLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBMKCJvcHRpb25zLnBvc2l0aW9ucyBhbmQgb3B0aW9ucy5taW5pbXVtSGVpZ2h0cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiIpO2xldCByPXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLGk9dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdDt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9taW5pbXVtSGVpZ2h0cz1vLHRoaXMuX21heGltdW1IZWlnaHRzPW4sdGhpcy5fZ3JhbnVsYXJpdHk9cix0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShpKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVXYWxsT3V0bGluZUdlb21ldHJ5IjtsZXQgcz0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoKzI7aChvKSYmKHMrPW8ubGVuZ3RoKSxoKG4pJiYocys9bi5sZW5ndGgpLHRoaXMucGFja2VkTGVuZ3RoPXMrWS5wYWNrZWRMZW5ndGgrMX12YXIgZDIsbTIsaDIsbHUsYmcsXzI9JCgoKT0+e3ZlKCk7THQoKTtEZSgpO3llKCk7YXQoKTtqdCgpOyR0KCk7WGUoKTtZZSgpO2FuKCk7JGUoKTtLdCgpO3RuKCk7aGcoKTtkMj1uZXcgYSxtMj1uZXcgYTtSYy5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgTCgidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighaChlKSl0aHJvdyBuZXcgTCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtuPW4/PzA7bGV0IG8scj10Ll9wb3NpdGlvbnMsaT1yLmxlbmd0aDtmb3IoZVtuKytdPWksbz0wO288aTsrK28sbis9YS5wYWNrZWRMZW5ndGgpYS5wYWNrKHJbb10sZSxuKTtsZXQgcz10Ll9taW5pbXVtSGVpZ2h0cztpZihpPWgocyk/cy5sZW5ndGg6MCxlW24rK109aSxoKHMpKWZvcihvPTA7bzxpOysrbyllW24rK109c1tvXTtsZXQgZj10Ll9tYXhpbXVtSGVpZ2h0cztpZihpPWgoZik/Zi5sZW5ndGg6MCxlW24rK109aSxoKGYpKWZvcihvPTA7bzxpOysrbyllW24rK109ZltvXTtyZXR1cm4gWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLGVbbl09dC5fZ3JhbnVsYXJpdHksZX07aDI9WS5jbG9uZShZLlVOSVRfU1BIRVJFKSxsdT17cG9zaXRpb25zOnZvaWQgMCxtaW5pbXVtSGVpZ2h0czp2b2lkIDAsbWF4aW11bUhlaWdodHM6dm9pZCAwLGVsbGlwc29pZDpoMixncmFudWxhcml0eTp2b2lkIDB9O1JjLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEwoImFycmF5IGlzIHJlcXVpcmVkIik7ZT1lPz8wO2xldCBvLHI9dFtlKytdLGk9bmV3IEFycmF5KHIpO2ZvcihvPTA7bzxyOysrbyxlKz1hLnBhY2tlZExlbmd0aClpW29dPWEudW5wYWNrKHQsZSk7cj10W2UrK107bGV0IHM7aWYocj4wKWZvcihzPW5ldyBBcnJheShyKSxvPTA7bzxyOysrbylzW29dPXRbZSsrXTtyPXRbZSsrXTtsZXQgZjtpZihyPjApZm9yKGY9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKWZbb109dFtlKytdO2xldCB1PVkudW5wYWNrKHQsZSxoMik7ZSs9WS5wYWNrZWRMZW5ndGg7bGV0IGM9dFtlXTtyZXR1cm4gaChuKT8obi5fcG9zaXRpb25zPWksbi5fbWluaW11bUhlaWdodHM9cyxuLl9tYXhpbXVtSGVpZ2h0cz1mLG4uX2VsbGlwc29pZD1ZLmNsb25lKHUsbi5fZWxsaXBzb2lkKSxuLl9ncmFudWxhcml0eT1jLG4pOihsdS5wb3NpdGlvbnM9aSxsdS5taW5pbXVtSGVpZ2h0cz1zLGx1Lm1heGltdW1IZWlnaHRzPWYsbHUuZ3JhbnVsYXJpdHk9YyxuZXcgUmMobHUpKX07UmMuZnJvbUNvbnN0YW50SGVpZ2h0cz1mdW5jdGlvbih0KXt0PXQ/P050LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvc2l0aW9ucztpZighaChlKSl0aHJvdyBuZXcgTCgib3B0aW9ucy5wb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7bGV0IG4sbyxyPXQubWluaW11bUhlaWdodCxpPXQubWF4aW11bUhlaWdodCxzPWgociksZj1oKGkpO2lmKHN8fGYpe2xldCBjPWUubGVuZ3RoO249cz9uZXcgQXJyYXkoYyk6dm9pZCAwLG89Zj9uZXcgQXJyYXkoYyk6dm9pZCAwO2ZvcihsZXQgbD0wO2w8YzsrK2wpcyYmKG5bbF09ciksZiYmKG9bbF09aSl9bGV0IHU9e3Bvc2l0aW9uczplLG1heGltdW1IZWlnaHRzOm8sbWluaW11bUhlaWdodHM6bixlbGxpcHNvaWQ6dC5lbGxpcHNvaWR9O3JldHVybiBuZXcgUmModSl9O1JjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3Bvc2l0aW9ucyxuPXQuX21pbmltdW1IZWlnaHRzLG89dC5fbWF4aW11bUhlaWdodHMscj10Ll9ncmFudWxhcml0eSxpPXQuX2VsbGlwc29pZCxzPWVtLmNvbXB1dGVQb3NpdGlvbnMoaSxlLG8sbixyLCExKTtpZighaChzKSlyZXR1cm47bGV0IGY9cy5ib3R0b21Qb3NpdGlvbnMsdT1zLnRvcFBvc2l0aW9ucyxjPXUubGVuZ3RoLGw9YyoyLHA9bmV3IEZsb2F0NjRBcnJheShsKSxkPTA7Yy89MztsZXQgbTtmb3IobT0wO208YzsrK20pe2xldCBPPW0qMyxFPWEuZnJvbUFycmF5KHUsTyxkMiksdz1hLmZyb21BcnJheShmLE8sbTIpO3BbZCsrXT13LngscFtkKytdPXcueSxwW2QrK109dy56LHBbZCsrXT1FLngscFtkKytdPUUueSxwW2QrK109RS56fWxldCBfPW5ldyByZSh7cG9zaXRpb246bmV3IHJ0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpwfSl9KSxnPWwvMztsPTIqZy00K2c7bGV0IGI9RnQuY3JlYXRlVHlwZWRBcnJheShnLGwpLFQ9MDtmb3IobT0wO208Zy0yO20rPTIpe2xldCBPPW0sRT1tKzIsdz1hLmZyb21BcnJheShwLE8qMyxkMiksQz1hLmZyb21BcnJheShwLEUqMyxtMik7aWYoYS5lcXVhbHNFcHNpbG9uKHcsQyxQLkVQU0lMT04xMCkpY29udGludWU7bGV0IE09bSsxLE49bSszO2JbVCsrXT1NLGJbVCsrXT1PLGJbVCsrXT1NLGJbVCsrXT1OLGJbVCsrXT1PLGJbVCsrXT1FfXJldHVybiBiW1QrK109Zy0yLGJbVCsrXT1nLTEsbmV3IEJ0KHthdHRyaWJ1dGVzOl8saW5kaWNlczpiLHByaW1pdGl2ZVR5cGU6RHQuTElORVMsYm91bmRpbmdTcGhlcmU6bmV3IGd0LmZyb21WZXJ0aWNlcyhwKX0pfTtiZz1SY30pO3ZhciBUZz17fTtwZShUZyx7ZGVmYXVsdDooKT0+dlV9KTtmdW5jdGlvbiBJVSh0LGUpe3JldHVybiBoKGUpJiYodD1iZy51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSxiZy5jcmVhdGVHZW9tZXRyeSh0KX12YXIgdlUsd2c9JCgoKT0+e2F0KCk7JHQoKTtfMigpO3ZVPUlVfSk7dmFyIFJnPVhuKChwdSxFZyk9Pnt2YXIgVXQ9VXR8fHt9O1V0LnNjb3BlPXt9O1V0LmFycmF5SXRlcmF0b3JJbXBsPWZ1bmN0aW9uKHQpe3ZhciBlPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGU8dC5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6dFtlKytdfTp7ZG9uZTohMH19fTtVdC5hcnJheUl0ZXJhdG9yPWZ1bmN0aW9uKHQpe3JldHVybntuZXh0OlV0LmFycmF5SXRlcmF0b3JJbXBsKHQpfX07VXQubWFrZUl0ZXJhdG9yPWZ1bmN0aW9uKHQpe3ZhciBlPXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuaXRlcmF0b3ImJnRbU3ltYm9sLml0ZXJhdG9yXTtyZXR1cm4gZT9lLmNhbGwodCk6VXQuYXJyYXlJdGVyYXRvcih0KX07VXQuQVNTVU1FX0VTNT0hMTtVdC5BU1NVTUVfTk9fTkFUSVZFX01BUD0hMTtVdC5BU1NVTUVfTk9fTkFUSVZFX1NFVD0hMTtVdC5TSU1QTEVfRlJPVU5EX1BPTFlGSUxMPSExO1V0LklTT0xBVEVfUE9MWUZJTExTPSExO1V0LkZPUkNFX1BPTFlGSUxMX1BST01JU0U9ITE7VXQuRk9SQ0VfUE9MWUZJTExfUFJPTUlTRV9XSEVOX05PX1VOSEFORExFRF9SRUpFQ1RJT049ITE7VXQuZ2V0R2xvYmFsPWZ1bmN0aW9uKHQpe3Q9W3R5cGVvZiBnbG9iYWxUaGlzPT0ib2JqZWN0IiYmZ2xvYmFsVGhpcyx0LHR5cGVvZiB3aW5kb3c9PSJvYmplY3QiJiZ3aW5kb3csdHlwZW9mIHNlbGY9PSJvYmplY3QiJiZzZWxmLHR5cGVvZiBnbG9iYWw9PSJvYmplY3QiJiZnbG9iYWxdO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7KytlKXt2YXIgbj10W2VdO2lmKG4mJm4uTWF0aD09TWF0aClyZXR1cm4gbn10aHJvdyBFcnJvcigiQ2Fubm90IGZpbmQgZ2xvYmFsIG9iamVjdCIpfTtVdC5nbG9iYWw9VXQuZ2V0R2xvYmFsKHB1KTtVdC5kZWZpbmVQcm9wZXJ0eT1VdC5BU1NVTUVfRVM1fHx0eXBlb2YgT2JqZWN0LmRlZmluZVByb3BlcnRpZXM9PSJmdW5jdGlvbiI/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdD09QXJyYXkucHJvdG90eXBlfHx0PT1PYmplY3QucHJvdG90eXBlfHwodFtlXT1uLnZhbHVlKSx0fTtVdC5JU19TWU1CT0xfTkFUSVZFPXR5cGVvZiBTeW1ib2w9PSJmdW5jdGlvbiImJnR5cGVvZiBTeW1ib2woIngiKT09InN5bWJvbCI7VXQuVFJVU1RfRVM2X1BPTFlGSUxMUz0hVXQuSVNPTEFURV9QT0xZRklMTFN8fFV0LklTX1NZTUJPTF9OQVRJVkU7VXQucG9seWZpbGxzPXt9O1V0LnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbD17fTtVdC5QT0xZRklMTF9QUkVGSVg9IiRqc2NwJCI7VXQucG9seWZpbGw9ZnVuY3Rpb24odCxlLG4sbyl7ZSYmKFV0LklTT0xBVEVfUE9MWUZJTExTP1V0LnBvbHlmaWxsSXNvbGF0ZWQodCxlLG4sbyk6VXQucG9seWZpbGxVbmlzb2xhdGVkKHQsZSxuLG8pKX07VXQucG9seWZpbGxVbmlzb2xhdGVkPWZ1bmN0aW9uKHQsZSxuLG8pe2ZvcihuPVV0Lmdsb2JhbCx0PXQuc3BsaXQoIi4iKSxvPTA7bzx0Lmxlbmd0aC0xO28rKyl7dmFyIHI9dFtvXTtpZighKHIgaW4gbikpcmV0dXJuO249bltyXX10PXRbdC5sZW5ndGgtMV0sbz1uW3RdLGU9ZShvKSxlIT1vJiZlIT1udWxsJiZVdC5kZWZpbmVQcm9wZXJ0eShuLHQse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTplfSl9O1V0LnBvbHlmaWxsSXNvbGF0ZWQ9ZnVuY3Rpb24odCxlLG4sbyl7dmFyIHI9dC5zcGxpdCgiLiIpO3Q9ci5sZW5ndGg9PT0xLG89clswXSxvPSF0JiZvIGluIFV0LnBvbHlmaWxscz9VdC5wb2x5ZmlsbHM6VXQuZ2xvYmFsO2Zvcih2YXIgaT0wO2k8ci5sZW5ndGgtMTtpKyspe3ZhciBzPXJbaV07aWYoIShzIGluIG8pKXJldHVybjtvPW9bc119cj1yW3IubGVuZ3RoLTFdLG49VXQuSVNfU1lNQk9MX05BVElWRSYmbj09PSJlczYiP29bcl06bnVsbCxlPWUobiksZSE9bnVsbCYmKHQ/VXQuZGVmaW5lUHJvcGVydHkoVXQucG9seWZpbGxzLHIse2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTplfSk6ZSE9PW4mJihVdC5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2xbcl09PT12b2lkIDAmJihuPTFlOSpNYXRoLnJhbmRvbSgpPj4+MCxVdC5wcm9wZXJ0eVRvUG9seWZpbGxTeW1ib2xbcl09VXQuSVNfU1lNQk9MX05BVElWRT9VdC5nbG9iYWwuU3ltYm9sKHIpOlV0LlBPTFlGSUxMX1BSRUZJWCtuKyIkIityKSxVdC5kZWZpbmVQcm9wZXJ0eShvLFV0LnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFtyXSx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KSkpfTtVdC5wb2x5ZmlsbCgiUHJvbWlzZSIsZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3RoaXMuYmF0Y2hfPW51bGx9ZnVuY3Rpb24gbihzKXtyZXR1cm4gcyBpbnN0YW5jZW9mIHI/czpuZXcgcihmdW5jdGlvbihmLHUpe2Yocyl9KX1pZih0JiYoIShVdC5GT1JDRV9QT0xZRklMTF9QUk9NSVNFfHxVdC5GT1JDRV9QT0xZRklMTF9QUk9NSVNFX1dIRU5fTk9fVU5IQU5ETEVEX1JFSkVDVElPTiYmdHlwZW9mIFV0Lmdsb2JhbC5Qcm9taXNlUmVqZWN0aW9uRXZlbnQ+InUiKXx8IVV0Lmdsb2JhbC5Qcm9taXNlfHxVdC5nbG9iYWwuUHJvbWlzZS50b1N0cmluZygpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKT09PS0xKSlyZXR1cm4gdDtlLnByb3RvdHlwZS5hc3luY0V4ZWN1dGU9ZnVuY3Rpb24ocyl7aWYodGhpcy5iYXRjaF89PW51bGwpe3RoaXMuYmF0Y2hfPVtdO3ZhciBmPXRoaXM7dGhpcy5hc3luY0V4ZWN1dGVGdW5jdGlvbihmdW5jdGlvbigpe2YuZXhlY3V0ZUJhdGNoXygpfSl9dGhpcy5iYXRjaF8ucHVzaChzKX07dmFyIG89VXQuZ2xvYmFsLnNldFRpbWVvdXQ7ZS5wcm90b3R5cGUuYXN5bmNFeGVjdXRlRnVuY3Rpb249ZnVuY3Rpb24ocyl7byhzLDApfSxlLnByb3RvdHlwZS5leGVjdXRlQmF0Y2hfPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmJhdGNoXyYmdGhpcy5iYXRjaF8ubGVuZ3RoOyl7dmFyIHM9dGhpcy5iYXRjaF87dGhpcy5iYXRjaF89W107Zm9yKHZhciBmPTA7ZjxzLmxlbmd0aDsrK2Ype3ZhciB1PXNbZl07c1tmXT1udWxsO3RyeXt1KCl9Y2F0Y2goYyl7dGhpcy5hc3luY1Rocm93XyhjKX19fXRoaXMuYmF0Y2hfPW51bGx9LGUucHJvdG90eXBlLmFzeW5jVGhyb3dfPWZ1bmN0aW9uKHMpe3RoaXMuYXN5bmNFeGVjdXRlRnVuY3Rpb24oZnVuY3Rpb24oKXt0aHJvdyBzfSl9O3ZhciByPWZ1bmN0aW9uKHMpe3RoaXMuc3RhdGVfPTAsdGhpcy5yZXN1bHRfPXZvaWQgMCx0aGlzLm9uU2V0dGxlZENhbGxiYWNrc189W10sdGhpcy5pc1JlamVjdGlvbkhhbmRsZWRfPSExO3ZhciBmPXRoaXMuY3JlYXRlUmVzb2x2ZUFuZFJlamVjdF8oKTt0cnl7cyhmLnJlc29sdmUsZi5yZWplY3QpfWNhdGNoKHUpe2YucmVqZWN0KHUpfX07ci5wcm90b3R5cGUuY3JlYXRlUmVzb2x2ZUFuZFJlamVjdF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBzKGMpe3JldHVybiBmdW5jdGlvbihsKXt1fHwodT0hMCxjLmNhbGwoZixsKSl9fXZhciBmPXRoaXMsdT0hMTtyZXR1cm57cmVzb2x2ZTpzKHRoaXMucmVzb2x2ZVRvXykscmVqZWN0OnModGhpcy5yZWplY3RfKX19LHIucHJvdG90eXBlLnJlc29sdmVUb189ZnVuY3Rpb24ocyl7aWYocz09PXRoaXMpdGhpcy5yZWplY3RfKG5ldyBUeXBlRXJyb3IoIkEgUHJvbWlzZSBjYW5ub3QgcmVzb2x2ZSB0byBpdHNlbGYiKSk7ZWxzZSBpZihzIGluc3RhbmNlb2Ygcil0aGlzLnNldHRsZVNhbWVBc1Byb21pc2VfKHMpO2Vsc2V7dDpzd2l0Y2godHlwZW9mIHMpe2Nhc2Uib2JqZWN0Ijp2YXIgZj1zIT1udWxsO2JyZWFrIHQ7Y2FzZSJmdW5jdGlvbiI6Zj0hMDticmVhayB0O2RlZmF1bHQ6Zj0hMX1mP3RoaXMucmVzb2x2ZVRvTm9uUHJvbWlzZU9ial8ocyk6dGhpcy5mdWxmaWxsXyhzKX19LHIucHJvdG90eXBlLnJlc29sdmVUb05vblByb21pc2VPYmpfPWZ1bmN0aW9uKHMpe3ZhciBmPXZvaWQgMDt0cnl7Zj1zLnRoZW59Y2F0Y2godSl7dGhpcy5yZWplY3RfKHUpO3JldHVybn10eXBlb2YgZj09ImZ1bmN0aW9uIj90aGlzLnNldHRsZVNhbWVBc1RoZW5hYmxlXyhmLHMpOnRoaXMuZnVsZmlsbF8ocyl9LHIucHJvdG90eXBlLnJlamVjdF89ZnVuY3Rpb24ocyl7dGhpcy5zZXR0bGVfKDIscyl9LHIucHJvdG90eXBlLmZ1bGZpbGxfPWZ1bmN0aW9uKHMpe3RoaXMuc2V0dGxlXygxLHMpfSxyLnByb3RvdHlwZS5zZXR0bGVfPWZ1bmN0aW9uKHMsZil7aWYodGhpcy5zdGF0ZV8hPTApdGhyb3cgRXJyb3IoIkNhbm5vdCBzZXR0bGUoIitzKyIsICIrZisiKTogUHJvbWlzZSBhbHJlYWR5IHNldHRsZWQgaW4gc3RhdGUiK3RoaXMuc3RhdGVfKTt0aGlzLnN0YXRlXz1zLHRoaXMucmVzdWx0Xz1mLHRoaXMuc3RhdGVfPT09MiYmdGhpcy5zY2hlZHVsZVVuaGFuZGxlZFJlamVjdGlvbkNoZWNrXygpLHRoaXMuZXhlY3V0ZU9uU2V0dGxlZENhbGxiYWNrc18oKX0sci5wcm90b3R5cGUuc2NoZWR1bGVVbmhhbmRsZWRSZWplY3Rpb25DaGVja189ZnVuY3Rpb24oKXt2YXIgcz10aGlzO28oZnVuY3Rpb24oKXtpZihzLm5vdGlmeVVuaGFuZGxlZFJlamVjdGlvbl8oKSl7dmFyIGY9VXQuZ2xvYmFsLmNvbnNvbGU7dHlwZW9mIGY8InUiJiZmLmVycm9yKHMucmVzdWx0Xyl9fSwxKX0sci5wcm90b3R5cGUubm90aWZ5VW5oYW5kbGVkUmVqZWN0aW9uXz1mdW5jdGlvbigpe2lmKHRoaXMuaXNSZWplY3Rpb25IYW5kbGVkXylyZXR1cm4hMTt2YXIgcz1VdC5nbG9iYWwuQ3VzdG9tRXZlbnQsZj1VdC5nbG9iYWwuRXZlbnQsdT1VdC5nbG9iYWwuZGlzcGF0Y2hFdmVudDtyZXR1cm4gdHlwZW9mIHU+InUiPyEwOih0eXBlb2Ygcz09ImZ1bmN0aW9uIj9zPW5ldyBzKCJ1bmhhbmRsZWRyZWplY3Rpb24iLHtjYW5jZWxhYmxlOiEwfSk6dHlwZW9mIGY9PSJmdW5jdGlvbiI/cz1uZXcgZigidW5oYW5kbGVkcmVqZWN0aW9uIix7Y2FuY2VsYWJsZTohMH0pOihzPVV0Lmdsb2JhbC5kb2N1bWVudC5jcmVhdGVFdmVudCgiQ3VzdG9tRXZlbnQiKSxzLmluaXRDdXN0b21FdmVudCgidW5oYW5kbGVkcmVqZWN0aW9uIiwhMSwhMCxzKSkscy5wcm9taXNlPXRoaXMscy5yZWFzb249dGhpcy5yZXN1bHRfLHUocykpfSxyLnByb3RvdHlwZS5leGVjdXRlT25TZXR0bGVkQ2FsbGJhY2tzXz1mdW5jdGlvbigpe2lmKHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXyE9bnVsbCl7Zm9yKHZhciBzPTA7czx0aGlzLm9uU2V0dGxlZENhbGxiYWNrc18ubGVuZ3RoOysrcylpLmFzeW5jRXhlY3V0ZSh0aGlzLm9uU2V0dGxlZENhbGxiYWNrc19bc10pO3RoaXMub25TZXR0bGVkQ2FsbGJhY2tzXz1udWxsfX07dmFyIGk9bmV3IGU7cmV0dXJuIHIucHJvdG90eXBlLnNldHRsZVNhbWVBc1Byb21pc2VfPWZ1bmN0aW9uKHMpe3ZhciBmPXRoaXMuY3JlYXRlUmVzb2x2ZUFuZFJlamVjdF8oKTtzLmNhbGxXaGVuU2V0dGxlZF8oZi5yZXNvbHZlLGYucmVqZWN0KX0sci5wcm90b3R5cGUuc2V0dGxlU2FtZUFzVGhlbmFibGVfPWZ1bmN0aW9uKHMsZil7dmFyIHU9dGhpcy5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0XygpO3RyeXtzLmNhbGwoZix1LnJlc29sdmUsdS5yZWplY3QpfWNhdGNoKGMpe3UucmVqZWN0KGMpfX0sci5wcm90b3R5cGUudGhlbj1mdW5jdGlvbihzLGYpe2Z1bmN0aW9uIHUoZCxtKXtyZXR1cm4gdHlwZW9mIGQ9PSJmdW5jdGlvbiI/ZnVuY3Rpb24oXyl7dHJ5e2MoZChfKSl9Y2F0Y2goZyl7bChnKX19Om19dmFyIGMsbCxwPW5ldyByKGZ1bmN0aW9uKGQsbSl7Yz1kLGw9bX0pO3JldHVybiB0aGlzLmNhbGxXaGVuU2V0dGxlZF8odShzLGMpLHUoZixsKSkscH0sci5wcm90b3R5cGUuY2F0Y2g9ZnVuY3Rpb24ocyl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAscyl9LHIucHJvdG90eXBlLmNhbGxXaGVuU2V0dGxlZF89ZnVuY3Rpb24ocyxmKXtmdW5jdGlvbiB1KCl7c3dpdGNoKGMuc3RhdGVfKXtjYXNlIDE6cyhjLnJlc3VsdF8pO2JyZWFrO2Nhc2UgMjpmKGMucmVzdWx0Xyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5leHBlY3RlZCBzdGF0ZTogIitjLnN0YXRlXyl9fXZhciBjPXRoaXM7dGhpcy5vblNldHRsZWRDYWxsYmFja3NfPT1udWxsP2kuYXN5bmNFeGVjdXRlKHUpOnRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXy5wdXNoKHUpLHRoaXMuaXNSZWplY3Rpb25IYW5kbGVkXz0hMH0sci5yZXNvbHZlPW4sci5yZWplY3Q9ZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyByKGZ1bmN0aW9uKGYsdSl7dShzKX0pfSxyLnJhY2U9ZnVuY3Rpb24ocyl7cmV0dXJuIG5ldyByKGZ1bmN0aW9uKGYsdSl7Zm9yKHZhciBjPVV0Lm1ha2VJdGVyYXRvcihzKSxsPWMubmV4dCgpOyFsLmRvbmU7bD1jLm5leHQoKSluKGwudmFsdWUpLmNhbGxXaGVuU2V0dGxlZF8oZix1KX0pfSxyLmFsbD1mdW5jdGlvbihzKXt2YXIgZj1VdC5tYWtlSXRlcmF0b3IocyksdT1mLm5leHQoKTtyZXR1cm4gdS5kb25lP24oW10pOm5ldyByKGZ1bmN0aW9uKGMsbCl7ZnVuY3Rpb24gcChfKXtyZXR1cm4gZnVuY3Rpb24oZyl7ZFtfXT1nLG0tLSxtPT0wJiZjKGQpfX12YXIgZD1bXSxtPTA7ZG8gZC5wdXNoKHZvaWQgMCksbSsrLG4odS52YWx1ZSkuY2FsbFdoZW5TZXR0bGVkXyhwKGQubGVuZ3RoLTEpLGwpLHU9Zi5uZXh0KCk7d2hpbGUoIXUuZG9uZSl9KX0scn0sImVzNiIsImVzMyIpO1V0Lm93bnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsZSl9O1V0LmFzc2lnbj1VdC5UUlVTVF9FUzZfUE9MWUZJTExTJiZ0eXBlb2YgT2JqZWN0LmFzc2lnbj09ImZ1bmN0aW9uIj9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIG89YXJndW1lbnRzW25dO2lmKG8pZm9yKHZhciByIGluIG8pVXQub3ducyhvLHIpJiYodFtyXT1vW3JdKX1yZXR1cm4gdH07VXQucG9seWZpbGwoIk9iamVjdC5hc3NpZ24iLGZ1bmN0aW9uKHQpe3JldHVybiB0fHxVdC5hc3NpZ259LCJlczYiLCJlczMiKTtVdC5jaGVja1N0cmluZ0FyZ3M9ZnVuY3Rpb24odCxlLG4pe2lmKHQ9PW51bGwpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlICd0aGlzJyB2YWx1ZSBmb3IgU3RyaW5nLnByb3RvdHlwZS4iK24rIiBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCIpO2lmKGUgaW5zdGFuY2VvZiBSZWdFeHApdGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgdG8gU3RyaW5nLnByb3RvdHlwZS4iK24rIiBtdXN0IG5vdCBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiIpO3JldHVybiB0KyIifTtVdC5wb2x5ZmlsbCgiU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoIixmdW5jdGlvbih0KXtyZXR1cm4gdHx8ZnVuY3Rpb24oZSxuKXt2YXIgbz1VdC5jaGVja1N0cmluZ0FyZ3ModGhpcyxlLCJzdGFydHNXaXRoIik7ZSs9IiI7dmFyIHI9by5sZW5ndGgsaT1lLmxlbmd0aDtuPU1hdGgubWF4KDAsTWF0aC5taW4obnwwLG8ubGVuZ3RoKSk7Zm9yKHZhciBzPTA7czxpJiZuPHI7KWlmKG9bbisrXSE9ZVtzKytdKXJldHVybiExO3JldHVybiBzPj1pfX0sImVzNiIsImVzMyIpO1V0LnBvbHlmaWxsKCJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtyZXR1cm4gbj1OdW1iZXIobiksbj09PTEvMHx8bj09PS0xLzA/bjpufDB9cmV0dXJuIHR8fGZ1bmN0aW9uKG4sbyxyKXt2YXIgaT10aGlzLmxlbmd0aDtpZihuPWUobiksbz1lKG8pLHI9cj09PXZvaWQgMD9pOmUociksbj0wPm4/TWF0aC5tYXgoaStuLDApOk1hdGgubWluKG4saSksbz0wPm8/TWF0aC5tYXgoaStvLDApOk1hdGgubWluKG8saSkscj0wPnI/TWF0aC5tYXgoaStyLDApOk1hdGgubWluKHIsaSksbjxvKWZvcig7bzxyOylvIGluIHRoaXM/dGhpc1tuKytdPXRoaXNbbysrXTooZGVsZXRlIHRoaXNbbisrXSxvKyspO2Vsc2UgZm9yKHI9TWF0aC5taW4ocixpK28tbiksbis9ci1vO3I+bzspLS1yIGluIHRoaXM/dGhpc1stLW5dPXRoaXNbcl06ZGVsZXRlIHRoaXNbLS1uXTtyZXR1cm4gdGhpc319LCJlczYiLCJlczMiKTtVdC50eXBlZEFycmF5Q29weVdpdGhpbj1mdW5jdGlvbih0KXtyZXR1cm4gdHx8QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW59O1V0LnBvbHlmaWxsKCJJbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLFV0LnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtVdC5wb2x5ZmlsbCgiVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsVXQudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO1V0LnBvbHlmaWxsKCJVaW50OENsYW1wZWRBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsVXQudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO1V0LnBvbHlmaWxsKCJJbnQxNkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixVdC50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7VXQucG9seWZpbGwoIlVpbnQxNkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixVdC50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7VXQucG9seWZpbGwoIkludDMyQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLFV0LnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtVdC5wb2x5ZmlsbCgiVWludDMyQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLFV0LnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtVdC5wb2x5ZmlsbCgiRmxvYXQzMkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixVdC50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7VXQucG9seWZpbGwoIkZsb2F0NjRBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsVXQudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO3ZhciBPZz1mdW5jdGlvbigpe3ZhciB0PXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiB0eXBlb2YgX19maWxlbmFtZTwidSImJih0PXR8fF9fZmlsZW5hbWUpLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oVil7cmV0dXJuIFIubG9jYXRlRmlsZT9SLmxvY2F0ZUZpbGUoVixkdCk6ZHQrVn1mdW5jdGlvbiBvKFYsSyx0dCl7dmFyIFB0PUsrdHQ7Zm9yKHR0PUs7Vlt0dF0mJiEodHQ+PVB0KTspKyt0dDtpZigxNjx0dC1LJiZWLmJ1ZmZlciYmZ2UpcmV0dXJuIGdlLmRlY29kZShWLnN1YmFycmF5KEssdHQpKTtmb3IoUHQ9IiI7Szx0dDspe3ZhciB1ZT1WW0srK107aWYodWUmMTI4KXt2YXIgVGU9VltLKytdJjYzO2lmKCh1ZSYyMjQpPT0xOTIpUHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoKHVlJjMxKTw8NnxUZSk7ZWxzZXt2YXIgT2k9VltLKytdJjYzO3VlPSh1ZSYyNDApPT0yMjQ/KHVlJjE1KTw8MTJ8VGU8PDZ8T2k6KHVlJjcpPDwxOHxUZTw8MTJ8T2k8PDZ8VltLKytdJjYzLDY1NTM2PnVlP1B0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHVlKToodWUtPTY1NTM2LFB0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fHVlPj4xMCw1NjMyMHx1ZSYxMDIzKSl9fWVsc2UgUHQrPVN0cmluZy5mcm9tQ2hhckNvZGUodWUpfXJldHVybiBQdH1mdW5jdGlvbiByKFYsSyl7cmV0dXJuIFY/byh1bixWLEspOiIifWZ1bmN0aW9uIGkoKXt2YXIgVj1RdC5idWZmZXI7Ui5IRUFQOD1FZT1uZXcgSW50OEFycmF5KFYpLFIuSEVBUDE2PW5ldyBJbnQxNkFycmF5KFYpLFIuSEVBUDMyPUdlPW5ldyBJbnQzMkFycmF5KFYpLFIuSEVBUFU4PXVuPW5ldyBVaW50OEFycmF5KFYpLFIuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoViksUi5IRUFQVTMyPWJlPW5ldyBVaW50MzJBcnJheShWKSxSLkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShWKSxSLkhFQVBGNjQ9bmV3IEZsb2F0NjRBcnJheShWKX1mdW5jdGlvbiBzKFYpe3Rocm93IFIub25BYm9ydCYmUi5vbkFib3J0KFYpLFY9IkFib3J0ZWQoIitWKyIpIixmZShWKSxOZT0hMCxWPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoVisiLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiIpLGN0KFYpLFZ9ZnVuY3Rpb24gZihWKXt0cnl7aWYoVj09c24mJlp0KXJldHVybiBuZXcgVWludDhBcnJheShadCk7aWYoZGUpcmV0dXJuIGRlKFYpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1jYXRjaChLKXtzKEspfX1mdW5jdGlvbiB1KCl7aWYoIVp0JiYoeHR8fHl0KSl7aWYodHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iJiYhc24uc3RhcnRzV2l0aCgiZmlsZTovLyIpKXJldHVybiBmZXRjaChzbix7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oVil7aWYoIVYub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIitzbisiJyI7cmV0dXJuIFYuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIGYoc24pfSk7aWYoc2UpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKFYsSyl7c2Uoc24sZnVuY3Rpb24odHQpe1YobmV3IFVpbnQ4QXJyYXkodHQpKX0sSyl9KX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBmKHNuKX0pfWZ1bmN0aW9uIGMoVil7Zm9yKDswPFYubGVuZ3RoOylWLnNoaWZ0KCkoUil9ZnVuY3Rpb24gbChWKXt0aGlzLmV4Y1B0cj1WLHRoaXMucHRyPVYtMjQsdGhpcy5zZXRfdHlwZT1mdW5jdGlvbihLKXtiZVt0aGlzLnB0cis0Pj4yXT1LfSx0aGlzLmdldF90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIGJlW3RoaXMucHRyKzQ+PjJdfSx0aGlzLnNldF9kZXN0cnVjdG9yPWZ1bmN0aW9uKEspe2JlW3RoaXMucHRyKzg+PjJdPUt9LHRoaXMuZ2V0X2Rlc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gYmVbdGhpcy5wdHIrOD4+Ml19LHRoaXMuc2V0X3JlZmNvdW50PWZ1bmN0aW9uKEspe0dlW3RoaXMucHRyPj4yXT1LfSx0aGlzLnNldF9jYXVnaHQ9ZnVuY3Rpb24oSyl7RWVbdGhpcy5wdHIrMTI+PjBdPUs/MTowfSx0aGlzLmdldF9jYXVnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gRWVbdGhpcy5wdHIrMTI+PjBdIT0wfSx0aGlzLnNldF9yZXRocm93bj1mdW5jdGlvbihLKXtFZVt0aGlzLnB0cisxMz4+MF09Sz8xOjB9LHRoaXMuZ2V0X3JldGhyb3duPWZ1bmN0aW9uKCl7cmV0dXJuIEVlW3RoaXMucHRyKzEzPj4wXSE9MH0sdGhpcy5pbml0PWZ1bmN0aW9uKEssdHQpe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKSx0aGlzLnNldF90eXBlKEspLHRoaXMuc2V0X2Rlc3RydWN0b3IodHQpLHRoaXMuc2V0X3JlZmNvdW50KDApLHRoaXMuc2V0X2NhdWdodCghMSksdGhpcy5zZXRfcmV0aHJvd24oITEpfSx0aGlzLmFkZF9yZWY9ZnVuY3Rpb24oKXtHZVt0aGlzLnB0cj4+Ml0rPTF9LHRoaXMucmVsZWFzZV9yZWY9ZnVuY3Rpb24oKXt2YXIgSz1HZVt0aGlzLnB0cj4+Ml07cmV0dXJuIEdlW3RoaXMucHRyPj4yXT1LLTEsSz09PTF9LHRoaXMuc2V0X2FkanVzdGVkX3B0cj1mdW5jdGlvbihLKXtiZVt0aGlzLnB0cisxNj4+Ml09S30sdGhpcy5nZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKCl7cmV0dXJuIGJlW3RoaXMucHRyKzE2Pj4yXX0sdGhpcy5nZXRfZXhjZXB0aW9uX3B0cj1mdW5jdGlvbigpe2lmKERsKHRoaXMuZ2V0X3R5cGUoKSkpcmV0dXJuIGJlW3RoaXMuZXhjUHRyPj4yXTt2YXIgSz10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtyZXR1cm4gSyE9PTA/Szp0aGlzLmV4Y1B0cn19ZnVuY3Rpb24gcCgpe2Z1bmN0aW9uIFYoKXtpZighbmYmJihuZj0hMCxSLmNhbGxlZFJ1bj0hMCwhTmUpKXtpZihvZT0hMCxjKHBuKSxudChSKSxSLm9uUnVudGltZUluaXRpYWxpemVkJiZSLm9uUnVudGltZUluaXRpYWxpemVkKCksUi5wb3N0UnVuKWZvcih0eXBlb2YgUi5wb3N0UnVuPT0iZnVuY3Rpb24iJiYoUi5wb3N0UnVuPVtSLnBvc3RSdW5dKTtSLnBvc3RSdW4ubGVuZ3RoOylFbi51bnNoaWZ0KFIucG9zdFJ1bi5zaGlmdCgpKTtjKEVuKX19aWYoISgwPFl0KSl7aWYoUi5wcmVSdW4pZm9yKHR5cGVvZiBSLnByZVJ1bj09ImZ1bmN0aW9uIiYmKFIucHJlUnVuPVtSLnByZVJ1bl0pO1IucHJlUnVuLmxlbmd0aDspbG4udW5zaGlmdChSLnByZVJ1bi5zaGlmdCgpKTtjKGxuKSwwPFl0fHwoUi5zZXRTdGF0dXM/KFIuc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtSLnNldFN0YXR1cygiIil9LDEpLFYoKX0sMSkpOlYoKSl9fWZ1bmN0aW9uIGQoKXt9ZnVuY3Rpb24gbShWKXtyZXR1cm4oVnx8ZCkuX19jYWNoZV9ffWZ1bmN0aW9uIF8oVixLKXt2YXIgdHQ9bShLKSxQdD10dFtWXTtyZXR1cm4gUHR8fChQdD1PYmplY3QuY3JlYXRlKChLfHxkKS5wcm90b3R5cGUpLFB0LnB0cj1WLHR0W1ZdPVB0KX1mdW5jdGlvbiBnKFYpe2lmKHR5cGVvZiBWPT0ic3RyaW5nIil7Zm9yKHZhciBLPTAsdHQ9MDt0dDxWLmxlbmd0aDsrK3R0KXt2YXIgUHQ9Vi5jaGFyQ29kZUF0KHR0KTsxMjc+PVB0P0srKzoyMDQ3Pj1QdD9LKz0yOjU1Mjk2PD1QdCYmNTczNDM+PVB0PyhLKz00LCsrdHQpOksrPTN9aWYoSz1BcnJheShLKzEpLHR0PTAsUHQ9Sy5sZW5ndGgsMDxQdCl7UHQ9dHQrUHQtMTtmb3IodmFyIHVlPTA7dWU8Vi5sZW5ndGg7Kyt1ZSl7dmFyIFRlPVYuY2hhckNvZGVBdCh1ZSk7aWYoNTUyOTY8PVRlJiY1NzM0Mz49VGUpe3ZhciBPaT1WLmNoYXJDb2RlQXQoKyt1ZSk7VGU9NjU1MzYrKChUZSYxMDIzKTw8MTApfE9pJjEwMjN9aWYoMTI3Pj1UZSl7aWYodHQ+PVB0KWJyZWFrO0tbdHQrK109VGV9ZWxzZXtpZigyMDQ3Pj1UZSl7aWYodHQrMT49UHQpYnJlYWs7S1t0dCsrXT0xOTJ8VGU+PjZ9ZWxzZXtpZig2NTUzNT49VGUpe2lmKHR0KzI+PVB0KWJyZWFrO0tbdHQrK109MjI0fFRlPj4xMn1lbHNle2lmKHR0KzM+PVB0KWJyZWFrO0tbdHQrK109MjQwfFRlPj4xOCxLW3R0KytdPTEyOHxUZT4+MTImNjN9S1t0dCsrXT0xMjh8VGU+PjYmNjN9S1t0dCsrXT0xMjh8VGUmNjN9fUtbdHRdPTB9cmV0dXJuIFY9Q2UuYWxsb2MoSyxFZSksQ2UuY29weShLLEVlLFYpLFZ9cmV0dXJuIFZ9ZnVuY3Rpb24gYihWKXtpZih0eXBlb2YgVj09Im9iamVjdCIpe3ZhciBLPUNlLmFsbG9jKFYsRWUpO3JldHVybiBDZS5jb3B5KFYsRWUsSyksS31yZXR1cm4gVn1mdW5jdGlvbiBUKCl7dGhyb3ciY2Fubm90IGNvbnN0cnVjdCBhIFZvaWRQdHIsIG5vIGNvbnN0cnVjdG9yIGluIElETCJ9ZnVuY3Rpb24gTygpe3RoaXMucHRyPWNuKCksbShPKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBFKCl7dGhpcy5wdHI9dW8oKSxtKEUpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIHcoKXt0aGlzLnB0cj1sbygpLG0odylbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gQygpe3RoaXMucHRyPUZlKCksbShDKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBNKCl7dGhpcy5wdHI9SXMoKSxtKE0pW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIE4oKXt0aGlzLnB0cj1vbygpLG0oTilbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gRigpe3RoaXMucHRyPU5jKCksbShGKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBJKCl7dGhpcy5wdHI9b3IoKSxtKEkpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIHYoKXt0aGlzLnB0cj12YygpLG0odilbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gQigpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBTdGF0dXMsIG5vIGNvbnN0cnVjdG9yIGluIElETCJ9ZnVuY3Rpb24gQSgpe3RoaXMucHRyPUV1KCksbShBKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBTKCl7dGhpcy5wdHI9RmMoKSxtKFMpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIHgoKXt0aGlzLnB0cj1LYSgpLG0oeClbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gRCgpe3RoaXMucHRyPURjKCksbShEKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiB6KCl7dGhpcy5wdHI9SXUoKSxtKHopW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIGooKXt0aGlzLnB0cj1MdSgpLG0oailbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gaygpe3RoaXMucHRyPXRzKCksbShrKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBxKCl7dGhpcy5wdHI9VnUoKSxtKHEpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIFcoKXt0aGlzLnB0cj1aYSgpLG0oVylbdGhpcy5wdHJdPXRoaXN9ZT1lPT09dm9pZCAwP3t9OmU7dmFyIFI9dHlwZW9mIGU8InUiP2U6e30sbnQsY3Q7Ui5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihWLEspe250PVYsY3Q9S30pO3ZhciBsdD0hMSxfdD0hMTtSLm9uUnVudGltZUluaXRpYWxpemVkPWZ1bmN0aW9uKCl7bHQ9ITAsX3QmJnR5cGVvZiBSLm9uTW9kdWxlTG9hZGVkPT0iZnVuY3Rpb24iJiZSLm9uTW9kdWxlTG9hZGVkKFIpfSxSLm9uTW9kdWxlUGFyc2VkPWZ1bmN0aW9uKCl7X3Q9ITAsbHQmJnR5cGVvZiBSLm9uTW9kdWxlTG9hZGVkPT0iZnVuY3Rpb24iJiZSLm9uTW9kdWxlTG9hZGVkKFIpfSxSLmlzVmVyc2lvblN1cHBvcnRlZD1mdW5jdGlvbihWKXtyZXR1cm4gdHlwZW9mIFYhPSJzdHJpbmciPyExOihWPVYuc3BsaXQoIi4iKSwyPlYubGVuZ3RofHwzPFYubGVuZ3RoPyExOlZbMF09PTEmJjA8PVZbMV0mJjU+PVZbMV0/ITA6IShWWzBdIT0wfHwxMDxWWzFdKSl9O3ZhciBvdD1PYmplY3QuYXNzaWduKHt9LFIpLHh0PXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiLHl0PXR5cGVvZiBpbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLFN0PXR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlPT0ic3RyaW5nIixkdD0iIjtpZihTdCl7dmFyIGZ0PXByKCJmcyIpLEl0PXByKCJwYXRoIik7ZHQ9eXQ/SXQuZGlybmFtZShkdCkrIi8iOl9fZGlybmFtZSsiLyI7dmFyIFZ0PWZ1bmN0aW9uKFYsSyl7cmV0dXJuIFY9Vi5zdGFydHNXaXRoKCJmaWxlOi8vIik/bmV3IFVSTChWKTpJdC5ub3JtYWxpemUoViksZnQucmVhZEZpbGVTeW5jKFYsSz92b2lkIDA6InV0ZjgiKX0sZGU9ZnVuY3Rpb24oVil7cmV0dXJuIFY9VnQoViwhMCksVi5idWZmZXJ8fChWPW5ldyBVaW50OEFycmF5KFYpKSxWfSxzZT1mdW5jdGlvbihWLEssdHQpe1Y9Vi5zdGFydHNXaXRoKCJmaWxlOi8vIik/bmV3IFVSTChWKTpJdC5ub3JtYWxpemUoViksZnQucmVhZEZpbGUoVixmdW5jdGlvbihQdCx1ZSl7UHQ/dHQoUHQpOksodWUuYnVmZmVyKX0pfTsxPHByb2Nlc3MuYXJndi5sZW5ndGgmJnByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXC9nLCIvIikscHJvY2Vzcy5hcmd2LnNsaWNlKDIpLFIuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSJ9fWVsc2UoeHR8fHl0KSYmKHl0P2R0PXNlbGYubG9jYXRpb24uaHJlZjp0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jdXJyZW50U2NyaXB0JiYoZHQ9ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLHQmJihkdD10KSxkdD1kdC5pbmRleE9mKCJibG9iOiIpIT09MD9kdC5zdWJzdHIoMCxkdC5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpOiIiLFZ0PWZ1bmN0aW9uKFYpe3ZhciBLPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gSy5vcGVuKCJHRVQiLFYsITEpLEsuc2VuZChudWxsKSxLLnJlc3BvbnNlVGV4dH0seXQmJihkZT1mdW5jdGlvbihWKXt2YXIgSz1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIEsub3BlbigiR0VUIixWLCExKSxLLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLEsuc2VuZChudWxsKSxuZXcgVWludDhBcnJheShLLnJlc3BvbnNlKX0pLHNlPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIFB0PW5ldyBYTUxIdHRwUmVxdWVzdDtQdC5vcGVuKCJHRVQiLFYsITApLFB0LnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLFB0Lm9ubG9hZD1mdW5jdGlvbigpe1B0LnN0YXR1cz09MjAwfHxQdC5zdGF0dXM9PTAmJlB0LnJlc3BvbnNlP0soUHQucmVzcG9uc2UpOnR0KCl9LFB0Lm9uZXJyb3I9dHQsUHQuc2VuZChudWxsKX0pO3ZhciBsZT1SLnByaW50fHxjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLGZlPVIucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oUixvdCksb3Q9bnVsbDt2YXIgWnQ7Ui53YXNtQmluYXJ5JiYoWnQ9Ui53YXNtQmluYXJ5KSx0eXBlb2YgV2ViQXNzZW1ibHkhPSJvYmplY3QiJiZzKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIFF0LE5lPSExLGdlPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwLEVlLHVuLEdlLGJlLGxuPVtdLHBuPVtdLEVuPVtdLG9lPSExLFl0PTAsVmU9bnVsbCxkbj1udWxsLHNuPSJkcmFjb19kZWNvZGVyLndhc20iO3NuLnN0YXJ0c1dpdGgoImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiKXx8KHNuPW4oc24pKTt2YXIgbW49MCxmbz1bbnVsbCxbXSxbXV0sSG49e2I6ZnVuY3Rpb24oVixLLHR0KXt0aHJvdyBuZXcgbChWKS5pbml0KEssdHQpLG1uKyssVn0sYTpmdW5jdGlvbigpe3MoIiIpfSxnOmZ1bmN0aW9uKFYsSyx0dCl7dW4uY29weVdpdGhpbihWLEssSyt0dCl9LGU6ZnVuY3Rpb24oVil7dmFyIEs9dW4ubGVuZ3RoO2lmKFY+Pj49MCwyMTQ3NDgzNjQ4PFYpcmV0dXJuITE7Zm9yKHZhciB0dD0xOzQ+PXR0O3R0Kj0yKXt2YXIgUHQ9SyooMSsuMi90dCk7UHQ9TWF0aC5taW4oUHQsVisxMDA2NjMyOTYpO3ZhciB1ZT1NYXRoO1B0PU1hdGgubWF4KFYsUHQpLHVlPXVlLm1pbi5jYWxsKHVlLDIxNDc0ODM2NDgsUHQrKDY1NTM2LVB0JTY1NTM2KSU2NTUzNik7dDp7UHQ9UXQuYnVmZmVyO3RyeXtRdC5ncm93KHVlLVB0LmJ5dGVMZW5ndGgrNjU1MzU+Pj4xNiksaSgpO3ZhciBUZT0xO2JyZWFrIHR9Y2F0Y2h7fVRlPXZvaWQgMH1pZihUZSlyZXR1cm4hMH1yZXR1cm4hMX0sZjpmdW5jdGlvbihWKXtyZXR1cm4gNTJ9LGQ6ZnVuY3Rpb24oVixLLHR0LFB0LHVlKXtyZXR1cm4gNzB9LGM6ZnVuY3Rpb24oVixLLHR0LFB0KXtmb3IodmFyIHVlPTAsVGU9MDtUZTx0dDtUZSsrKXt2YXIgT2k9YmVbSz4+Ml0sVmM9YmVbSys0Pj4yXTtLKz04O2Zvcih2YXIgVT0wO1U8VmM7VSsrKXt2YXIgRz11bltPaStVXSxYPWZvW1ZdO0c9PT0wfHxHPT09MTA/KChWPT09MT9sZTpmZSkobyhYLDApKSxYLmxlbmd0aD0wKTpYLnB1c2goRyl9dWUrPVZjfXJldHVybiBiZVtQdD4+Ml09dWUsMH19OyhmdW5jdGlvbigpe2Z1bmN0aW9uIFYodWUsVGUpe1IuYXNtPXVlLmV4cG9ydHMsUXQ9Ui5hc20uaCxpKCkscG4udW5zaGlmdChSLmFzbS5pKSxZdC0tLFIubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmUi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFl0KSxZdD09MCYmKFZlIT09bnVsbCYmKGNsZWFySW50ZXJ2YWwoVmUpLFZlPW51bGwpLGRuJiYodWU9ZG4sZG49bnVsbCx1ZSgpKSl9ZnVuY3Rpb24gSyh1ZSl7Vih1ZS5pbnN0YW5jZSl9ZnVuY3Rpb24gdHQodWUpe3JldHVybiB1KCkudGhlbihmdW5jdGlvbihUZSl7cmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKFRlLFB0KX0pLnRoZW4oZnVuY3Rpb24oVGUpe3JldHVybiBUZX0pLnRoZW4odWUsZnVuY3Rpb24oVGUpe2ZlKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK1RlKSxzKFRlKX0pfXZhciBQdD17YTpIbn07aWYoWXQrKyxSLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJlIubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhZdCksUi5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBSLmluc3RhbnRpYXRlV2FzbShQdCxWKX1jYXRjaCh1ZSl7ZmUoIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrdWUpLGN0KHVlKX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWnR8fHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyE9ImZ1bmN0aW9uInx8c24uc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpfHxzbi5zdGFydHNXaXRoKCJmaWxlOi8vIil8fFN0fHx0eXBlb2YgZmV0Y2ghPSJmdW5jdGlvbiI/dHQoSyk6ZmV0Y2goc24se2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKHVlKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcodWUsUHQpLnRoZW4oSyxmdW5jdGlvbihUZSl7cmV0dXJuIGZlKCJ3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogIitUZSksZmUoImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksdHQoSyl9KX0pfSgpLmNhdGNoKGN0KSx7fX0pKCk7dmFyIFplPVIuX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oWmU9Ui5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1SLmFzbS5rKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGNuPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX0RlY29kZXJCdWZmZXJfMD1mdW5jdGlvbigpe3JldHVybihjbj1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9EZWNvZGVyQnVmZmVyXzA9Ui5hc20ubCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxLZT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9Jbml0XzI9ZnVuY3Rpb24oKXtyZXR1cm4oS2U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfSW5pdF8yPVIuYXNtLm0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saG49Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihobj1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9fX2Rlc3Ryb3lfX18wPVIuYXNtLm4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdW89Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHVvPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfMD1SLmFzbS5vKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHFuPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX3RyYW5zZm9ybV90eXBlXzA9ZnVuY3Rpb24oKXtyZXR1cm4ocW49Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfdHJhbnNmb3JtX3R5cGVfMD1SLmFzbS5wKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEtuPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oS249Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfX19kZXN0cm95X19fMD1SLmFzbS5xKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGxvPVIuX2Vtc2NyaXB0ZW5fYmluZF9HZW9tZXRyeUF0dHJpYnV0ZV9HZW9tZXRyeUF0dHJpYnV0ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKGxvPVIuX2Vtc2NyaXB0ZW5fYmluZF9HZW9tZXRyeUF0dHJpYnV0ZV9HZW9tZXRyeUF0dHJpYnV0ZV8wPVIuYXNtLnIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0semU9Ui5fZW1zY3JpcHRlbl9iaW5kX0dlb21ldHJ5QXR0cmlidXRlX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oemU9Ui5fZW1zY3JpcHRlbl9iaW5kX0dlb21ldHJ5QXR0cmlidXRlX19fZGVzdHJveV9fXzA9Ui5hc20ucykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxGZT1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfUG9pbnRBdHRyaWJ1dGVfMD1mdW5jdGlvbigpe3JldHVybihGZT1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfUG9pbnRBdHRyaWJ1dGVfMD1SLmFzbS50KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LExuPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTG49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX3NpemVfMD1SLmFzbS51KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFduPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9HZXRBdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhXzA9ZnVuY3Rpb24oKXtyZXR1cm4oV249Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX0dldEF0dHJpYnV0ZVRyYW5zZm9ybURhdGFfMD1SLmFzbS52KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHpvPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9hdHRyaWJ1dGVfdHlwZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHpvPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9hdHRyaWJ1dGVfdHlwZV8wPVIuYXNtLncpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scm49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2RhdGFfdHlwZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHJuPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9kYXRhX3R5cGVfMD1SLmFzbS54KS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFJuPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9udW1fY29tcG9uZW50c18wPWZ1bmN0aW9uKCl7cmV0dXJuKFJuPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9udW1fY29tcG9uZW50c18wPVIuYXNtLnkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYXI9Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX25vcm1hbGl6ZWRfMD1mdW5jdGlvbigpe3JldHVybihhcj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfbm9ybWFsaXplZF8wPVIuYXNtLnopLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sUW49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2J5dGVfc3RyaWRlXzA9ZnVuY3Rpb24oKXtyZXR1cm4oUW49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2J5dGVfc3RyaWRlXzA9Ui5hc20uQSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxqbz1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYnl0ZV9vZmZzZXRfMD1mdW5jdGlvbigpe3JldHVybihqbz1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYnl0ZV9vZmZzZXRfMD1SLmFzbS5CKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE5yPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV91bmlxdWVfaWRfMD1mdW5jdGlvbigpe3JldHVybihOcj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfdW5pcXVlX2lkXzA9Ui5hc20uQykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxOcz1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihOcz1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfX19kZXN0cm95X19fMD1SLmFzbS5EKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LElzPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtXzA9ZnVuY3Rpb24oKXtyZXR1cm4oSXM9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fMD1SLmFzbS5FKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFlpPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fSW5pdEZyb21BdHRyaWJ1dGVfMT1mdW5jdGlvbigpe3JldHVybihZaT1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX0luaXRGcm9tQXR0cmlidXRlXzE9Ui5hc20uRikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxJcj1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX3F1YW50aXphdGlvbl9iaXRzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oSXI9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9xdWFudGl6YXRpb25fYml0c18wPVIuYXNtLkcpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sJGk9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9taW5fdmFsdWVfMT1mdW5jdGlvbigpe3JldHVybigkaT1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX21pbl92YWx1ZV8xPVIuYXNtLkgpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdnM9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9yYW5nZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHZzPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fcmFuZ2VfMD1SLmFzbS5JKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGJpPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihiaT1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX19fZGVzdHJveV9fXzA9Ui5hc20uSikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxvbz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtXzA9ZnVuY3Rpb24oKXtyZXR1cm4ob289Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV8wPVIuYXNtLkspLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scG89Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fSW5pdEZyb21BdHRyaWJ1dGVfMT1mdW5jdGlvbigpe3JldHVybihwbz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9Jbml0RnJvbUF0dHJpYnV0ZV8xPVIuYXNtLkwpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdnI9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fcXVhbnRpemF0aW9uX2JpdHNfMD1mdW5jdGlvbigpe3JldHVybih2cj1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9xdWFudGl6YXRpb25fYml0c18wPVIuYXNtLk0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTWM9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihNYz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9fX2Rlc3Ryb3lfX18wPVIuYXNtLk4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTmM9Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfUG9pbnRDbG91ZF8wPWZ1bmN0aW9uKCl7cmV0dXJuKE5jPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX1BvaW50Q2xvdWRfMD1SLmFzbS5PKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERuPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX251bV9hdHRyaWJ1dGVzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRG49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfbnVtX2F0dHJpYnV0ZXNfMD1SLmFzbS5QKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFRpPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX251bV9wb2ludHNfMD1mdW5jdGlvbigpe3JldHVybihUaT1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9udW1fcG9pbnRzXzA9Ui5hc20uUSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMZT1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKExlPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX19fZGVzdHJveV9fXzA9Ui5hc20uUikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxvcj1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9NZXNoXzA9ZnVuY3Rpb24oKXtyZXR1cm4ob3I9Ui5fZW1zY3JpcHRlbl9iaW5kX01lc2hfTWVzaF8wPVIuYXNtLlMpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQXU9Ui5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX2ZhY2VzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oQXU9Ui5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX2ZhY2VzXzA9Ui5hc20uVCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxidT1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fYXR0cmlidXRlc18wPWZ1bmN0aW9uKCl7cmV0dXJuKGJ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9hdHRyaWJ1dGVzXzA9Ui5hc20uVSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxUdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fcG9pbnRzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oVHU9Ui5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX3BvaW50c18wPVIuYXNtLlYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSWM9Ui5fZW1zY3JpcHRlbl9iaW5kX01lc2hfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihJYz1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9fX2Rlc3Ryb3lfX18wPVIuYXNtLlcpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdmM9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhX01ldGFkYXRhXzA9ZnVuY3Rpb24oKXtyZXR1cm4odmM9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhX01ldGFkYXRhXzA9Ui5hc20uWCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxIYT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihIYT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFfX19kZXN0cm95X19fMD1SLmFzbS5ZKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHd1PVIuX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfY29kZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKHd1PVIuX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfY29kZV8wPVIuYXNtLlopLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scWE9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19va18wPWZ1bmN0aW9uKCl7cmV0dXJuKHFhPVIuX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfb2tfMD1SLmFzbS5fKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFppPVIuX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfZXJyb3JfbXNnXzA9ZnVuY3Rpb24oKXtyZXR1cm4oWmk9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19lcnJvcl9tc2dfMD1SLmFzbS4kKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE91PVIuX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihPdT1SLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX19fZGVzdHJveV9fXzA9Ui5hc20uYWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X0RyYWNvRmxvYXQzMkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oRXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X0RyYWNvRmxvYXQzMkFycmF5XzA9Ui5hc20uYmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sUnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oUnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X0dldFZhbHVlXzE9Ui5hc20uY2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sUWk9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihRaT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfc2l6ZV8wPVIuYXNtLmRhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEppPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKEppPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9fX2Rlc3Ryb3lfX18wPVIuYXNtLmVhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEZjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9EcmFjb0ludDhBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEZjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9EcmFjb0ludDhBcnJheV8wPVIuYXNtLmZhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFN1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKFN1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9HZXRWYWx1ZV8xPVIuYXNtLmdhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEN1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oQ3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X3NpemVfMD1SLmFzbS5oYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxGcj1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihGcj1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfX19kZXN0cm95X19fMD1SLmFzbS5pYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxLYT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X0RyYWNvVUludDhBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEthPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfRHJhY29VSW50OEFycmF5XzA9Ui5hc20uamEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV2E9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKFdhPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfR2V0VmFsdWVfMT1SLmFzbS5rYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMYz1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihMYz1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X3NpemVfMD1SLmFzbS5sYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx4dT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oeHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9fX2Rlc3Ryb3lfX18wPVIuYXNtLm1hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfRHJhY29JbnQxNkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oRGM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9EcmFjb0ludDE2QXJyYXlfMD1SLmFzbS5uYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxQdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oUHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9HZXRWYWx1ZV8xPVIuYXNtLm9hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE11PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKE11PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfc2l6ZV8wPVIuYXNtLnBhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE51PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihOdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X19fZGVzdHJveV9fXzA9Ui5hc20ucWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfRHJhY29VSW50MTZBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEl1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X0RyYWNvVUludDE2QXJyYXlfMD1SLmFzbS5yYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx2dT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKHZ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X0dldFZhbHVlXzE9Ui5hc20uc2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEZ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X3NpemVfMD1SLmFzbS50YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxYYT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKFhhPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X19fZGVzdHJveV9fXzA9Ui5hc20udWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9EcmFjb0ludDMyQXJyYXlfMD1mdW5jdGlvbigpe3JldHVybihMdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X0RyYWNvSW50MzJBcnJheV8wPVIuYXNtLnZhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LER1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihEdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X0dldFZhbHVlXzE9Ui5hc20ud2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oQnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9zaXplXzA9Ui5hc20ueGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKFV1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfX19kZXN0cm95X19fMD1SLmFzbS55YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0cz1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9EcmFjb1VJbnQzMkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4odHM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfRHJhY29VSW50MzJBcnJheV8wPVIuYXNtLnphKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGt1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oa3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfR2V0VmFsdWVfMT1SLmFzbS5BYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxHdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oR3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfc2l6ZV8wPVIuYXNtLkJhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEZzPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRnM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfX19kZXN0cm95X19fMD1SLmFzbS5DYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxWdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX01ldGFkYXRhUXVlcmllcl8wPWZ1bmN0aW9uKCl7cmV0dXJuKFZ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfTWV0YWRhdGFRdWVyaWVyXzA9Ui5hc20uRGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0senU9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9IYXNFbnRyeV8yPWZ1bmN0aW9uKCl7cmV0dXJuKHp1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfSGFzRW50cnlfMj1SLmFzbS5FYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxmcj1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEludEVudHJ5XzI9ZnVuY3Rpb24oKXtyZXR1cm4oZnI9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRJbnRFbnRyeV8yPVIuYXNtLkZhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFlhPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0SW50RW50cnlBcnJheV8zPWZ1bmN0aW9uKCl7cmV0dXJuKFlhPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0SW50RW50cnlBcnJheV8zPVIuYXNtLkdhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGp1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0RG91YmxlRW50cnlfMj1mdW5jdGlvbigpe3JldHVybihqdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldERvdWJsZUVudHJ5XzI9Ui5hc20uSGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSHU9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRTdHJpbmdFbnRyeV8yPWZ1bmN0aW9uKCl7cmV0dXJuKEh1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0U3RyaW5nRW50cnlfMj1SLmFzbS5JYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxxdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX051bUVudHJpZXNfMT1mdW5jdGlvbigpe3JldHVybihxdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX051bUVudHJpZXNfMT1SLmFzbS5KYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxIbz1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEVudHJ5TmFtZV8yPWZ1bmN0aW9uKCl7cmV0dXJuKEhvPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0RW50cnlOYW1lXzI9Ui5hc20uS2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sJGE9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKCRhPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfX19kZXN0cm95X19fMD1SLmFzbS5MYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxaYT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVyXzA9ZnVuY3Rpb24oKXtyZXR1cm4oWmE9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2Rlcl8wPVIuYXNtLk1hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LExzPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUFycmF5VG9Qb2ludENsb3VkXzM9ZnVuY3Rpb24oKXtyZXR1cm4oTHM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQXJyYXlUb1BvaW50Q2xvdWRfMz1SLmFzbS5OYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxLdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVBcnJheVRvTWVzaF8zPWZ1bmN0aW9uKCl7cmV0dXJuKEt1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUFycmF5VG9NZXNoXzM9Ui5hc20uT2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQmM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRfMj1mdW5jdGlvbigpe3JldHVybihCYz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZF8yPVIuYXNtLlBhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFd1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkQnlOYW1lXzI9ZnVuY3Rpb24oKXtyZXR1cm4oV3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRCeU5hbWVfMj1SLmFzbS5RYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxRYT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZEJ5TWV0YWRhdGFFbnRyeV8zPWZ1bmN0aW9uKCl7cmV0dXJuKFFhPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkQnlNZXRhZGF0YUVudHJ5XzM9Ui5hc20uUmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSmE9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlXzI9ZnVuY3Rpb24oKXtyZXR1cm4oSmE9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlXzI9Ui5hc20uU2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlQnlVbmlxdWVJZF8yPWZ1bmN0aW9uKCl7cmV0dXJuKFh1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUJ5VW5pcXVlSWRfMj1SLmFzbS5UYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxZdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRNZXRhZGF0YV8xPWZ1bmN0aW9uKCl7cmV0dXJuKFl1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldE1ldGFkYXRhXzE9Ui5hc20uVWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVWM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlTWV0YWRhdGFfMj1mdW5jdGlvbigpe3JldHVybihVYz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVNZXRhZGF0YV8yPVIuYXNtLlZhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEFvPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEZhY2VGcm9tTWVzaF8zPWZ1bmN0aW9uKCl7cmV0dXJuKEFvPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEZhY2VGcm9tTWVzaF8zPVIuYXNtLldhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGtjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlU3RyaXBzRnJvbU1lc2hfMj1mdW5jdGlvbigpe3JldHVybihrYz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZVN0cmlwc0Zyb21NZXNoXzI9Ui5hc20uWGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sJHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVzVUludDE2QXJyYXlfMz1mdW5jdGlvbigpe3JldHVybigkdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZXNVSW50MTZBcnJheV8zPVIuYXNtLllhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFp1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlc1VJbnQzMkFycmF5XzM9ZnVuY3Rpb24oKXtyZXR1cm4oWnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVzVUludDMyQXJyYXlfMz1SLmFzbS5aYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxRdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVGbG9hdF8zPWZ1bmN0aW9uKCl7cmV0dXJuKFF1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUZsb2F0XzM9Ui5hc20uX2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdXI9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybih1cj1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50c18zPVIuYXNtLiRhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEp1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludEZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKEp1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludEZvckFsbFBvaW50c18zPVIuYXNtLmFiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHRsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybih0bD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzXzM9Ui5hc20uYmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZWw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihlbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50c18zPVIuYXNtLmNiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LERzPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDE2Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oRHM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHNfMz1SLmFzbS5kYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxubD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihubD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHNfMz1SLmFzbS5lYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx3aT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKHdpPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDMyRm9yQWxsUG9pbnRzXzM9Ui5hc20uZmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sb2w9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDMyRm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4ob2w9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlVUludDMyRm9yQWxsUG9pbnRzXzM9Ui5hc20uZ2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scmw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRGF0YUFycmF5Rm9yQWxsUG9pbnRzXzU9ZnVuY3Rpb24oKXtyZXR1cm4ocmw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRGF0YUFycmF5Rm9yQWxsUG9pbnRzXzU9Ui5hc20uaGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saWw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybV8xPWZ1bmN0aW9uKCl7cmV0dXJuKGlsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX1NraXBBdHRyaWJ1dGVUcmFuc2Zvcm1fMT1SLmFzbS5pYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxzbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRFbmNvZGVkR2VvbWV0cnlUeXBlX0RlcHJlY2F0ZWRfMT1mdW5jdGlvbigpe3JldHVybihzbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRFbmNvZGVkR2VvbWV0cnlUeXBlX0RlcHJlY2F0ZWRfMT1SLmFzbS5qYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxjbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWRfMj1mdW5jdGlvbigpe3JldHVybihjbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWRfMj1SLmFzbS5rYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxhbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVCdWZmZXJUb01lc2hfMj1mdW5jdGlvbigpe3JldHVybihhbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVCdWZmZXJUb01lc2hfMj1SLmFzbS5sYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxmbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKGZsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX19fZGVzdHJveV9fXzA9Ui5hc20ubWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX0lOVkFMSURfVFJBTlNGT1JNPWZ1bmN0aW9uKCl7cmV0dXJuKHVsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9JTlZBTElEX1RSQU5TRk9STT1SLmFzbS5uYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxsbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfTk9fVFJBTlNGT1JNPWZ1bmN0aW9uKCl7cmV0dXJuKGxsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9OT19UUkFOU0ZPUk09Ui5hc20ub2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX1FVQU5USVpBVElPTl9UUkFOU0ZPUk09ZnVuY3Rpb24oKXtyZXR1cm4ocGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX1FVQU5USVpBVElPTl9UUkFOU0ZPUk09Ui5hc20ucGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX09DVEFIRURST05fVFJBTlNGT1JNPWZ1bmN0aW9uKCl7cmV0dXJuKGRsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9PQ1RBSEVEUk9OX1RSQU5TRk9STT1SLmFzbS5xYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlcz1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9JTlZBTElEPWZ1bmN0aW9uKCl7cmV0dXJuKGVzPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0lOVkFMSUQ9Ui5hc20ucmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sbWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfUE9TSVRJT049ZnVuY3Rpb24oKXtyZXR1cm4obWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfUE9TSVRJT049Ui5hc20uc2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0saGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfTk9STUFMPWZ1bmN0aW9uKCl7cmV0dXJuKGhsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX05PUk1BTD1SLmFzbS50YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxCcz1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9DT0xPUj1mdW5jdGlvbigpe3JldHVybihCcz1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9DT0xPUj1SLmFzbS51YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxHYz1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9URVhfQ09PUkQ9ZnVuY3Rpb24oKXtyZXR1cm4oR2M9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfVEVYX0NPT1JEPVIuYXNtLnZiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LF9sPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0dFTkVSSUM9ZnVuY3Rpb24oKXtyZXR1cm4oX2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfR0VORVJJQz1SLmFzbS53YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx0Zj1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9JTlZBTElEX0dFT01FVFJZX1RZUEU9ZnVuY3Rpb24oKXtyZXR1cm4odGY9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfSU5WQUxJRF9HRU9NRVRSWV9UWVBFPVIuYXNtLnhiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHlsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX1BPSU5UX0NMT1VEPWZ1bmN0aW9uKCl7cmV0dXJuKHlsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX1BPSU5UX0NMT1VEPVIuYXNtLnliKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGdsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX1RSSUFOR1VMQVJfTUVTSD1mdW5jdGlvbigpe3JldHVybihnbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9UUklBTkdVTEFSX01FU0g9Ui5hc20uemIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVkFMSUQ9ZnVuY3Rpb24oKXtyZXR1cm4oQWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVkFMSUQ9Ui5hc20uQWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDg9ZnVuY3Rpb24oKXtyZXR1cm4oYmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDg9Ui5hc20uQmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQ4PWZ1bmN0aW9uKCl7cmV0dXJuKFRsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UOD1SLmFzbS5DYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx3bD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UMTY9ZnVuY3Rpb24oKXtyZXR1cm4od2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDE2PVIuYXNtLkRiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE9sPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UMTY9ZnVuY3Rpb24oKXtyZXR1cm4oT2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQxNj1SLmFzbS5FYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UMzI9ZnVuY3Rpb24oKXtyZXR1cm4oRWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDMyPVIuYXNtLkZiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGVmPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UMzI9ZnVuY3Rpb24oKXtyZXR1cm4oZWY9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQzMj1SLmFzbS5HYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxSbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UNjQ9ZnVuY3Rpb24oKXtyZXR1cm4oUmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX0lOVDY0PVIuYXNtLkhiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFNsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9VSU5UNjQ9ZnVuY3Rpb24oKXtyZXR1cm4oU2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQ2ND1SLmFzbS5JYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxDbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfRkxPQVQzMj1mdW5jdGlvbigpe3JldHVybihDbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfRkxPQVQzMj1SLmFzbS5KYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx4bD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfRkxPQVQ2ND1mdW5jdGlvbigpe3JldHVybih4bD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfRkxPQVQ2ND1SLmFzbS5LYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxQbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfQk9PTD1mdW5jdGlvbigpe3JldHVybihQbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfQk9PTD1SLmFzbS5MYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxNbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVFlQRVNfQ09VTlQ9ZnVuY3Rpb24oKXtyZXR1cm4oTWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1RZUEVTX0NPVU5UPVIuYXNtLk1iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE5sPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX09LPWZ1bmN0aW9uKCl7cmV0dXJuKE5sPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX09LPVIuYXNtLk5iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFVzPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0RSQUNPX0VSUk9SPWZ1bmN0aW9uKCl7cmV0dXJuKFVzPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0RSQUNPX0VSUk9SPVIuYXNtLk9iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LElsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0lPX0VSUk9SPWZ1bmN0aW9uKCl7cmV0dXJuKElsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0lPX0VSUk9SPVIuYXNtLlBiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHZsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0lOVkFMSURfUEFSQU1FVEVSPWZ1bmN0aW9uKCl7cmV0dXJuKHZsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX0lOVkFMSURfUEFSQU1FVEVSPVIuYXNtLlFiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEZsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX1VOU1VQUE9SVEVEX1ZFUlNJT049ZnVuY3Rpb24oKXtyZXR1cm4oRmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfVU5TVVBQT1JURURfVkVSU0lPTj1SLmFzbS5SYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9VTktOT1dOX1ZFUlNJT049ZnVuY3Rpb24oKXtyZXR1cm4oTGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfVU5LTk9XTl9WRVJTSU9OPVIuYXNtLlNiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O1IuX21hbGxvYz1mdW5jdGlvbigpe3JldHVybihSLl9tYWxsb2M9Ui5hc20uVGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sUi5fZnJlZT1mdW5jdGlvbigpe3JldHVybihSLl9mcmVlPVIuYXNtLlViKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O3ZhciBEbD1mdW5jdGlvbigpe3JldHVybihEbD1SLmFzbS5WYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfTtSLl9fX3N0YXJ0X2VtX2pzPTE1ODU2LFIuX19fc3RvcF9lbV9qcz0xNTk1NDt2YXIgbmY7aWYoZG49ZnVuY3Rpb24gVigpe25mfHxwKCksbmZ8fChkbj1WKX0sUi5wcmVJbml0KWZvcih0eXBlb2YgUi5wcmVJbml0PT0iZnVuY3Rpb24iJiYoUi5wcmVJbml0PVtSLnByZUluaXRdKTswPFIucHJlSW5pdC5sZW5ndGg7KVIucHJlSW5pdC5wb3AoKSgpO3AoKSxkLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxkLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1kLGQucHJvdG90eXBlLl9fY2xhc3NfXz1kLGQuX19jYWNoZV9fPXt9LFIuV3JhcHBlck9iamVjdD1kLFIuZ2V0Q2FjaGU9bSxSLndyYXBQb2ludGVyPV8sUi5jYXN0T2JqZWN0PWZ1bmN0aW9uKFYsSyl7cmV0dXJuIF8oVi5wdHIsSyl9LFIuTlVMTD1fKDApLFIuZGVzdHJveT1mdW5jdGlvbihWKXtpZighVi5fX2Rlc3Ryb3lfXyl0aHJvdyJFcnJvcjogQ2Fubm90IGRlc3Ryb3kgb2JqZWN0LiAoRGlkIHlvdSBjcmVhdGUgaXQgeW91cnNlbGY/KSI7Vi5fX2Rlc3Ryb3lfXygpLGRlbGV0ZSBtKFYuX19jbGFzc19fKVtWLnB0cl19LFIuY29tcGFyZT1mdW5jdGlvbihWLEspe3JldHVybiBWLnB0cj09PUsucHRyfSxSLmdldFBvaW50ZXI9ZnVuY3Rpb24oVil7cmV0dXJuIFYucHRyfSxSLmdldENsYXNzPWZ1bmN0aW9uKFYpe3JldHVybiBWLl9fY2xhc3NfX307dmFyIENlPXtidWZmZXI6MCxzaXplOjAscG9zOjAsdGVtcHM6W10sbmVlZGVkOjAscHJlcGFyZTpmdW5jdGlvbigpe2lmKENlLm5lZWRlZCl7Zm9yKHZhciBWPTA7VjxDZS50ZW1wcy5sZW5ndGg7VisrKVIuX2ZyZWUoQ2UudGVtcHNbVl0pO0NlLnRlbXBzLmxlbmd0aD0wLFIuX2ZyZWUoQ2UuYnVmZmVyKSxDZS5idWZmZXI9MCxDZS5zaXplKz1DZS5uZWVkZWQsQ2UubmVlZGVkPTB9Q2UuYnVmZmVyfHwoQ2Uuc2l6ZSs9MTI4LENlLmJ1ZmZlcj1SLl9tYWxsb2MoQ2Uuc2l6ZSksQ2UuYnVmZmVyfHxzKHZvaWQgMCkpLENlLnBvcz0wfSxhbGxvYzpmdW5jdGlvbihWLEspe3JldHVybiBDZS5idWZmZXJ8fHModm9pZCAwKSxWPVYubGVuZ3RoKksuQllURVNfUEVSX0VMRU1FTlQsVj1WKzcmLTgsQ2UucG9zK1Y+PUNlLnNpemU/KDA8Vnx8cyh2b2lkIDApLENlLm5lZWRlZCs9VixLPVIuX21hbGxvYyhWKSxDZS50ZW1wcy5wdXNoKEspKTooSz1DZS5idWZmZXIrQ2UucG9zLENlLnBvcys9ViksS30sY29weTpmdW5jdGlvbihWLEssdHQpe3N3aXRjaCh0dD4+Pj0wLEsuQllURVNfUEVSX0VMRU1FTlQpe2Nhc2UgMjp0dD4+Pj0xO2JyZWFrO2Nhc2UgNDp0dD4+Pj0yO2JyZWFrO2Nhc2UgODp0dD4+Pj0zfWZvcih2YXIgUHQ9MDtQdDxWLmxlbmd0aDtQdCsrKUtbdHQrUHRdPVZbUHRdfX07cmV0dXJuIFQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLFQucHJvdG90eXBlLmNvbnN0cnVjdG9yPVQsVC5wcm90b3R5cGUuX19jbGFzc19fPVQsVC5fX2NhY2hlX189e30sUi5Wb2lkUHRyPVQsVC5wcm90b3R5cGUuX19kZXN0cm95X189VC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtaZSh0aGlzLnB0cil9LE8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLE8ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU8sTy5wcm90b3R5cGUuX19jbGFzc19fPU8sTy5fX2NhY2hlX189e30sUi5EZWNvZGVyQnVmZmVyPU8sTy5wcm90b3R5cGUuSW5pdD1PLnByb3RvdHlwZS5Jbml0PWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO0NlLnByZXBhcmUoKSx0eXBlb2YgVj09Im9iamVjdCImJihWPWIoVikpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLEtlKHR0LFYsSyl9LE8ucHJvdG90eXBlLl9fZGVzdHJveV9fPU8ucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7aG4odGhpcy5wdHIpfSxFLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxFLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1FLEUucHJvdG90eXBlLl9fY2xhc3NfXz1FLEUuX19jYWNoZV9fPXt9LFIuQXR0cmlidXRlVHJhbnNmb3JtRGF0YT1FLEUucHJvdG90eXBlLnRyYW5zZm9ybV90eXBlPUUucHJvdG90eXBlLnRyYW5zZm9ybV90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHFuKHRoaXMucHRyKX0sRS5wcm90b3R5cGUuX19kZXN0cm95X189RS5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtLbih0aGlzLnB0cil9LHcucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLHcucHJvdG90eXBlLmNvbnN0cnVjdG9yPXcsdy5wcm90b3R5cGUuX19jbGFzc19fPXcsdy5fX2NhY2hlX189e30sUi5HZW9tZXRyeUF0dHJpYnV0ZT13LHcucHJvdG90eXBlLl9fZGVzdHJveV9fPXcucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7emUodGhpcy5wdHIpfSxDLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxDLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1DLEMucHJvdG90eXBlLl9fY2xhc3NfXz1DLEMuX19jYWNoZV9fPXt9LFIuUG9pbnRBdHRyaWJ1dGU9QyxDLnByb3RvdHlwZS5zaXplPUMucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gTG4odGhpcy5wdHIpfSxDLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhPUMucHJvdG90eXBlLkdldEF0dHJpYnV0ZVRyYW5zZm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4gXyhXbih0aGlzLnB0ciksRSl9LEMucHJvdG90eXBlLmF0dHJpYnV0ZV90eXBlPUMucHJvdG90eXBlLmF0dHJpYnV0ZV90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHpvKHRoaXMucHRyKX0sQy5wcm90b3R5cGUuZGF0YV90eXBlPUMucHJvdG90eXBlLmRhdGFfdHlwZT1mdW5jdGlvbigpe3JldHVybiBybih0aGlzLnB0cil9LEMucHJvdG90eXBlLm51bV9jb21wb25lbnRzPUMucHJvdG90eXBlLm51bV9jb21wb25lbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIFJuKHRoaXMucHRyKX0sQy5wcm90b3R5cGUubm9ybWFsaXplZD1DLnByb3RvdHlwZS5ub3JtYWxpemVkPWZ1bmN0aW9uKCl7cmV0dXJuISFhcih0aGlzLnB0cil9LEMucHJvdG90eXBlLmJ5dGVfc3RyaWRlPUMucHJvdG90eXBlLmJ5dGVfc3RyaWRlPWZ1bmN0aW9uKCl7cmV0dXJuIFFuKHRoaXMucHRyKX0sQy5wcm90b3R5cGUuYnl0ZV9vZmZzZXQ9Qy5wcm90b3R5cGUuYnl0ZV9vZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gam8odGhpcy5wdHIpfSxDLnByb3RvdHlwZS51bmlxdWVfaWQ9Qy5wcm90b3R5cGUudW5pcXVlX2lkPWZ1bmN0aW9uKCl7cmV0dXJuIE5yKHRoaXMucHRyKX0sQy5wcm90b3R5cGUuX19kZXN0cm95X189Qy5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtOcyh0aGlzLnB0cil9LE0ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLE0ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU0sTS5wcm90b3R5cGUuX19jbGFzc19fPU0sTS5fX2NhY2hlX189e30sUi5BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm09TSxNLnByb3RvdHlwZS5Jbml0RnJvbUF0dHJpYnV0ZT1NLnByb3RvdHlwZS5Jbml0RnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksISFZaShLLFYpfSxNLnByb3RvdHlwZS5xdWFudGl6YXRpb25fYml0cz1NLnByb3RvdHlwZS5xdWFudGl6YXRpb25fYml0cz1mdW5jdGlvbigpe3JldHVybiBJcih0aGlzLnB0cil9LE0ucHJvdG90eXBlLm1pbl92YWx1ZT1NLnByb3RvdHlwZS5taW5fdmFsdWU9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLCRpKEssVil9LE0ucHJvdG90eXBlLnJhbmdlPU0ucHJvdG90eXBlLnJhbmdlPWZ1bmN0aW9uKCl7cmV0dXJuIHZzKHRoaXMucHRyKX0sTS5wcm90b3R5cGUuX19kZXN0cm95X189TS5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtiaSh0aGlzLnB0cil9LE4ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLE4ucHJvdG90eXBlLmNvbnN0cnVjdG9yPU4sTi5wcm90b3R5cGUuX19jbGFzc19fPU4sTi5fX2NhY2hlX189e30sUi5BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtPU4sTi5wcm90b3R5cGUuSW5pdEZyb21BdHRyaWJ1dGU9Ti5wcm90b3R5cGUuSW5pdEZyb21BdHRyaWJ1dGU9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLCEhcG8oSyxWKX0sTi5wcm90b3R5cGUucXVhbnRpemF0aW9uX2JpdHM9Ti5wcm90b3R5cGUucXVhbnRpemF0aW9uX2JpdHM9ZnVuY3Rpb24oKXtyZXR1cm4gdnIodGhpcy5wdHIpfSxOLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1OLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe01jKHRoaXMucHRyKX0sRi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksRi5wcm90b3R5cGUuY29uc3RydWN0b3I9RixGLnByb3RvdHlwZS5fX2NsYXNzX189RixGLl9fY2FjaGVfXz17fSxSLlBvaW50Q2xvdWQ9RixGLnByb3RvdHlwZS5udW1fYXR0cmlidXRlcz1GLnByb3RvdHlwZS5udW1fYXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBEbih0aGlzLnB0cil9LEYucHJvdG90eXBlLm51bV9wb2ludHM9Ri5wcm90b3R5cGUubnVtX3BvaW50cz1mdW5jdGlvbigpe3JldHVybiBUaSh0aGlzLnB0cil9LEYucHJvdG90eXBlLl9fZGVzdHJveV9fPUYucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7TGUodGhpcy5wdHIpfSxJLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxJLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1JLEkucHJvdG90eXBlLl9fY2xhc3NfXz1JLEkuX19jYWNoZV9fPXt9LFIuTWVzaD1JLEkucHJvdG90eXBlLm51bV9mYWNlcz1JLnByb3RvdHlwZS5udW1fZmFjZXM9ZnVuY3Rpb24oKXtyZXR1cm4gQXUodGhpcy5wdHIpfSxJLnByb3RvdHlwZS5udW1fYXR0cmlidXRlcz1JLnByb3RvdHlwZS5udW1fYXR0cmlidXRlcz1mdW5jdGlvbigpe3JldHVybiBidSh0aGlzLnB0cil9LEkucHJvdG90eXBlLm51bV9wb2ludHM9SS5wcm90b3R5cGUubnVtX3BvaW50cz1mdW5jdGlvbigpe3JldHVybiBUdSh0aGlzLnB0cil9LEkucHJvdG90eXBlLl9fZGVzdHJveV9fPUkucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7SWModGhpcy5wdHIpfSx2LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSx2LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj12LHYucHJvdG90eXBlLl9fY2xhc3NfXz12LHYuX19jYWNoZV9fPXt9LFIuTWV0YWRhdGE9dix2LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz12LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0hhKHRoaXMucHRyKX0sQi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksQi5wcm90b3R5cGUuY29uc3RydWN0b3I9QixCLnByb3RvdHlwZS5fX2NsYXNzX189QixCLl9fY2FjaGVfXz17fSxSLlN0YXR1cz1CLEIucHJvdG90eXBlLmNvZGU9Qi5wcm90b3R5cGUuY29kZT1mdW5jdGlvbigpe3JldHVybiB3dSh0aGlzLnB0cil9LEIucHJvdG90eXBlLm9rPUIucHJvdG90eXBlLm9rPWZ1bmN0aW9uKCl7cmV0dXJuISFxYSh0aGlzLnB0cil9LEIucHJvdG90eXBlLmVycm9yX21zZz1CLnByb3RvdHlwZS5lcnJvcl9tc2c9ZnVuY3Rpb24oKXtyZXR1cm4gcihaaSh0aGlzLnB0cikpfSxCLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1CLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe091KHRoaXMucHRyKX0sQS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxBLnByb3RvdHlwZS5fX2NsYXNzX189QSxBLl9fY2FjaGVfXz17fSxSLkRyYWNvRmxvYXQzMkFycmF5PUEsQS5wcm90b3R5cGUuR2V0VmFsdWU9QS5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLFJ1KEssVil9LEEucHJvdG90eXBlLnNpemU9QS5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBRaSh0aGlzLnB0cil9LEEucHJvdG90eXBlLl9fZGVzdHJveV9fPUEucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7SmkodGhpcy5wdHIpfSxTLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxTLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TLFMucHJvdG90eXBlLl9fY2xhc3NfXz1TLFMuX19jYWNoZV9fPXt9LFIuRHJhY29JbnQ4QXJyYXk9UyxTLnByb3RvdHlwZS5HZXRWYWx1ZT1TLnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksU3UoSyxWKX0sUy5wcm90b3R5cGUuc2l6ZT1TLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIEN1KHRoaXMucHRyKX0sUy5wcm90b3R5cGUuX19kZXN0cm95X189Uy5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtGcih0aGlzLnB0cil9LHgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLHgucHJvdG90eXBlLmNvbnN0cnVjdG9yPXgseC5wcm90b3R5cGUuX19jbGFzc19fPXgseC5fX2NhY2hlX189e30sUi5EcmFjb1VJbnQ4QXJyYXk9eCx4LnByb3RvdHlwZS5HZXRWYWx1ZT14LnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksV2EoSyxWKX0seC5wcm90b3R5cGUuc2l6ZT14LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIExjKHRoaXMucHRyKX0seC5wcm90b3R5cGUuX19kZXN0cm95X189eC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXt4dSh0aGlzLnB0cil9LEQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLEQucHJvdG90eXBlLmNvbnN0cnVjdG9yPUQsRC5wcm90b3R5cGUuX19jbGFzc19fPUQsRC5fX2NhY2hlX189e30sUi5EcmFjb0ludDE2QXJyYXk9RCxELnByb3RvdHlwZS5HZXRWYWx1ZT1ELnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksUHUoSyxWKX0sRC5wcm90b3R5cGUuc2l6ZT1ELnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIE11KHRoaXMucHRyKX0sRC5wcm90b3R5cGUuX19kZXN0cm95X189RC5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtOdSh0aGlzLnB0cil9LHoucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLHoucHJvdG90eXBlLmNvbnN0cnVjdG9yPXosei5wcm90b3R5cGUuX19jbGFzc19fPXosei5fX2NhY2hlX189e30sUi5EcmFjb1VJbnQxNkFycmF5PXosei5wcm90b3R5cGUuR2V0VmFsdWU9ei5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLHZ1KEssVil9LHoucHJvdG90eXBlLnNpemU9ei5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBGdSh0aGlzLnB0cil9LHoucHJvdG90eXBlLl9fZGVzdHJveV9fPXoucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7WGEodGhpcy5wdHIpfSxqLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxqLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1qLGoucHJvdG90eXBlLl9fY2xhc3NfXz1qLGouX19jYWNoZV9fPXt9LFIuRHJhY29JbnQzMkFycmF5PWosai5wcm90b3R5cGUuR2V0VmFsdWU9ai5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLER1KEssVil9LGoucHJvdG90eXBlLnNpemU9ai5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBCdSh0aGlzLnB0cil9LGoucHJvdG90eXBlLl9fZGVzdHJveV9fPWoucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7VXUodGhpcy5wdHIpfSxrLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxrLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1rLGsucHJvdG90eXBlLl9fY2xhc3NfXz1rLGsuX19jYWNoZV9fPXt9LFIuRHJhY29VSW50MzJBcnJheT1rLGsucHJvdG90eXBlLkdldFZhbHVlPWsucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKFYpe3ZhciBLPXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxrdShLLFYpfSxrLnByb3RvdHlwZS5zaXplPWsucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gR3UodGhpcy5wdHIpfSxrLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1rLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0ZzKHRoaXMucHRyKX0scS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSkscS5wcm90b3R5cGUuY29uc3RydWN0b3I9cSxxLnByb3RvdHlwZS5fX2NsYXNzX189cSxxLl9fY2FjaGVfXz17fSxSLk1ldGFkYXRhUXVlcmllcj1xLHEucHJvdG90eXBlLkhhc0VudHJ5PXEucHJvdG90eXBlLkhhc0VudHJ5PWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBDZS5wcmVwYXJlKCksViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6ZyhLKSwhIXp1KHR0LFYsSyl9LHEucHJvdG90eXBlLkdldEludEVudHJ5PXEucHJvdG90eXBlLkdldEludEVudHJ5PWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBDZS5wcmVwYXJlKCksViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6ZyhLKSxmcih0dCxWLEspfSxxLnByb3RvdHlwZS5HZXRJbnRFbnRyeUFycmF5PXEucHJvdG90eXBlLkdldEludEVudHJ5QXJyYXk9ZnVuY3Rpb24oVixLLHR0KXt2YXIgUHQ9dGhpcy5wdHI7Q2UucHJlcGFyZSgpLFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOmcoSyksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLFlhKFB0LFYsSyx0dCl9LHEucHJvdG90eXBlLkdldERvdWJsZUVudHJ5PXEucHJvdG90eXBlLkdldERvdWJsZUVudHJ5PWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBDZS5wcmVwYXJlKCksViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6ZyhLKSxqdSh0dCxWLEspfSxxLnByb3RvdHlwZS5HZXRTdHJpbmdFbnRyeT1xLnByb3RvdHlwZS5HZXRTdHJpbmdFbnRyeT1mdW5jdGlvbihWLEspe3ZhciB0dD10aGlzLnB0cjtyZXR1cm4gQ2UucHJlcGFyZSgpLFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOmcoSykscihIdSh0dCxWLEspKX0scS5wcm90b3R5cGUuTnVtRW50cmllcz1xLnByb3RvdHlwZS5OdW1FbnRyaWVzPWZ1bmN0aW9uKFYpe3ZhciBLPXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxxdShLLFYpfSxxLnByb3RvdHlwZS5HZXRFbnRyeU5hbWU9cS5wcm90b3R5cGUuR2V0RW50cnlOYW1lPWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxyKEhvKHR0LFYsSykpfSxxLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1xLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpeyRhKHRoaXMucHRyKX0sVy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksVy5wcm90b3R5cGUuY29uc3RydWN0b3I9VyxXLnByb3RvdHlwZS5fX2NsYXNzX189VyxXLl9fY2FjaGVfXz17fSxSLkRlY29kZXI9VyxXLnByb3RvdHlwZS5EZWNvZGVBcnJheVRvUG9pbnRDbG91ZD1XLnByb3RvdHlwZS5EZWNvZGVBcnJheVRvUG9pbnRDbG91ZD1mdW5jdGlvbihWLEssdHQpe3ZhciBQdD10aGlzLnB0cjtyZXR1cm4gQ2UucHJlcGFyZSgpLHR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9YihWKSksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLF8oTHMoUHQsVixLLHR0KSxCKX0sVy5wcm90b3R5cGUuRGVjb2RlQXJyYXlUb01lc2g9Vy5wcm90b3R5cGUuRGVjb2RlQXJyYXlUb01lc2g9ZnVuY3Rpb24oVixLLHR0KXt2YXIgUHQ9dGhpcy5wdHI7cmV0dXJuIENlLnByZXBhcmUoKSx0eXBlb2YgVj09Im9iamVjdCImJihWPWIoVikpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSxfKEt1KFB0LFYsSyx0dCksQil9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkPWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxCYyh0dCxWLEspfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZEJ5TmFtZT1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZEJ5TmFtZT1mdW5jdGlvbihWLEspe3ZhciB0dD10aGlzLnB0cjtyZXR1cm4gQ2UucHJlcGFyZSgpLFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOmcoSyksV3UodHQsVixLKX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWRCeU1ldGFkYXRhRW50cnk9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWRCeU1ldGFkYXRhRW50cnk9ZnVuY3Rpb24oVixLLHR0KXt2YXIgUHQ9dGhpcy5wdHI7cmV0dXJuIENlLnByZXBhcmUoKSxWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLPUsmJnR5cGVvZiBLPT0ib2JqZWN0Ij9LLnB0cjpnKEspLHR0PXR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiP3R0LnB0cjpnKHR0KSxRYShQdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGU9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlPWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxfKEphKHR0LFYsSyksQyl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUJ5VW5pcXVlSWQ9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlQnlVbmlxdWVJZD1mdW5jdGlvbihWLEspe3ZhciB0dD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksXyhYdSh0dCxWLEspLEMpfSxXLnByb3RvdHlwZS5HZXRNZXRhZGF0YT1XLnByb3RvdHlwZS5HZXRNZXRhZGF0YT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksXyhZdShLLFYpLHYpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVNZXRhZGF0YT1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVNZXRhZGF0YT1mdW5jdGlvbihWLEspe3ZhciB0dD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksXyhVYyh0dCxWLEspLHYpfSxXLnByb3RvdHlwZS5HZXRGYWNlRnJvbU1lc2g9Vy5wcm90b3R5cGUuR2V0RmFjZUZyb21NZXNoPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIFB0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISFBbyhQdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRUcmlhbmdsZVN0cmlwc0Zyb21NZXNoPVcucHJvdG90eXBlLkdldFRyaWFuZ2xlU3RyaXBzRnJvbU1lc2g9ZnVuY3Rpb24oVixLKXt2YXIgdHQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLGtjKHR0LFYsSyl9LFcucHJvdG90eXBlLkdldFRyaWFuZ2xlc1VJbnQxNkFycmF5PVcucHJvdG90eXBlLkdldFRyaWFuZ2xlc1VJbnQxNkFycmF5PWZ1bmN0aW9uKFYsSyx0dCl7dmFyIFB0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISEkdShQdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRUcmlhbmdsZXNVSW50MzJBcnJheT1XLnByb3RvdHlwZS5HZXRUcmlhbmdsZXNVSW50MzJBcnJheT1mdW5jdGlvbihWLEssdHQpe3ZhciBQdD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLCEhWnUoUHQsVixLLHR0KX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlRmxvYXQ9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlRmxvYXQ9ZnVuY3Rpb24oVixLLHR0KXt2YXIgUHQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIVF1KFB0LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIFB0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISF1cihQdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnRGb3JBbGxQb2ludHM9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIFB0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISFKdShQdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHM9ZnVuY3Rpb24oVixLLHR0KXt2YXIgUHQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIXRsKFB0LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIFB0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISFlbChQdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50cz1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50cz1mdW5jdGlvbihWLEssdHQpe3ZhciBQdD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLCEhRHMoUHQsVixLLHR0KX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cz1mdW5jdGlvbihWLEssdHQpe3ZhciBQdD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLCEhbmwoUHQsVixLLHR0KX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHM9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHM9ZnVuY3Rpb24oVixLLHR0KXt2YXIgUHQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIXdpKFB0LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50cz1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHM9ZnVuY3Rpb24oVixLLHR0KXt2YXIgUHQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIW9sKFB0LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZURhdGFBcnJheUZvckFsbFBvaW50cz1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVEYXRhQXJyYXlGb3JBbGxQb2ludHM9ZnVuY3Rpb24oVixLLHR0LFB0LHVlKXt2YXIgVGU9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSxQdCYmdHlwZW9mIFB0PT0ib2JqZWN0IiYmKFB0PVB0LnB0ciksdWUmJnR5cGVvZiB1ZT09Im9iamVjdCImJih1ZT11ZS5wdHIpLCEhcmwoVGUsVixLLHR0LFB0LHVlKX0sVy5wcm90b3R5cGUuU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybT1XLnByb3RvdHlwZS5Ta2lwQXR0cmlidXRlVHJhbnNmb3JtPWZ1bmN0aW9uKFYpe3ZhciBLPXRoaXMucHRyO1YmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLGlsKEssVil9LFcucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZD1XLnByb3RvdHlwZS5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlX0RlcHJlY2F0ZWQ9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLHNsKEssVil9LFcucHJvdG90eXBlLkRlY29kZUJ1ZmZlclRvUG9pbnRDbG91ZD1XLnByb3RvdHlwZS5EZWNvZGVCdWZmZXJUb1BvaW50Q2xvdWQ9ZnVuY3Rpb24oVixLKXt2YXIgdHQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLF8oY2wodHQsVixLKSxCKX0sVy5wcm90b3R5cGUuRGVjb2RlQnVmZmVyVG9NZXNoPVcucHJvdG90eXBlLkRlY29kZUJ1ZmZlclRvTWVzaD1mdW5jdGlvbihWLEspe3ZhciB0dD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksXyhhbCh0dCxWLEspLEIpfSxXLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1XLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe2ZsKHRoaXMucHRyKX0sZnVuY3Rpb24oKXtmdW5jdGlvbiBWKCl7Ui5BVFRSSUJVVEVfSU5WQUxJRF9UUkFOU0ZPUk09dWwoKSxSLkFUVFJJQlVURV9OT19UUkFOU0ZPUk09bGwoKSxSLkFUVFJJQlVURV9RVUFOVElaQVRJT05fVFJBTlNGT1JNPXBsKCksUi5BVFRSSUJVVEVfT0NUQUhFRFJPTl9UUkFOU0ZPUk09ZGwoKSxSLklOVkFMSUQ9ZXMoKSxSLlBPU0lUSU9OPW1sKCksUi5OT1JNQUw9aGwoKSxSLkNPTE9SPUJzKCksUi5URVhfQ09PUkQ9R2MoKSxSLkdFTkVSSUM9X2woKSxSLklOVkFMSURfR0VPTUVUUllfVFlQRT10ZigpLFIuUE9JTlRfQ0xPVUQ9eWwoKSxSLlRSSUFOR1VMQVJfTUVTSD1nbCgpLFIuRFRfSU5WQUxJRD1BbCgpLFIuRFRfSU5UOD1ibCgpLFIuRFRfVUlOVDg9VGwoKSxSLkRUX0lOVDE2PXdsKCksUi5EVF9VSU5UMTY9T2woKSxSLkRUX0lOVDMyPUVsKCksUi5EVF9VSU5UMzI9ZWYoKSxSLkRUX0lOVDY0PVJsKCksUi5EVF9VSU5UNjQ9U2woKSxSLkRUX0ZMT0FUMzI9Q2woKSxSLkRUX0ZMT0FUNjQ9eGwoKSxSLkRUX0JPT0w9UGwoKSxSLkRUX1RZUEVTX0NPVU5UPU1sKCksUi5PSz1ObCgpLFIuRFJBQ09fRVJST1I9VXMoKSxSLklPX0VSUk9SPUlsKCksUi5JTlZBTElEX1BBUkFNRVRFUj12bCgpLFIuVU5TVVBQT1JURURfVkVSU0lPTj1GbCgpLFIuVU5LTk9XTl9WRVJTSU9OPUxsKCl9b2U/VigpOnBuLnVuc2hpZnQoVil9KCksdHlwZW9mIFIub25Nb2R1bGVQYXJzZWQ9PSJmdW5jdGlvbiImJlIub25Nb2R1bGVQYXJzZWQoKSxSLkRlY29kZXIucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGU9ZnVuY3Rpb24oVil7aWYoVi5fX2NsYXNzX18mJlYuX19jbGFzc19fPT09Ui5EZWNvZGVyQnVmZmVyKXJldHVybiBSLkRlY29kZXIucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZChWKTtpZig4PlYuYnl0ZUxlbmd0aClyZXR1cm4gUi5JTlZBTElEX0dFT01FVFJZX1RZUEU7c3dpdGNoKFZbN10pe2Nhc2UgMDpyZXR1cm4gUi5QT0lOVF9DTE9VRDtjYXNlIDE6cmV0dXJuIFIuVFJJQU5HVUxBUl9NRVNIO2RlZmF1bHQ6cmV0dXJuIFIuSU5WQUxJRF9HRU9NRVRSWV9UWVBFfX0sZS5yZWFkeX19KCk7dHlwZW9mIHB1PT0ib2JqZWN0IiYmdHlwZW9mIEVnPT0ib2JqZWN0Ij9FZy5leHBvcnRzPU9nOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIE9nfSk6dHlwZW9mIHB1PT0ib2JqZWN0IiYmKHB1LkRyYWNvRGVjb2Rlck1vZHVsZT1PZyl9KTt2YXIgQ2c9e307cGUoQ2cse2RlZmF1bHQ6KCk9PnpVfSk7ZnVuY3Rpb24gRlUodCxlKXtsZXQgbj10Lm51bV9wb2ludHMoKSxvPXQubnVtX2ZhY2VzKCkscj1uZXcgTWUuRHJhY29JbnQzMkFycmF5LGk9byozLHM9RnQuY3JlYXRlVHlwZWRBcnJheShuLGkpLGY9MDtmb3IobGV0IHU9MDt1PG87Kyt1KWUuR2V0RmFjZUZyb21NZXNoKHQsdSxyKSxzW2YrMF09ci5HZXRWYWx1ZSgwKSxzW2YrMV09ci5HZXRWYWx1ZSgxKSxzW2YrMl09ci5HZXRWYWx1ZSgyKSxmKz0zO3JldHVybiBNZS5kZXN0cm95KHIpLHt0eXBlZEFycmF5OnMsbnVtYmVyT2ZJbmRpY2VzOml9fWZ1bmN0aW9uIExVKHQsZSxuLG8scil7bGV0IGkscztvLnF1YW50aXphdGlvbkJpdHM8PTg/KHM9bmV3IE1lLkRyYWNvVUludDhBcnJheSxpPW5ldyBVaW50OEFycmF5KHIpLGUuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHModCxuLHMpKTpvLnF1YW50aXphdGlvbkJpdHM8PTE2PyhzPW5ldyBNZS5EcmFjb1VJbnQxNkFycmF5LGk9bmV3IFVpbnQxNkFycmF5KHIpLGUuR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzKHQsbixzKSk6KHM9bmV3IE1lLkRyYWNvRmxvYXQzMkFycmF5LGk9bmV3IEZsb2F0MzJBcnJheShyKSxlLkdldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzKHQsbixzKSk7Zm9yKGxldCBmPTA7ZjxyOysrZilpW2ZdPXMuR2V0VmFsdWUoZik7cmV0dXJuIE1lLmRlc3Ryb3kocyksaX1mdW5jdGlvbiBEVSh0LGUsbixvKXtsZXQgcixpO3N3aXRjaChuLmRhdGFfdHlwZSgpKXtjYXNlIDE6Y2FzZSAxMTppPW5ldyBNZS5EcmFjb0ludDhBcnJheSxyPW5ldyBJbnQ4QXJyYXkobyksZS5HZXRBdHRyaWJ1dGVJbnQ4Rm9yQWxsUG9pbnRzKHQsbixpKTticmVhaztjYXNlIDI6aT1uZXcgTWUuRHJhY29VSW50OEFycmF5LHI9bmV3IFVpbnQ4QXJyYXkobyksZS5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cyh0LG4saSk7YnJlYWs7Y2FzZSAzOmk9bmV3IE1lLkRyYWNvSW50MTZBcnJheSxyPW5ldyBJbnQxNkFycmF5KG8pLGUuR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHModCxuLGkpO2JyZWFrO2Nhc2UgNDppPW5ldyBNZS5EcmFjb1VJbnQxNkFycmF5LHI9bmV3IFVpbnQxNkFycmF5KG8pLGUuR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzKHQsbixpKTticmVhaztjYXNlIDU6Y2FzZSA3Omk9bmV3IE1lLkRyYWNvSW50MzJBcnJheSxyPW5ldyBJbnQzMkFycmF5KG8pLGUuR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHModCxuLGkpO2JyZWFrO2Nhc2UgNjpjYXNlIDg6aT1uZXcgTWUuRHJhY29VSW50MzJBcnJheSxyPW5ldyBVaW50MzJBcnJheShvKSxlLkdldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50cyh0LG4saSk7YnJlYWs7Y2FzZSA5OmNhc2UgMTA6aT1uZXcgTWUuRHJhY29GbG9hdDMyQXJyYXkscj1uZXcgRmxvYXQzMkFycmF5KG8pLGUuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHModCxuLGkpO2JyZWFrfWZvcihsZXQgcz0wO3M8bzsrK3MpcltzXT1pLkdldFZhbHVlKHMpO3JldHVybiBNZS5kZXN0cm95KGkpLHJ9ZnVuY3Rpb24geTIodCxlLG4pe2xldCBvPXQubnVtX3BvaW50cygpLHI9bi5udW1fY29tcG9uZW50cygpLGkscz1uZXcgTWUuQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtO2lmKHMuSW5pdEZyb21BdHRyaWJ1dGUobikpe2xldCBsPW5ldyBBcnJheShyKTtmb3IobGV0IHA9MDtwPHI7KytwKWxbcF09cy5taW5fdmFsdWUocCk7aT17cXVhbnRpemF0aW9uQml0czpzLnF1YW50aXphdGlvbl9iaXRzKCksbWluVmFsdWVzOmwscmFuZ2U6cy5yYW5nZSgpLG9jdEVuY29kZWQ6ITF9fU1lLmRlc3Ryb3kocykscz1uZXcgTWUuQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybSxzLkluaXRGcm9tQXR0cmlidXRlKG4pJiYoaT17cXVhbnRpemF0aW9uQml0czpzLnF1YW50aXphdGlvbl9iaXRzKCksb2N0RW5jb2RlZDohMH0pLE1lLmRlc3Ryb3kocyk7bGV0IGY9bypyLHU7aChpKT91PUxVKHQsZSxuLGksZik6dT1EVSh0LGUsbixmKTtsZXQgYz1ldC5mcm9tVHlwZWRBcnJheSh1KTtyZXR1cm57YXJyYXk6dSxkYXRhOntjb21wb25lbnRzUGVyQXR0cmlidXRlOnIsY29tcG9uZW50RGF0YXR5cGU6YyxieXRlT2Zmc2V0Om4uYnl0ZV9vZmZzZXQoKSxieXRlU3RyaWRlOmV0LmdldFNpemVJbkJ5dGVzKGMpKnIsbm9ybWFsaXplZDpuLm5vcm1hbGl6ZWQoKSxxdWFudGl6YXRpb246aX19fWZ1bmN0aW9uIEJVKHQpe2xldCBlPW5ldyBNZS5EZWNvZGVyO3QuZGVxdWFudGl6ZUluU2hhZGVyJiYoZS5Ta2lwQXR0cmlidXRlVHJhbnNmb3JtKE1lLlBPU0lUSU9OKSxlLlNraXBBdHRyaWJ1dGVUcmFuc2Zvcm0oTWUuTk9STUFMKSk7bGV0IG49bmV3IE1lLkRlY29kZXJCdWZmZXI7aWYobi5Jbml0KHQuYnVmZmVyLHQuYnVmZmVyLmxlbmd0aCksZS5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlKG4pIT09TWUuUE9JTlRfQ0xPVUQpdGhyb3cgbmV3IEFlKCJEcmFjbyBnZW9tZXRyeSB0eXBlIG11c3QgYmUgUE9JTlRfQ0xPVUQuIik7bGV0IHI9bmV3IE1lLlBvaW50Q2xvdWQsaT1lLkRlY29kZUJ1ZmZlclRvUG9pbnRDbG91ZChuLHIpO2lmKCFpLm9rKCl8fHIucHRyPT09MCl0aHJvdyBuZXcgQWUoYEVycm9yIGRlY29kaW5nIGRyYWNvIHBvaW50IGNsb3VkOiAke2kuZXJyb3JfbXNnKCl9YCk7TWUuZGVzdHJveShuKTtsZXQgcz17fSxmPXQucHJvcGVydGllcztmb3IobGV0IHUgaW4gZilpZihmLmhhc093blByb3BlcnR5KHUpKXtsZXQgYztpZih1PT09IlBPU0lUSU9OInx8dT09PSJOT1JNQUwiKXtsZXQgbD1lLkdldEF0dHJpYnV0ZUlkKHIsTWVbdV0pO2M9ZS5HZXRBdHRyaWJ1dGUocixsKX1lbHNle2xldCBsPWZbdV07Yz1lLkdldEF0dHJpYnV0ZUJ5VW5pcXVlSWQocixsKX1zW3VdPXkyKHIsZSxjKX1yZXR1cm4gTWUuZGVzdHJveShyKSxNZS5kZXN0cm95KGUpLHN9ZnVuY3Rpb24gVVUodCl7bGV0IGU9bmV3IE1lLkRlY29kZXI7aWYodC5kZXF1YW50aXplSW5TaGFkZXIpZm9yKGxldCBsPTA7bDx0LmF0dHJpYnV0ZXNUb1NraXBUcmFuc2Zvcm0ubGVuZ3RoOysrbCllLlNraXBBdHRyaWJ1dGVUcmFuc2Zvcm0oTWVbdC5hdHRyaWJ1dGVzVG9Ta2lwVHJhbnNmb3JtW2xdXSk7bGV0IG49dC5idWZmZXJWaWV3LG89bmV3IE1lLkRlY29kZXJCdWZmZXI7aWYoby5Jbml0KHQuYXJyYXksbi5ieXRlTGVuZ3RoKSxlLkdldEVuY29kZWRHZW9tZXRyeVR5cGUobykhPT1NZS5UUklBTkdVTEFSX01FU0gpdGhyb3cgbmV3IEFlKCJVbnN1cHBvcnRlZCBkcmFjbyBtZXNoIGdlb21ldHJ5IHR5cGUuIik7bGV0IGk9bmV3IE1lLk1lc2gscz1lLkRlY29kZUJ1ZmZlclRvTWVzaChvLGkpO2lmKCFzLm9rKCl8fGkucHRyPT09MCl0aHJvdyBuZXcgQWUoYEVycm9yIGRlY29kaW5nIGRyYWNvIG1lc2ggZ2VvbWV0cnk6ICR7cy5lcnJvcl9tc2coKX1gKTtNZS5kZXN0cm95KG8pO2xldCBmPXt9LHU9dC5jb21wcmVzc2VkQXR0cmlidXRlcztmb3IobGV0IGwgaW4gdSlpZih1Lmhhc093blByb3BlcnR5KGwpKXtsZXQgcD11W2xdLGQ9ZS5HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkKGkscCk7ZltsXT15MihpLGUsZCl9bGV0IGM9e2luZGV4QXJyYXk6RlUoaSxlKSxhdHRyaWJ1dGVEYXRhOmZ9O3JldHVybiBNZS5kZXN0cm95KGkpLE1lLmRlc3Ryb3koZSksY31hc3luYyBmdW5jdGlvbiBrVSh0LGUpe3JldHVybiBoKHQuYnVmZmVyVmlldyk/VVUodCk6QlUodCl9YXN5bmMgZnVuY3Rpb24gR1UodCxlKXtsZXQgbj10LndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBoKG4pJiZoKG4ud2FzbUJpbmFyeUZpbGUpP01lPWF3YWl0KDAsU2cuZGVmYXVsdCkobik6TWU9YXdhaXQoMCxTZy5kZWZhdWx0KSgpLCEwfWFzeW5jIGZ1bmN0aW9uIFZVKHQsZSl7bGV0IG49dC53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gaChuKT9HVSh0LGUpOmtVKHQsZSl9dmFyIFNnLE1lLHpVLHhnPSQoKCk9PntEZSgpO2F0KCk7JGUoKTtKcigpO3NvKCk7U2c9ZHIoUmcoKSwxKTt6VT1RZShWVSl9KTtmdW5jdGlvbiBQZyh0LGUpe2lmKFBnLnBhc3NUaHJvdWdoRGF0YUZvclRlc3RpbmcpcmV0dXJuIGU7eS50eXBlT2Yub2JqZWN0KCJrZXkiLHQpLHkudHlwZU9mLm9iamVjdCgiZGF0YSIsZSk7bGV0IG49dC5ieXRlTGVuZ3RoO2lmKG49PT0wfHxuJTQhPT0wKXRocm93IG5ldyBBZSgiVGhlIGxlbmd0aCBvZiBrZXkgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBhbmQgYSBtdWx0aXBsZSBvZiA0LiIpO2xldCBvPW5ldyBEYXRhVmlldyhlKSxyPW8uZ2V0VWludDMyKDAsITApO2lmKHI9PT1qVXx8cj09PUhVKXJldHVybiBlO2xldCBpPW5ldyBEYXRhVmlldyh0KSxzPTAsZj1lLmJ5dGVMZW5ndGgsdT1mLWYlOCxjPW4sbCxwPTg7Zm9yKDtzPHU7KWZvcihwPShwKzgpJTI0LGw9cDtzPHUmJmw8Yzspby5zZXRVaW50MzIocyxvLmdldFVpbnQzMihzLCEwKV5pLmdldFVpbnQzMihsLCEwKSwhMCksby5zZXRVaW50MzIocys0LG8uZ2V0VWludDMyKHMrNCwhMCleaS5nZXRVaW50MzIobCs0LCEwKSwhMCkscys9OCxsKz0yNDtpZihzPGYpZm9yKGw+PWMmJihwPShwKzgpJTI0LGw9cCk7czxmOylvLnNldFVpbnQ4KHMsby5nZXRVaW50OChzKV5pLmdldFVpbnQ4KGwpKSxzKyssbCsrfXZhciBqVSxIVSxnMixBMj0kKCgpPT57V3QoKTtKcigpO2pVPTE5NTMwMjk4MDUsSFU9MjkxNzAzNDEwMDtQZy5wYXNzVGhyb3VnaERhdGFGb3JUZXN0aW5nPSExO2cyPVBnfSk7ZnVuY3Rpb24gcVUodCxlKXtyZXR1cm4odCZlKSE9PTB9dmFyIGthLGIyPSQoKCk9PntrYT1xVX0pO2Z1bmN0aW9uIHlpKHQsZSxuLG8scixpKXt0aGlzLl9iaXRzPXQsdGhpcy5jbm9kZVZlcnNpb249ZSx0aGlzLmltYWdlcnlWZXJzaW9uPW4sdGhpcy50ZXJyYWluVmVyc2lvbj1vLHRoaXMuaW1hZ2VyeVByb3ZpZGVyPXIsdGhpcy50ZXJyYWluUHJvdmlkZXI9aSx0aGlzLmFuY2VzdG9ySGFzVGVycmFpbj0hMSx0aGlzLnRlcnJhaW5TdGF0ZT12b2lkIDB9dmFyIEtVLFQyLFdVLFhVLFlVLHcyLE8yPSQoKCk9PnthdCgpO2IyKCk7S1U9WzEsMiw0LDhdLFQyPTE1LFdVPTE2LFhVPTY0LFlVPTEyODt5aS5jbG9uZT1mdW5jdGlvbih0LGUpe3JldHVybiBoKGUpPyhlLl9iaXRzPXQuX2JpdHMsZS5jbm9kZVZlcnNpb249dC5jbm9kZVZlcnNpb24sZS5pbWFnZXJ5VmVyc2lvbj10LmltYWdlcnlWZXJzaW9uLGUudGVycmFpblZlcnNpb249dC50ZXJyYWluVmVyc2lvbixlLmltYWdlcnlQcm92aWRlcj10LmltYWdlcnlQcm92aWRlcixlLnRlcnJhaW5Qcm92aWRlcj10LnRlcnJhaW5Qcm92aWRlcik6ZT1uZXcgeWkodC5fYml0cyx0LmNub2RlVmVyc2lvbix0LmltYWdlcnlWZXJzaW9uLHQudGVycmFpblZlcnNpb24sdC5pbWFnZXJ5UHJvdmlkZXIsdC50ZXJyYWluUHJvdmlkZXIpLGUuYW5jZXN0b3JIYXNUZXJyYWluPXQuYW5jZXN0b3JIYXNUZXJyYWluLGUudGVycmFpblN0YXRlPXQudGVycmFpblN0YXRlLGV9O3lpLnByb3RvdHlwZS5zZXRQYXJlbnQ9ZnVuY3Rpb24odCl7dGhpcy5hbmNlc3Rvckhhc1RlcnJhaW49dC5hbmNlc3Rvckhhc1RlcnJhaW58fHRoaXMuaGFzVGVycmFpbigpfTt5aS5wcm90b3R5cGUuaGFzU3VidHJlZT1mdW5jdGlvbigpe3JldHVybiBrYSh0aGlzLl9iaXRzLFdVKX07eWkucHJvdG90eXBlLmhhc0ltYWdlcnk9ZnVuY3Rpb24oKXtyZXR1cm4ga2EodGhpcy5fYml0cyxYVSl9O3lpLnByb3RvdHlwZS5oYXNUZXJyYWluPWZ1bmN0aW9uKCl7cmV0dXJuIGthKHRoaXMuX2JpdHMsWVUpfTt5aS5wcm90b3R5cGUuaGFzQ2hpbGRyZW49ZnVuY3Rpb24oKXtyZXR1cm4ga2EodGhpcy5fYml0cyxUMil9O3lpLnByb3RvdHlwZS5oYXNDaGlsZD1mdW5jdGlvbih0KXtyZXR1cm4ga2EodGhpcy5fYml0cyxLVVt0XSl9O3lpLnByb3RvdHlwZS5nZXRDaGlsZEJpdG1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYml0cyZUMn07dzI9eWl9KTt2YXIgUjI9WG4oKGpmdCxFMik9PnsidXNlIHN0cmljdCI7dmFyICRVPSh0LGUsbixvKT0+e2xldCByPXQmNjU1MzV8MCxpPXQ+Pj4xNiY2NTUzNXwwLHM9MDtmb3IoO24hPT0wOyl7cz1uPjJlMz8yZTM6bixuLT1zO2RvIHI9citlW28rK118MCxpPWkrcnwwO3doaWxlKC0tcyk7ciU9NjU1MjEsaSU9NjU1MjF9cmV0dXJuIHJ8aTw8MTZ8MH07RTIuZXhwb3J0cz0kVX0pO3ZhciBDMj1YbigoSGZ0LFMyKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWlU9KCk9PntsZXQgdCxlPVtdO2Zvcih2YXIgbj0wO248MjU2O24rKyl7dD1uO2Zvcih2YXIgbz0wO288ODtvKyspdD10JjE/Mzk4ODI5MjM4NF50Pj4+MTp0Pj4+MTtlW25dPXR9cmV0dXJuIGV9LFFVPW5ldyBVaW50MzJBcnJheShaVSgpKSxKVT0odCxlLG4sbyk9PntsZXQgcj1RVSxpPW8rbjt0Xj0tMTtmb3IobGV0IHM9bztzPGk7cysrKXQ9dD4+PjheclsodF5lW3NdKSYyNTVdO3JldHVybiB0Xi0xfTtTMi5leHBvcnRzPUpVfSk7dmFyIFAyPVhuKChxZnQseDIpPT57InVzZSBzdHJpY3QiO3gyLmV4cG9ydHM9ZnVuY3Rpb24oZSxuKXtsZXQgbyxyLGkscyxmLHUsYyxsLHAsZCxtLF8sZyxiLFQsTyxFLHcsQyxNLE4sRixJLHYsQj1lLnN0YXRlO289ZS5uZXh0X2luLEk9ZS5pbnB1dCxyPW8rKGUuYXZhaWxfaW4tNSksaT1lLm5leHRfb3V0LHY9ZS5vdXRwdXQscz1pLShuLWUuYXZhaWxfb3V0KSxmPWkrKGUuYXZhaWxfb3V0LTI1NyksdT1CLmRtYXgsYz1CLndzaXplLGw9Qi53aGF2ZSxwPUIud25leHQsZD1CLndpbmRvdyxtPUIuaG9sZCxfPUIuYml0cyxnPUIubGVuY29kZSxiPUIuZGlzdGNvZGUsVD0oMTw8Qi5sZW5iaXRzKS0xLE89KDE8PEIuZGlzdGJpdHMpLTE7dDpkb3tfPDE1JiYobSs9SVtvKytdPDxfLF8rPTgsbSs9SVtvKytdPDxfLF8rPTgpLEU9Z1ttJlRdO2U6Zm9yKDs7KXtpZih3PUU+Pj4yNCxtPj4+PXcsXy09dyx3PUU+Pj4xNiYyNTUsdz09PTApdltpKytdPUUmNjU1MzU7ZWxzZSBpZih3JjE2KXtDPUUmNjU1MzUsdyY9MTUsdyYmKF88dyYmKG0rPUlbbysrXTw8XyxfKz04KSxDKz1tJigxPDx3KS0xLG0+Pj49dyxfLT13KSxfPDE1JiYobSs9SVtvKytdPDxfLF8rPTgsbSs9SVtvKytdPDxfLF8rPTgpLEU9YlttJk9dO246Zm9yKDs7KXtpZih3PUU+Pj4yNCxtPj4+PXcsXy09dyx3PUU+Pj4xNiYyNTUsdyYxNil7aWYoTT1FJjY1NTM1LHcmPTE1LF88dyYmKG0rPUlbbysrXTw8XyxfKz04LF88dyYmKG0rPUlbbysrXTw8XyxfKz04KSksTSs9bSYoMTw8dyktMSxNPnUpe2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsQi5tb2RlPTE2MjA5O2JyZWFrIHR9aWYobT4+Pj13LF8tPXcsdz1pLXMsTT53KXtpZih3PU0tdyx3PmwmJkIuc2FuZSl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixCLm1vZGU9MTYyMDk7YnJlYWsgdH1pZihOPTAsRj1kLHA9PT0wKXtpZihOKz1jLXcsdzxDKXtDLT13O2RvIHZbaSsrXT1kW04rK107d2hpbGUoLS13KTtOPWktTSxGPXZ9fWVsc2UgaWYocDx3KXtpZihOKz1jK3Atdyx3LT1wLHc8Qyl7Qy09dztkbyB2W2krK109ZFtOKytdO3doaWxlKC0tdyk7aWYoTj0wLHA8Qyl7dz1wLEMtPXc7ZG8gdltpKytdPWRbTisrXTt3aGlsZSgtLXcpO049aS1NLEY9dn19fWVsc2UgaWYoTis9cC13LHc8Qyl7Qy09dztkbyB2W2krK109ZFtOKytdO3doaWxlKC0tdyk7Tj1pLU0sRj12fWZvcig7Qz4yOyl2W2krK109RltOKytdLHZbaSsrXT1GW04rK10sdltpKytdPUZbTisrXSxDLT0zO0MmJih2W2krK109RltOKytdLEM+MSYmKHZbaSsrXT1GW04rK10pKX1lbHNle049aS1NO2RvIHZbaSsrXT12W04rK10sdltpKytdPXZbTisrXSx2W2krK109dltOKytdLEMtPTM7d2hpbGUoQz4yKTtDJiYodltpKytdPXZbTisrXSxDPjEmJih2W2krK109dltOKytdKSl9fWVsc2UgaWYodyY2NCl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsQi5tb2RlPTE2MjA5O2JyZWFrIHR9ZWxzZXtFPWJbKEUmNjU1MzUpKyhtJigxPDx3KS0xKV07Y29udGludWUgbn1icmVha319ZWxzZSBpZih3JjY0KWlmKHcmMzIpe0IubW9kZT0xNjE5MTticmVhayB0fWVsc2V7ZS5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsQi5tb2RlPTE2MjA5O2JyZWFrIHR9ZWxzZXtFPWdbKEUmNjU1MzUpKyhtJigxPDx3KS0xKV07Y29udGludWUgZX1icmVha319d2hpbGUobzxyJiZpPGYpO0M9Xz4+MyxvLT1DLF8tPUM8PDMsbSY9KDE8PF8pLTEsZS5uZXh0X2luPW8sZS5uZXh0X291dD1pLGUuYXZhaWxfaW49bzxyPzUrKHItbyk6NS0oby1yKSxlLmF2YWlsX291dD1pPGY/MjU3KyhmLWkpOjI1Ny0oaS1mKSxCLmhvbGQ9bSxCLmJpdHM9X319KTt2YXIgTjI9WG4oKEtmdCxNMik9PnsidXNlIHN0cmljdCI7dmFyIHQ2PW5ldyBVaW50MTZBcnJheShbMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdKSxlNj1uZXcgVWludDhBcnJheShbMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdKSxuNj1uZXcgVWludDE2QXJyYXkoWzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdKSxvNj1uZXcgVWludDhBcnJheShbMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdKSxyNj0odCxlLG4sbyxyLGkscyxmKT0+e2xldCB1PWYuYml0cyxjPTAsbD0wLHA9MCxkPTAsbT0wLF89MCxnPTAsYj0wLFQ9MCxPPTAsRSx3LEMsTSxOLEY9bnVsbCxJLHY9bmV3IFVpbnQxNkFycmF5KDE2KSxCPW5ldyBVaW50MTZBcnJheSgxNiksQT1udWxsLFMseCxEO2ZvcihjPTA7Yzw9MTU7YysrKXZbY109MDtmb3IobD0wO2w8bztsKyspdltlW24rbF1dKys7Zm9yKG09dSxkPTE1O2Q+PTEmJnZbZF09PT0wO2QtLSk7aWYobT5kJiYobT1kKSxkPT09MClyZXR1cm4gcltpKytdPTE8PDI0fDY0PDwxNnwwLHJbaSsrXT0xPDwyNHw2NDw8MTZ8MCxmLmJpdHM9MSwwO2ZvcihwPTE7cDxkJiZ2W3BdPT09MDtwKyspO2ZvcihtPHAmJihtPXApLGI9MSxjPTE7Yzw9MTU7YysrKWlmKGI8PD0xLGItPXZbY10sYjwwKXJldHVybi0xO2lmKGI+MCYmKHQ9PT0wfHxkIT09MSkpcmV0dXJuLTE7Zm9yKEJbMV09MCxjPTE7YzwxNTtjKyspQltjKzFdPUJbY10rdltjXTtmb3IobD0wO2w8bztsKyspZVtuK2xdIT09MCYmKHNbQltlW24rbF1dKytdPWwpO2lmKHQ9PT0wPyhGPUE9cyxJPTIwKTp0PT09MT8oRj10NixBPWU2LEk9MjU3KTooRj1uNixBPW82LEk9MCksTz0wLGw9MCxjPXAsTj1pLF89bSxnPTAsQz0tMSxUPTE8PG0sTT1ULTEsdD09PTEmJlQ+ODUyfHx0PT09MiYmVD41OTIpcmV0dXJuIDE7Zm9yKDs7KXtTPWMtZyxzW2xdKzE8ST8oeD0wLEQ9c1tsXSk6c1tsXT49ST8oeD1BW3NbbF0tSV0sRD1GW3NbbF0tSV0pOih4PTk2LEQ9MCksRT0xPDxjLWcsdz0xPDxfLHA9dztkbyB3LT1FLHJbTisoTz4+Zykrd109Uzw8MjR8eDw8MTZ8RHwwO3doaWxlKHchPT0wKTtmb3IoRT0xPDxjLTE7TyZFOylFPj49MTtpZihFIT09MD8oTyY9RS0xLE8rPUUpOk89MCxsKyssLS12W2NdPT09MCl7aWYoYz09PWQpYnJlYWs7Yz1lW24rc1tsXV19aWYoYz5tJiYoTyZNKSE9PUMpe2ZvcihnPT09MCYmKGc9bSksTis9cCxfPWMtZyxiPTE8PF87XytnPGQmJihiLT12W18rZ10sIShiPD0wKSk7KV8rKyxiPDw9MTtpZihUKz0xPDxfLHQ9PT0xJiZUPjg1Mnx8dD09PTImJlQ+NTkyKXJldHVybiAxO0M9TyZNLHJbQ109bTw8MjR8Xzw8MTZ8Ti1pfDB9fXJldHVybiBPIT09MCYmKHJbTitPXT1jLWc8PDI0fDY0PDwxNnwwKSxmLmJpdHM9bSwwfTtNMi5leHBvcnRzPXI2fSk7dmFyIG9tPVhuKChXZnQsSTIpPT57InVzZSBzdHJpY3QiO0kyLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9NRU1fRVJST1I6LTQsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19KTt2YXIgZFM9WG4oKFhmdCxZcik9PnsidXNlIHN0cmljdCI7dmFyIExnPVIyKCksZ2k9QzIoKSxpNj1QMigpLGR1PU4yKCksczY9MCxyUz0xLGlTPTIse1pfRklOSVNIOnYyLFpfQkxPQ0s6YzYsWl9UUkVFUzpybSxaX09LOlNjLFpfU1RSRUFNX0VORDphNixaX05FRURfRElDVDpmNixaX1NUUkVBTV9FUlJPUjpNcixaX0RBVEFfRVJST1I6c1MsWl9NRU1fRVJST1I6RGcsWl9CVUZfRVJST1I6dTYsWl9ERUZMQVRFRDpGMn09b20oKSxhbT0xNjE4MCxMMj0xNjE4MSxEMj0xNjE4MixCMj0xNjE4MyxVMj0xNjE4NCxrMj0xNjE4NSxHMj0xNjE4NixWMj0xNjE4Nyx6Mj0xNjE4OCxqMj0xNjE4OSxjbT0xNjE5MCxLaT0xNjE5MSxNZz0xNjE5MixIMj0xNjE5MyxOZz0xNjE5NCxxMj0xNjE5NSxLMj0xNjE5NixXMj0xNjE5NyxYMj0xNjE5OCxpbT0xNjE5OSxzbT0xNjIwMCxZMj0xNjIwMSwkMj0xNjIwMixaMj0xNjIwMyxRMj0xNjIwNCxKMj0xNjIwNSxJZz0xNjIwNix0Uz0xNjIwNyxlUz0xNjIwOCxNbj0xNjIwOSxCZz0xNjIxMCxjUz0xNjIxMSxsNj04NTIscDY9NTkyLGQ2PTE1LG02PWQ2LG5TPXQ9Pih0Pj4+MjQmMjU1KSsodD4+PjgmNjUyODApKygodCY2NTI4MCk8PDgpKygodCYyNTUpPDwyNCk7ZnVuY3Rpb24gaDYoKXt0aGlzLnN0cm09bnVsbCx0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IFVpbnQxNkFycmF5KDMyMCksdGhpcy53b3JrPW5ldyBVaW50MTZBcnJheSgyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH12YXIgQ2M9dD0+e2lmKCF0KXJldHVybiAxO2xldCBlPXQuc3RhdGU7cmV0dXJuIWV8fGUuc3RybSE9PXR8fGUubW9kZTxhbXx8ZS5tb2RlPmNTPzE6MH0sYVM9dD0+e2lmKENjKHQpKXJldHVybiBNcjtsZXQgZT10LnN0YXRlO3JldHVybiB0LnRvdGFsX2luPXQudG90YWxfb3V0PWUudG90YWw9MCx0Lm1zZz0iIixlLndyYXAmJih0LmFkbGVyPWUud3JhcCYxKSxlLm1vZGU9YW0sZS5sYXN0PTAsZS5oYXZlZGljdD0wLGUuZmxhZ3M9LTEsZS5kbWF4PTMyNzY4LGUuaGVhZD1udWxsLGUuaG9sZD0wLGUuYml0cz0wLGUubGVuY29kZT1lLmxlbmR5bj1uZXcgSW50MzJBcnJheShsNiksZS5kaXN0Y29kZT1lLmRpc3RkeW49bmV3IEludDMyQXJyYXkocDYpLGUuc2FuZT0xLGUuYmFjaz0tMSxTY30sZlM9dD0+e2lmKENjKHQpKXJldHVybiBNcjtsZXQgZT10LnN0YXRlO3JldHVybiBlLndzaXplPTAsZS53aGF2ZT0wLGUud25leHQ9MCxhUyh0KX0sdVM9KHQsZSk9PntsZXQgbjtpZihDYyh0KSlyZXR1cm4gTXI7bGV0IG89dC5zdGF0ZTtyZXR1cm4gZTwwPyhuPTAsZT0tZSk6KG49KGU+PjQpKzUsZTw0OCYmKGUmPTE1KSksZSYmKGU8OHx8ZT4xNSk/TXI6KG8ud2luZG93IT09bnVsbCYmby53Yml0cyE9PWUmJihvLndpbmRvdz1udWxsKSxvLndyYXA9bixvLndiaXRzPWUsZlModCkpfSxsUz0odCxlKT0+e2lmKCF0KXJldHVybiBNcjtsZXQgbj1uZXcgaDY7dC5zdGF0ZT1uLG4uc3RybT10LG4ud2luZG93PW51bGwsbi5tb2RlPWFtO2xldCBvPXVTKHQsZSk7cmV0dXJuIG8hPT1TYyYmKHQuc3RhdGU9bnVsbCksb30sXzY9dD0+bFModCxtNiksb1M9ITAsdmcsRmcseTY9dD0+e2lmKG9TKXt2Zz1uZXcgSW50MzJBcnJheSg1MTIpLEZnPW5ldyBJbnQzMkFycmF5KDMyKTtsZXQgZT0wO2Zvcig7ZTwxNDQ7KXQubGVuc1tlKytdPTg7Zm9yKDtlPDI1NjspdC5sZW5zW2UrK109OTtmb3IoO2U8MjgwOyl0LmxlbnNbZSsrXT03O2Zvcig7ZTwyODg7KXQubGVuc1tlKytdPTg7Zm9yKGR1KHJTLHQubGVucywwLDI4OCx2ZywwLHQud29yayx7Yml0czo5fSksZT0wO2U8MzI7KXQubGVuc1tlKytdPTU7ZHUoaVMsdC5sZW5zLDAsMzIsRmcsMCx0Lndvcmsse2JpdHM6NX0pLG9TPSExfXQubGVuY29kZT12Zyx0LmxlbmJpdHM9OSx0LmRpc3Rjb2RlPUZnLHQuZGlzdGJpdHM9NX0scFM9KHQsZSxuLG8pPT57bGV0IHIsaT10LnN0YXRlO3JldHVybiBpLndpbmRvdz09PW51bGwmJihpLndzaXplPTE8PGkud2JpdHMsaS53bmV4dD0wLGkud2hhdmU9MCxpLndpbmRvdz1uZXcgVWludDhBcnJheShpLndzaXplKSksbz49aS53c2l6ZT8oaS53aW5kb3cuc2V0KGUuc3ViYXJyYXkobi1pLndzaXplLG4pLDApLGkud25leHQ9MCxpLndoYXZlPWkud3NpemUpOihyPWkud3NpemUtaS53bmV4dCxyPm8mJihyPW8pLGkud2luZG93LnNldChlLnN1YmFycmF5KG4tbyxuLW8rciksaS53bmV4dCksby09cixvPyhpLndpbmRvdy5zZXQoZS5zdWJhcnJheShuLW8sbiksMCksaS53bmV4dD1vLGkud2hhdmU9aS53c2l6ZSk6KGkud25leHQrPXIsaS53bmV4dD09PWkud3NpemUmJihpLnduZXh0PTApLGkud2hhdmU8aS53c2l6ZSYmKGkud2hhdmUrPXIpKSksMH0sZzY9KHQsZSk9PntsZXQgbixvLHIsaSxzLGYsdSxjLGwscCxkLG0sXyxnLGI9MCxULE8sRSx3LEMsTSxOLEYsST1uZXcgVWludDhBcnJheSg0KSx2LEIsQT1uZXcgVWludDhBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pO2lmKENjKHQpfHwhdC5vdXRwdXR8fCF0LmlucHV0JiZ0LmF2YWlsX2luIT09MClyZXR1cm4gTXI7bj10LnN0YXRlLG4ubW9kZT09PUtpJiYobi5tb2RlPU1nKSxzPXQubmV4dF9vdXQscj10Lm91dHB1dCx1PXQuYXZhaWxfb3V0LGk9dC5uZXh0X2luLG89dC5pbnB1dCxmPXQuYXZhaWxfaW4sYz1uLmhvbGQsbD1uLmJpdHMscD1mLGQ9dSxGPVNjO3Q6Zm9yKDs7KXN3aXRjaChuLm1vZGUpe2Nhc2UgYW06aWYobi53cmFwPT09MCl7bi5tb2RlPU1nO2JyZWFrfWZvcig7bDwxNjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKG4ud3JhcCYyJiZjPT09MzU2MTUpe24ud2JpdHM9PT0wJiYobi53Yml0cz0xNSksbi5jaGVjaz0wLElbMF09YyYyNTUsSVsxXT1jPj4+OCYyNTUsbi5jaGVjaz1naShuLmNoZWNrLEksMiwwKSxjPTAsbD0wLG4ubW9kZT1MMjticmVha31pZihuLmhlYWQmJihuLmhlYWQuZG9uZT0hMSksIShuLndyYXAmMSl8fCgoKGMmMjU1KTw8OCkrKGM+PjgpKSUzMSl7dC5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLG4ubW9kZT1NbjticmVha31pZigoYyYxNSkhPT1GMil7dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9TW47YnJlYWt9aWYoYz4+Pj00LGwtPTQsTj0oYyYxNSkrOCxuLndiaXRzPT09MCYmKG4ud2JpdHM9TiksTj4xNXx8Tj5uLndiaXRzKXt0Lm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsbi5tb2RlPU1uO2JyZWFrfW4uZG1heD0xPDxuLndiaXRzLG4uZmxhZ3M9MCx0LmFkbGVyPW4uY2hlY2s9MSxuLm1vZGU9YyY1MTI/ajI6S2ksYz0wLGw9MDticmVhaztjYXNlIEwyOmZvcig7bDwxNjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKG4uZmxhZ3M9Yywobi5mbGFncyYyNTUpIT09RjIpe3QubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPU1uO2JyZWFrfWlmKG4uZmxhZ3MmNTczNDQpe3QubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLG4ubW9kZT1NbjticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD1jPj44JjEpLG4uZmxhZ3MmNTEyJiZuLndyYXAmNCYmKElbMF09YyYyNTUsSVsxXT1jPj4+OCYyNTUsbi5jaGVjaz1naShuLmNoZWNrLEksMiwwKSksYz0wLGw9MCxuLm1vZGU9RDI7Y2FzZSBEMjpmb3IoO2w8MzI7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLmhlYWQmJihuLmhlYWQudGltZT1jKSxuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihJWzBdPWMmMjU1LElbMV09Yz4+PjgmMjU1LElbMl09Yz4+PjE2JjI1NSxJWzNdPWM+Pj4yNCYyNTUsbi5jaGVjaz1naShuLmNoZWNrLEksNCwwKSksYz0wLGw9MCxuLm1vZGU9QjI7Y2FzZSBCMjpmb3IoO2w8MTY7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLmhlYWQmJihuLmhlYWQueGZsYWdzPWMmMjU1LG4uaGVhZC5vcz1jPj44KSxuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihJWzBdPWMmMjU1LElbMV09Yz4+PjgmMjU1LG4uY2hlY2s9Z2kobi5jaGVjayxJLDIsMCkpLGM9MCxsPTAsbi5tb2RlPVUyO2Nhc2UgVTI6aWYobi5mbGFncyYxMDI0KXtmb3IoO2w8MTY7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLmxlbmd0aD1jLG4uaGVhZCYmKG4uaGVhZC5leHRyYV9sZW49Yyksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYoSVswXT1jJjI1NSxJWzFdPWM+Pj44JjI1NSxuLmNoZWNrPWdpKG4uY2hlY2ssSSwyLDApKSxjPTAsbD0wfWVsc2Ugbi5oZWFkJiYobi5oZWFkLmV4dHJhPW51bGwpO24ubW9kZT1rMjtjYXNlIGsyOmlmKG4uZmxhZ3MmMTAyNCYmKG09bi5sZW5ndGgsbT5mJiYobT1mKSxtJiYobi5oZWFkJiYoTj1uLmhlYWQuZXh0cmFfbGVuLW4ubGVuZ3RoLG4uaGVhZC5leHRyYXx8KG4uaGVhZC5leHRyYT1uZXcgVWludDhBcnJheShuLmhlYWQuZXh0cmFfbGVuKSksbi5oZWFkLmV4dHJhLnNldChvLnN1YmFycmF5KGksaSttKSxOKSksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYobi5jaGVjaz1naShuLmNoZWNrLG8sbSxpKSksZi09bSxpKz1tLG4ubGVuZ3RoLT1tKSxuLmxlbmd0aCkpYnJlYWsgdDtuLmxlbmd0aD0wLG4ubW9kZT1HMjtjYXNlIEcyOmlmKG4uZmxhZ3MmMjA0OCl7aWYoZj09PTApYnJlYWsgdDttPTA7ZG8gTj1vW2krbSsrXSxuLmhlYWQmJk4mJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoTikpO3doaWxlKE4mJm08Zik7aWYobi5mbGFncyY1MTImJm4ud3JhcCY0JiYobi5jaGVjaz1naShuLmNoZWNrLG8sbSxpKSksZi09bSxpKz1tLE4pYnJlYWsgdH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5uYW1lPW51bGwpO24ubGVuZ3RoPTAsbi5tb2RlPVYyO2Nhc2UgVjI6aWYobi5mbGFncyY0MDk2KXtpZihmPT09MClicmVhayB0O209MDtkbyBOPW9baSttKytdLG4uaGVhZCYmTiYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShOKSk7d2hpbGUoTiYmbTxmKTtpZihuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihuLmNoZWNrPWdpKG4uY2hlY2ssbyxtLGkpKSxmLT1tLGkrPW0sTilicmVhayB0fWVsc2Ugbi5oZWFkJiYobi5oZWFkLmNvbW1lbnQ9bnVsbCk7bi5tb2RlPXoyO2Nhc2UgejI6aWYobi5mbGFncyY1MTIpe2Zvcig7bDwxNjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKG4ud3JhcCY0JiZjIT09KG4uY2hlY2smNjU1MzUpKXt0Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsbi5tb2RlPU1uO2JyZWFrfWM9MCxsPTB9bi5oZWFkJiYobi5oZWFkLmhjcmM9bi5mbGFncz4+OSYxLG4uaGVhZC5kb25lPSEwKSx0LmFkbGVyPW4uY2hlY2s9MCxuLm1vZGU9S2k7YnJlYWs7Y2FzZSBqMjpmb3IoO2w8MzI7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH10LmFkbGVyPW4uY2hlY2s9blMoYyksYz0wLGw9MCxuLm1vZGU9Y207Y2FzZSBjbTppZihuLmhhdmVkaWN0PT09MClyZXR1cm4gdC5uZXh0X291dD1zLHQuYXZhaWxfb3V0PXUsdC5uZXh0X2luPWksdC5hdmFpbF9pbj1mLG4uaG9sZD1jLG4uYml0cz1sLGY2O3QuYWRsZXI9bi5jaGVjaz0xLG4ubW9kZT1LaTtjYXNlIEtpOmlmKGU9PT1jNnx8ZT09PXJtKWJyZWFrIHQ7Y2FzZSBNZzppZihuLmxhc3Qpe2M+Pj49bCY3LGwtPWwmNyxuLm1vZGU9SWc7YnJlYWt9Zm9yKDtsPDM7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1zd2l0Y2gobi5sYXN0PWMmMSxjPj4+PTEsbC09MSxjJjMpe2Nhc2UgMDpuLm1vZGU9SDI7YnJlYWs7Y2FzZSAxOmlmKHk2KG4pLG4ubW9kZT1pbSxlPT09cm0pe2M+Pj49MixsLT0yO2JyZWFrIHR9YnJlYWs7Y2FzZSAyOm4ubW9kZT1LMjticmVhaztjYXNlIDM6dC5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsbi5tb2RlPU1ufWM+Pj49MixsLT0yO2JyZWFrO2Nhc2UgSDI6Zm9yKGM+Pj49bCY3LGwtPWwmNztsPDMyOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9aWYoKGMmNjU1MzUpIT09KGM+Pj4xNl42NTUzNSkpe3QubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixuLm1vZGU9TW47YnJlYWt9aWYobi5sZW5ndGg9YyY2NTUzNSxjPTAsbD0wLG4ubW9kZT1OZyxlPT09cm0pYnJlYWsgdDtjYXNlIE5nOm4ubW9kZT1xMjtjYXNlIHEyOmlmKG09bi5sZW5ndGgsbSl7aWYobT5mJiYobT1mKSxtPnUmJihtPXUpLG09PT0wKWJyZWFrIHQ7ci5zZXQoby5zdWJhcnJheShpLGkrbSkscyksZi09bSxpKz1tLHUtPW0scys9bSxuLmxlbmd0aC09bTticmVha31uLm1vZGU9S2k7YnJlYWs7Y2FzZSBLMjpmb3IoO2w8MTQ7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1pZihuLm5sZW49KGMmMzEpKzI1NyxjPj4+PTUsbC09NSxuLm5kaXN0PShjJjMxKSsxLGM+Pj49NSxsLT01LG4ubmNvZGU9KGMmMTUpKzQsYz4+Pj00LGwtPTQsbi5ubGVuPjI4Nnx8bi5uZGlzdD4zMCl7dC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixuLm1vZGU9TW47YnJlYWt9bi5oYXZlPTAsbi5tb2RlPVcyO2Nhc2UgVzI6Zm9yKDtuLmhhdmU8bi5uY29kZTspe2Zvcig7bDwzOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9bi5sZW5zW0Fbbi5oYXZlKytdXT1jJjcsYz4+Pj0zLGwtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tBW24uaGF2ZSsrXV09MDtpZihuLmxlbmNvZGU9bi5sZW5keW4sbi5sZW5iaXRzPTcsdj17Yml0czpuLmxlbmJpdHN9LEY9ZHUoczYsbi5sZW5zLDAsMTksbi5sZW5jb2RlLDAsbi53b3JrLHYpLG4ubGVuYml0cz12LmJpdHMsRil7dC5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsbi5tb2RlPU1uO2JyZWFrfW4uaGF2ZT0wLG4ubW9kZT1YMjtjYXNlIFgyOmZvcig7bi5oYXZlPG4ubmxlbituLm5kaXN0Oyl7Zm9yKDtiPW4ubGVuY29kZVtjJigxPDxuLmxlbmJpdHMpLTFdLFQ9Yj4+PjI0LE89Yj4+PjE2JjI1NSxFPWImNjU1MzUsIShUPD1sKTspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKEU8MTYpYz4+Pj1ULGwtPVQsbi5sZW5zW24uaGF2ZSsrXT1FO2Vsc2V7aWYoRT09PTE2KXtmb3IoQj1UKzI7bDxCOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9aWYoYz4+Pj1ULGwtPVQsbi5oYXZlPT09MCl7dC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLG4ubW9kZT1NbjticmVha31OPW4ubGVuc1tuLmhhdmUtMV0sbT0zKyhjJjMpLGM+Pj49MixsLT0yfWVsc2UgaWYoRT09PTE3KXtmb3IoQj1UKzM7bDxCOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9Yz4+Pj1ULGwtPVQsTj0wLG09MysoYyY3KSxjPj4+PTMsbC09M31lbHNle2ZvcihCPVQrNztsPEI7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1jPj4+PVQsbC09VCxOPTAsbT0xMSsoYyYxMjcpLGM+Pj49NyxsLT03fWlmKG4uaGF2ZSttPm4ubmxlbituLm5kaXN0KXt0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPU1uO2JyZWFrfWZvcig7bS0tOyluLmxlbnNbbi5oYXZlKytdPU59fWlmKG4ubW9kZT09PU1uKWJyZWFrO2lmKG4ubGVuc1syNTZdPT09MCl7dC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsbi5tb2RlPU1uO2JyZWFrfWlmKG4ubGVuYml0cz05LHY9e2JpdHM6bi5sZW5iaXRzfSxGPWR1KHJTLG4ubGVucywwLG4ubmxlbixuLmxlbmNvZGUsMCxuLndvcmssdiksbi5sZW5iaXRzPXYuYml0cyxGKXt0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixuLm1vZGU9TW47YnJlYWt9aWYobi5kaXN0Yml0cz02LG4uZGlzdGNvZGU9bi5kaXN0ZHluLHY9e2JpdHM6bi5kaXN0Yml0c30sRj1kdShpUyxuLmxlbnMsbi5ubGVuLG4ubmRpc3Qsbi5kaXN0Y29kZSwwLG4ud29yayx2KSxuLmRpc3RiaXRzPXYuYml0cyxGKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixuLm1vZGU9TW47YnJlYWt9aWYobi5tb2RlPWltLGU9PT1ybSlicmVhayB0O2Nhc2UgaW06bi5tb2RlPXNtO2Nhc2Ugc206aWYoZj49NiYmdT49MjU4KXt0Lm5leHRfb3V0PXMsdC5hdmFpbF9vdXQ9dSx0Lm5leHRfaW49aSx0LmF2YWlsX2luPWYsbi5ob2xkPWMsbi5iaXRzPWwsaTYodCxkKSxzPXQubmV4dF9vdXQscj10Lm91dHB1dCx1PXQuYXZhaWxfb3V0LGk9dC5uZXh0X2luLG89dC5pbnB1dCxmPXQuYXZhaWxfaW4sYz1uLmhvbGQsbD1uLmJpdHMsbi5tb2RlPT09S2kmJihuLmJhY2s9LTEpO2JyZWFrfWZvcihuLmJhY2s9MDtiPW4ubGVuY29kZVtjJigxPDxuLmxlbmJpdHMpLTFdLFQ9Yj4+PjI0LE89Yj4+PjE2JjI1NSxFPWImNjU1MzUsIShUPD1sKTspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKE8mJiEoTyYyNDApKXtmb3Iodz1ULEM9TyxNPUU7Yj1uLmxlbmNvZGVbTSsoKGMmKDE8PHcrQyktMSk+PncpXSxUPWI+Pj4yNCxPPWI+Pj4xNiYyNTUsRT1iJjY1NTM1LCEodytUPD1sKTspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWM+Pj49dyxsLT13LG4uYmFjays9d31pZihjPj4+PVQsbC09VCxuLmJhY2srPVQsbi5sZW5ndGg9RSxPPT09MCl7bi5tb2RlPUoyO2JyZWFrfWlmKE8mMzIpe24uYmFjaz0tMSxuLm1vZGU9S2k7YnJlYWt9aWYoTyY2NCl7dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsbi5tb2RlPU1uO2JyZWFrfW4uZXh0cmE9TyYxNSxuLm1vZGU9WTI7Y2FzZSBZMjppZihuLmV4dHJhKXtmb3IoQj1uLmV4dHJhO2w8Qjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fW4ubGVuZ3RoKz1jJigxPDxuLmV4dHJhKS0xLGM+Pj49bi5leHRyYSxsLT1uLmV4dHJhLG4uYmFjays9bi5leHRyYX1uLndhcz1uLmxlbmd0aCxuLm1vZGU9JDI7Y2FzZSAkMjpmb3IoO2I9bi5kaXN0Y29kZVtjJigxPDxuLmRpc3RiaXRzKS0xXSxUPWI+Pj4yNCxPPWI+Pj4xNiYyNTUsRT1iJjY1NTM1LCEoVDw9bCk7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1pZighKE8mMjQwKSl7Zm9yKHc9VCxDPU8sTT1FO2I9bi5kaXN0Y29kZVtNKygoYyYoMTw8dytDKS0xKT4+dyldLFQ9Yj4+PjI0LE89Yj4+PjE2JjI1NSxFPWImNjU1MzUsISh3K1Q8PWwpOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9Yz4+Pj13LGwtPXcsbi5iYWNrKz13fWlmKGM+Pj49VCxsLT1ULG4uYmFjays9VCxPJjY0KXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixuLm1vZGU9TW47YnJlYWt9bi5vZmZzZXQ9RSxuLmV4dHJhPU8mMTUsbi5tb2RlPVoyO2Nhc2UgWjI6aWYobi5leHRyYSl7Zm9yKEI9bi5leHRyYTtsPEI7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLm9mZnNldCs9YyYoMTw8bi5leHRyYSktMSxjPj4+PW4uZXh0cmEsbC09bi5leHRyYSxuLmJhY2srPW4uZXh0cmF9aWYobi5vZmZzZXQ+bi5kbWF4KXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT1NbjticmVha31uLm1vZGU9UTI7Y2FzZSBRMjppZih1PT09MClicmVhayB0O2lmKG09ZC11LG4ub2Zmc2V0Pm0pe2lmKG09bi5vZmZzZXQtbSxtPm4ud2hhdmUmJm4uc2FuZSl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixuLm1vZGU9TW47YnJlYWt9bT5uLnduZXh0PyhtLT1uLnduZXh0LF89bi53c2l6ZS1tKTpfPW4ud25leHQtbSxtPm4ubGVuZ3RoJiYobT1uLmxlbmd0aCksZz1uLndpbmRvd31lbHNlIGc9cixfPXMtbi5vZmZzZXQsbT1uLmxlbmd0aDttPnUmJihtPXUpLHUtPW0sbi5sZW5ndGgtPW07ZG8gcltzKytdPWdbXysrXTt3aGlsZSgtLW0pO24ubGVuZ3RoPT09MCYmKG4ubW9kZT1zbSk7YnJlYWs7Y2FzZSBKMjppZih1PT09MClicmVhayB0O3JbcysrXT1uLmxlbmd0aCx1LS0sbi5tb2RlPXNtO2JyZWFrO2Nhc2UgSWc6aWYobi53cmFwKXtmb3IoO2w8MzI7KXtpZihmPT09MClicmVhayB0O2YtLSxjfD1vW2krK108PGwsbCs9OH1pZihkLT11LHQudG90YWxfb3V0Kz1kLG4udG90YWwrPWQsbi53cmFwJjQmJmQmJih0LmFkbGVyPW4uY2hlY2s9bi5mbGFncz9naShuLmNoZWNrLHIsZCxzLWQpOkxnKG4uY2hlY2sscixkLHMtZCkpLGQ9dSxuLndyYXAmNCYmKG4uZmxhZ3M/YzpuUyhjKSkhPT1uLmNoZWNrKXt0Lm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLG4ubW9kZT1NbjticmVha31jPTAsbD0wfW4ubW9kZT10UztjYXNlIHRTOmlmKG4ud3JhcCYmbi5mbGFncyl7Zm9yKDtsPDMyOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9aWYobi53cmFwJjQmJmMhPT0obi50b3RhbCY0Mjk0OTY3Mjk1KSl7dC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLG4ubW9kZT1NbjticmVha31jPTAsbD0wfW4ubW9kZT1lUztjYXNlIGVTOkY9YTY7YnJlYWsgdDtjYXNlIE1uOkY9c1M7YnJlYWsgdDtjYXNlIEJnOnJldHVybiBEZztjYXNlIGNTOmRlZmF1bHQ6cmV0dXJuIE1yfXJldHVybiB0Lm5leHRfb3V0PXMsdC5hdmFpbF9vdXQ9dSx0Lm5leHRfaW49aSx0LmF2YWlsX2luPWYsbi5ob2xkPWMsbi5iaXRzPWwsKG4ud3NpemV8fGQhPT10LmF2YWlsX291dCYmbi5tb2RlPE1uJiYobi5tb2RlPElnfHxlIT09djIpKSYmcFModCx0Lm91dHB1dCx0Lm5leHRfb3V0LGQtdC5hdmFpbF9vdXQpPyhuLm1vZGU9QmcsRGcpOihwLT10LmF2YWlsX2luLGQtPXQuYXZhaWxfb3V0LHQudG90YWxfaW4rPXAsdC50b3RhbF9vdXQrPWQsbi50b3RhbCs9ZCxuLndyYXAmNCYmZCYmKHQuYWRsZXI9bi5jaGVjaz1uLmZsYWdzP2dpKG4uY2hlY2sscixkLHQubmV4dF9vdXQtZCk6TGcobi5jaGVjayxyLGQsdC5uZXh0X291dC1kKSksdC5kYXRhX3R5cGU9bi5iaXRzKyhuLmxhc3Q/NjQ6MCkrKG4ubW9kZT09PUtpPzEyODowKSsobi5tb2RlPT09aW18fG4ubW9kZT09PU5nPzI1NjowKSwocD09PTAmJmQ9PT0wfHxlPT09djIpJiZGPT09U2MmJihGPXU2KSxGKX0sQTY9dD0+e2lmKENjKHQpKXJldHVybiBNcjtsZXQgZT10LnN0YXRlO3JldHVybiBlLndpbmRvdyYmKGUud2luZG93PW51bGwpLHQuc3RhdGU9bnVsbCxTY30sYjY9KHQsZSk9PntpZihDYyh0KSlyZXR1cm4gTXI7bGV0IG49dC5zdGF0ZTtyZXR1cm4gbi53cmFwJjI/KG4uaGVhZD1lLGUuZG9uZT0hMSxTYyk6TXJ9LFQ2PSh0LGUpPT57bGV0IG49ZS5sZW5ndGgsbyxyLGk7cmV0dXJuIENjKHQpfHwobz10LnN0YXRlLG8ud3JhcCE9PTAmJm8ubW9kZSE9PWNtKT9NcjpvLm1vZGU9PT1jbSYmKHI9MSxyPUxnKHIsZSxuLDApLHIhPT1vLmNoZWNrKT9zUzooaT1wUyh0LGUsbixuKSxpPyhvLm1vZGU9QmcsRGcpOihvLmhhdmVkaWN0PTEsU2MpKX07WXIuZXhwb3J0cy5pbmZsYXRlUmVzZXQ9ZlM7WXIuZXhwb3J0cy5pbmZsYXRlUmVzZXQyPXVTO1lyLmV4cG9ydHMuaW5mbGF0ZVJlc2V0S2VlcD1hUztZci5leHBvcnRzLmluZmxhdGVJbml0PV82O1lyLmV4cG9ydHMuaW5mbGF0ZUluaXQyPWxTO1lyLmV4cG9ydHMuaW5mbGF0ZT1nNjtZci5leHBvcnRzLmluZmxhdGVFbmQ9QTY7WXIuZXhwb3J0cy5pbmZsYXRlR2V0SGVhZGVyPWI2O1lyLmV4cG9ydHMuaW5mbGF0ZVNldERpY3Rpb25hcnk9VDY7WXIuZXhwb3J0cy5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9KTt2YXIgbVM9WG4oKFlmdCxVZyk9PnsidXNlIHN0cmljdCI7dmFyIHc2PSh0LGUpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKTtVZy5leHBvcnRzLmFzc2lnbj1mdW5jdGlvbih0KXtsZXQgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7Zm9yKDtlLmxlbmd0aDspe2xldCBuPWUuc2hpZnQoKTtpZihuKXtpZih0eXBlb2YgbiE9Im9iamVjdCIpdGhyb3cgbmV3IFR5cGVFcnJvcihuKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IobGV0IG8gaW4gbil3NihuLG8pJiYodFtvXT1uW29dKX19cmV0dXJuIHR9O1VnLmV4cG9ydHMuZmxhdHRlbkNodW5rcz10PT57bGV0IGU9MDtmb3IobGV0IG89MCxyPXQubGVuZ3RoO288cjtvKyspZSs9dFtvXS5sZW5ndGg7bGV0IG49bmV3IFVpbnQ4QXJyYXkoZSk7Zm9yKGxldCBvPTAscj0wLGk9dC5sZW5ndGg7bzxpO28rKyl7bGV0IHM9dFtvXTtuLnNldChzLHIpLHIrPXMubGVuZ3RofXJldHVybiBufX0pO3ZhciBfUz1YbigoJGZ0LGZtKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgaFM9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7aFM9ITF9dmFyIG11PW5ldyBVaW50OEFycmF5KDI1Nik7Zm9yKGxldCB0PTA7dDwyNTY7dCsrKW11W3RdPXQ+PTI1Mj82OnQ+PTI0OD81OnQ+PTI0MD80OnQ+PTIyND8zOnQ+PTE5Mj8yOjE7bXVbMjU0XT1tdVsyNTRdPTE7Zm0uZXhwb3J0cy5zdHJpbmcyYnVmPXQ9PntpZih0eXBlb2YgVGV4dEVuY29kZXI9PSJmdW5jdGlvbiImJlRleHRFbmNvZGVyLnByb3RvdHlwZS5lbmNvZGUpcmV0dXJuIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh0KTtsZXQgZSxuLG8scixpLHM9dC5sZW5ndGgsZj0wO2ZvcihyPTA7cjxzO3IrKyluPXQuY2hhckNvZGVBdChyKSwobiY2NDUxMik9PT01NTI5NiYmcisxPHMmJihvPXQuY2hhckNvZGVBdChyKzEpLChvJjY0NTEyKT09PTU2MzIwJiYobj02NTUzNisobi01NTI5Njw8MTApKyhvLTU2MzIwKSxyKyspKSxmKz1uPDEyOD8xOm48MjA0OD8yOm48NjU1MzY/Mzo0O2ZvcihlPW5ldyBVaW50OEFycmF5KGYpLGk9MCxyPTA7aTxmO3IrKyluPXQuY2hhckNvZGVBdChyKSwobiY2NDUxMik9PT01NTI5NiYmcisxPHMmJihvPXQuY2hhckNvZGVBdChyKzEpLChvJjY0NTEyKT09PTU2MzIwJiYobj02NTUzNisobi01NTI5Njw8MTApKyhvLTU2MzIwKSxyKyspKSxuPDEyOD9lW2krK109bjpuPDIwNDg/KGVbaSsrXT0xOTJ8bj4+PjYsZVtpKytdPTEyOHxuJjYzKTpuPDY1NTM2PyhlW2krK109MjI0fG4+Pj4xMixlW2krK109MTI4fG4+Pj42JjYzLGVbaSsrXT0xMjh8biY2Myk6KGVbaSsrXT0yNDB8bj4+PjE4LGVbaSsrXT0xMjh8bj4+PjEyJjYzLGVbaSsrXT0xMjh8bj4+PjYmNjMsZVtpKytdPTEyOHxuJjYzKTtyZXR1cm4gZX07dmFyIE82PSh0LGUpPT57aWYoZTw2NTUzNCYmdC5zdWJhcnJheSYmaFMpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0Lmxlbmd0aD09PWU/dDp0LnN1YmFycmF5KDAsZSkpO2xldCBuPSIiO2ZvcihsZXQgbz0wO288ZTtvKyspbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W29dKTtyZXR1cm4gbn07Zm0uZXhwb3J0cy5idWYyc3RyaW5nPSh0LGUpPT57bGV0IG49ZXx8dC5sZW5ndGg7aWYodHlwZW9mIFRleHREZWNvZGVyPT0iZnVuY3Rpb24iJiZUZXh0RGVjb2Rlci5wcm90b3R5cGUuZGVjb2RlKXJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUodC5zdWJhcnJheSgwLGUpKTtsZXQgbyxyLGk9bmV3IEFycmF5KG4qMik7Zm9yKHI9MCxvPTA7bzxuOyl7bGV0IHM9dFtvKytdO2lmKHM8MTI4KXtpW3IrK109cztjb250aW51ZX1sZXQgZj1tdVtzXTtpZihmPjQpe2lbcisrXT02NTUzMyxvKz1mLTE7Y29udGludWV9Zm9yKHMmPWY9PT0yPzMxOmY9PT0zPzE1Ojc7Zj4xJiZvPG47KXM9czw8Nnx0W28rK10mNjMsZi0tO2lmKGY+MSl7aVtyKytdPTY1NTMzO2NvbnRpbnVlfXM8NjU1MzY/aVtyKytdPXM6KHMtPTY1NTM2LGlbcisrXT01NTI5NnxzPj4xMCYxMDIzLGlbcisrXT01NjMyMHxzJjEwMjMpfXJldHVybiBPNihpLHIpfTtmbS5leHBvcnRzLnV0Zjhib3JkZXI9KHQsZSk9PntlPWV8fHQubGVuZ3RoLGU+dC5sZW5ndGgmJihlPXQubGVuZ3RoKTtsZXQgbj1lLTE7Zm9yKDtuPj0wJiYodFtuXSYxOTIpPT09MTI4OyluLS07cmV0dXJuIG48MHx8bj09PTA/ZTpuK211W3Rbbl1dPmU/bjplfX0pO3ZhciBnUz1YbigoWmZ0LHlTKT0+eyJ1c2Ugc3RyaWN0Ijt5Uy5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19KTt2YXIgYlM9WG4oKFFmdCxBUyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gRTYoKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfUFTLmV4cG9ydHM9RTZ9KTt2YXIgd1M9WG4oKEpmdCxUUyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUjYoKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX1UUy5leHBvcnRzPVI2fSk7dmFyIFNTPVhuKCh0dXQsR2EpPT57InVzZSBzdHJpY3QiO3ZhciBXaT1kUygpLEVTPW1TKCksVmc9X1MoKSx6Zz1nUygpLFM2PWJTKCksQzY9d1MoKSxSUz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHtaX05PX0ZMVVNIOng2LFpfRklOSVNIOlA2LFpfT0s6aHUsWl9TVFJFQU1fRU5EOmtnLFpfTkVFRF9ESUNUOkdnLFpfU1RSRUFNX0VSUk9SOk02LFpfREFUQV9FUlJPUjpPUyxaX01FTV9FUlJPUjpONn09b20oKTtmdW5jdGlvbiBfdSh0KXt0aGlzLm9wdGlvbnM9RVMuYXNzaWduKHtjaHVua1NpemU6MTAyNCo2NCx3aW5kb3dCaXRzOjE1LHRvOiIifSx0fHx7fSk7bGV0IGU9dGhpcy5vcHRpb25zO2UucmF3JiZlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNiYmKGUud2luZG93Qml0cz0tZS53aW5kb3dCaXRzLGUud2luZG93Qml0cz09PTAmJihlLndpbmRvd0JpdHM9LTE1KSksZS53aW5kb3dCaXRzPj0wJiZlLndpbmRvd0JpdHM8MTYmJiEodCYmdC53aW5kb3dCaXRzKSYmKGUud2luZG93Qml0cys9MzIpLGUud2luZG93Qml0cz4xNSYmZS53aW5kb3dCaXRzPDQ4JiYoZS53aW5kb3dCaXRzJjE1fHwoZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFM2LHRoaXMuc3RybS5hdmFpbF9vdXQ9MDtsZXQgbj1XaS5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLGUud2luZG93Qml0cyk7aWYobiE9PWh1KXRocm93IG5ldyBFcnJvcih6Z1tuXSk7aWYodGhpcy5oZWFkZXI9bmV3IEM2LFdpLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKSxlLmRpY3Rpb25hcnkmJih0eXBlb2YgZS5kaWN0aW9uYXJ5PT0ic3RyaW5nIj9lLmRpY3Rpb25hcnk9Vmcuc3RyaW5nMmJ1ZihlLmRpY3Rpb25hcnkpOlJTLmNhbGwoZS5kaWN0aW9uYXJ5KT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSImJihlLmRpY3Rpb25hcnk9bmV3IFVpbnQ4QXJyYXkoZS5kaWN0aW9uYXJ5KSksZS5yYXcmJihuPVdpLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxlLmRpY3Rpb25hcnkpLG4hPT1odSkpKXRocm93IG5ldyBFcnJvcih6Z1tuXSl9X3UucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXtsZXQgbj10aGlzLnN0cm0sbz10aGlzLm9wdGlvbnMuY2h1bmtTaXplLHI9dGhpcy5vcHRpb25zLmRpY3Rpb25hcnksaSxzLGY7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtmb3IoZT09PX5+ZT9zPWU6cz1lPT09ITA/UDY6eDYsUlMuY2FsbCh0KT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/bi5pbnB1dD1uZXcgVWludDhBcnJheSh0KTpuLmlucHV0PXQsbi5uZXh0X2luPTAsbi5hdmFpbF9pbj1uLmlucHV0Lmxlbmd0aDs7KXtmb3Iobi5hdmFpbF9vdXQ9PT0wJiYobi5vdXRwdXQ9bmV3IFVpbnQ4QXJyYXkobyksbi5uZXh0X291dD0wLG4uYXZhaWxfb3V0PW8pLGk9V2kuaW5mbGF0ZShuLHMpLGk9PT1HZyYmciYmKGk9V2kuaW5mbGF0ZVNldERpY3Rpb25hcnkobixyKSxpPT09aHU/aT1XaS5pbmZsYXRlKG4scyk6aT09PU9TJiYoaT1HZykpO24uYXZhaWxfaW4+MCYmaT09PWtnJiZuLnN0YXRlLndyYXA+MCYmdFtuLm5leHRfaW5dIT09MDspV2kuaW5mbGF0ZVJlc2V0KG4pLGk9V2kuaW5mbGF0ZShuLHMpO3N3aXRjaChpKXtjYXNlIE02OmNhc2UgT1M6Y2FzZSBHZzpjYXNlIE42OnJldHVybiB0aGlzLm9uRW5kKGkpLHRoaXMuZW5kZWQ9ITAsITF9aWYoZj1uLmF2YWlsX291dCxuLm5leHRfb3V0JiYobi5hdmFpbF9vdXQ9PT0wfHxpPT09a2cpKWlmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciKXtsZXQgdT1WZy51dGY4Ym9yZGVyKG4ub3V0cHV0LG4ubmV4dF9vdXQpLGM9bi5uZXh0X291dC11LGw9VmcuYnVmMnN0cmluZyhuLm91dHB1dCx1KTtuLm5leHRfb3V0PWMsbi5hdmFpbF9vdXQ9by1jLGMmJm4ub3V0cHV0LnNldChuLm91dHB1dC5zdWJhcnJheSh1LHUrYyksMCksdGhpcy5vbkRhdGEobCl9ZWxzZSB0aGlzLm9uRGF0YShuLm91dHB1dC5sZW5ndGg9PT1uLm5leHRfb3V0P24ub3V0cHV0Om4ub3V0cHV0LnN1YmFycmF5KDAsbi5uZXh0X291dCkpO2lmKCEoaT09PWh1JiZmPT09MCkpe2lmKGk9PT1rZylyZXR1cm4gaT1XaS5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChpKSx0aGlzLmVuZGVkPSEwLCEwO2lmKG4uYXZhaWxfaW49PT0wKWJyZWFrfX1yZXR1cm4hMH07X3UucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbih0KXt0aGlzLmNodW5rcy5wdXNoKHQpfTtfdS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24odCl7dD09PWh1JiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbigiIik6dGhpcy5yZXN1bHQ9RVMuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPXQsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ307ZnVuY3Rpb24gamcodCxlKXtsZXQgbj1uZXcgX3UoZSk7aWYobi5wdXNoKHQpLG4uZXJyKXRocm93IG4ubXNnfHx6Z1tuLmVycl07cmV0dXJuIG4ucmVzdWx0fWZ1bmN0aW9uIEk2KHQsZSl7cmV0dXJuIGU9ZXx8e30sZS5yYXc9ITAsamcodCxlKX1HYS5leHBvcnRzLkluZmxhdGU9X3U7R2EuZXhwb3J0cy5pbmZsYXRlPWpnO0dhLmV4cG9ydHMuaW5mbGF0ZVJhdz1JNjtHYS5leHBvcnRzLnVuZ3ppcD1qZztHYS5leHBvcnRzLmNvbnN0YW50cz1vbSgpfSk7dmFyIEhnPXt9O3BlKEhnLHtkZWZhdWx0OigpPT5WNn0pO2Z1bmN0aW9uIHY2KHQsZSl7bGV0IG49TXMuZnJvbVN0cmluZyh0LnR5cGUpLG89dC5idWZmZXI7ZzIodC5rZXksbyk7bGV0IHI9RzYobyk7bz1yLmJ1ZmZlcjtsZXQgaT1yLmxlbmd0aDtzd2l0Y2gobil7Y2FzZSBNcy5NRVRBREFUQTpyZXR1cm4gTDYobyxpLHQucXVhZEtleSk7Y2FzZSBNcy5URVJSQUlOOnJldHVybiBVNihvLGksZSk7Y2FzZSBNcy5EQlJPT1Q6cmV0dXJuIGUucHVzaChvKSx7YnVmZmVyOm99fX1mdW5jdGlvbiBMNih0LGUsbil7bGV0IG89bmV3IERhdGFWaWV3KHQpLHI9MCxpPW8uZ2V0VWludDMyKHIsITApO2lmKHIrPXphLGkhPT1GNil0aHJvdyBuZXcgQWUoIkludmFsaWQgbWFnaWMiKTtsZXQgcz1vLmdldFVpbnQzMihyLCEwKTtpZihyKz16YSxzIT09MSl0aHJvdyBuZXcgQWUoIkludmFsaWQgZGF0YSB0eXBlLiBNdXN0IGJlIDEgZm9yIFF1YWRUcmVlUGFja2V0Iik7bGV0IGY9by5nZXRVaW50MzIociwhMCk7aWYocis9emEsZiE9PTIpdGhyb3cgbmV3IEFlKCJJbnZhbGlkIFF1YWRUcmVlUGFja2V0IHZlcnNpb24uIE9ubHkgdmVyc2lvbiAyIGlzIHN1cHBvcnRlZC4iKTtsZXQgdT1vLmdldEludDMyKHIsITApO3IrPXhjO2xldCBjPW8uZ2V0SW50MzIociwhMCk7aWYocis9eGMsYyE9PTMyKXRocm93IG5ldyBBZSgiSW52YWxpZCBpbnN0YW5jZSBzaXplLiIpO2xldCBsPW8uZ2V0SW50MzIociwhMCk7cis9eGM7bGV0IHA9by5nZXRJbnQzMihyLCEwKTtyKz14YztsZXQgZD1vLmdldEludDMyKHIsITApO2lmKHIrPXhjLGwhPT11KmMrcil0aHJvdyBuZXcgQWUoIkludmFsaWQgZGF0YUJ1ZmZlck9mZnNldCIpO2lmKGwrcCtkIT09ZSl0aHJvdyBuZXcgQWUoIkludmFsaWQgcGFja2V0IG9mZnNldHMiKTtsZXQgbT1bXTtmb3IobGV0IEU9MDtFPHU7KytFKXtsZXQgdz1vLmdldFVpbnQ4KHIpOysrciwrK3I7bGV0IEM9by5nZXRVaW50MTYociwhMCk7cis9VmE7bGV0IE09by5nZXRVaW50MTYociwhMCk7cis9VmE7bGV0IE49by5nZXRVaW50MTYociwhMCk7cis9VmEscis9VmEscis9VmEscis9eGMscis9eGMscis9ODtsZXQgRj1vLmdldFVpbnQ4KHIrKyksST1vLmdldFVpbnQ4KHIrKyk7cis9VmEsbS5wdXNoKG5ldyB3Mih3LEMsTSxOLEYsSSkpfWxldCBfPVtdLGc9MDtmdW5jdGlvbiBiKEUsdyxDKXtsZXQgTT0hMTtpZihDPT09NCl7aWYody5oYXNTdWJ0cmVlKCkpcmV0dXJuO009ITB9Zm9yKGxldCBOPTA7Tjw0OysrTil7bGV0IEY9RStOLnRvU3RyaW5nKCk7aWYoTSlfW0ZdPW51bGw7ZWxzZSBpZihDPDQpaWYoIXcuaGFzQ2hpbGQoTikpX1tGXT1udWxsO2Vsc2V7aWYoZz09PXUpe2NvbnNvbGUubG9nKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGluc3RhbmNlcyIpO3JldHVybn1sZXQgST1tW2crK107X1tGXT1JLGIoRixJLEMrMSl9fX1sZXQgVD0wLE89bVtnKytdO3JldHVybiBuPT09IiI/KytUOl9bbl09TyxiKG4sTyxUKSxffWZ1bmN0aW9uIFU2KHQsZSxuKXtsZXQgbz1uZXcgRGF0YVZpZXcodCkscj1mdW5jdGlvbihmKXtmb3IobGV0IHU9MDt1PEI2OysrdSl7bGV0IGM9by5nZXRVaW50MzIoZiwhMCk7aWYoZis9emEsZis9YyxmPmUpdGhyb3cgbmV3IEFlKCJNYWxmb3JtZWQgdGVycmFpbiBwYWNrZXQgZm91bmQuIil9cmV0dXJuIGZ9LGk9MCxzPVtdO2Zvcig7cy5sZW5ndGg8RDY7KXtsZXQgZj1pO2k9cihpKTtsZXQgdT10LnNsaWNlKGYsaSk7bi5wdXNoKHUpLHMucHVzaCh1KX1yZXR1cm4gc31mdW5jdGlvbiBHNih0KXtsZXQgZT1uZXcgRGF0YVZpZXcodCksbj0wLG89ZS5nZXRVaW50MzIobiwhMCk7aWYobis9emEsbyE9PUNTJiZvIT09azYpdGhyb3cgbmV3IEFlKCJJbnZhbGlkIG1hZ2ljIik7bGV0IHI9ZS5nZXRVaW50MzIobixvPT09Q1MpO24rPXphO2xldCBpPW5ldyBVaW50OEFycmF5KHQsbikscz14Uy5kZWZhdWx0LmluZmxhdGUoaSk7aWYocy5sZW5ndGghPT1yKXRocm93IG5ldyBBZSgiU2l6ZSBvZiBwYWNrZXQgZG9lc24ndCBtYXRjaCBoZWFkZXIiKTtyZXR1cm4gc312YXIgeFMsVmEseGMsemEsTXMsRjYsRDYsQjYsQ1MsazYsVjYscWc9JCgoKT0+e0EyKCk7TzIoKTtKcigpO3hTPWRyKFNTKCksMSk7c28oKTtWYT1VaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVCx4Yz1JbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULHphPVVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULE1zPXtNRVRBREFUQTowLFRFUlJBSU46MSxEQlJPT1Q6Mn07TXMuZnJvbVN0cmluZz1mdW5jdGlvbih0KXtpZih0PT09Ik1ldGFkYXRhIilyZXR1cm4gTXMuTUVUQURBVEE7aWYodD09PSJUZXJyYWluIilyZXR1cm4gTXMuVEVSUkFJTjtpZih0PT09IkRiUm9vdCIpcmV0dXJuIE1zLkRCUk9PVH07RjY9MzIzMDE7RDY9NSxCNj00O0NTPTE5NTMwMjk4MDUsazY9MjkxNzAzNDEwMDtWNj1RZSh2Nil9KTtmdW5jdGlvbiB6Nih0KXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZSIsdCksdDw9LjA0MDQ1P3QqLjA3NzM5OTM4MDgwNDk1MzU3Ok1hdGgucG93KCh0Ky4wNTUpKi45NDc4NjcyOTg1NzgxOTkxLDIuNCl9dmFyIHVtLFBTPSQoKCk9PntXdCgpO3VtPXo2fSk7dmFyIFlnPXt9O3BlKFlnLHtkZWZhdWx0OigpPT5tOH0pO2Z1bmN0aW9uIGo2KHQsZSxuLG8scixpKXtsZXQgcz1uKigxLXQpK28qdCxmPXIqKDEtdCkraSp0O3JldHVybiBzKigxLWUpK2YqZX1mdW5jdGlvbiBsbSh0LGUsbixvKXtsZXQgcj10K2UqbjtyZXR1cm4gb1tyXX1mdW5jdGlvbiBINih0LGUsbil7bGV0IG89bi5uYXRpdmVFeHRlbnQscj0odC1vLndlc3QpLyhvLmVhc3Qtby53ZXN0KSoobi53aWR0aC0xKSxpPShlLW8uc291dGgpLyhvLm5vcnRoLW8uc291dGgpKihuLmhlaWdodC0xKSxzPU1hdGguZmxvb3IociksZj1NYXRoLmZsb29yKGkpO3ItPXMsaS09ZjtsZXQgdT1zPG4ud2lkdGg/cysxOnMsYz1mPG4uaGVpZ2h0P2YrMTpmO2Y9bi5oZWlnaHQtMS1mLGM9bi5oZWlnaHQtMS1jO2xldCBsPWxtKHMsZixuLndpZHRoLG4uYnVmZmVyKSxwPWxtKHUsZixuLndpZHRoLG4uYnVmZmVyKSxkPWxtKHMsYyxuLndpZHRoLG4uYnVmZmVyKSxtPWxtKHUsYyxuLndpZHRoLG4uYnVmZmVyKSxfPWo2KHIsaSxsLHAsZCxtKTtyZXR1cm4gXz1fKm4uc2NhbGUrbi5vZmZzZXQsX31mdW5jdGlvbiBNUyh0LGUsbil7Zm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspe2xldCByPW5bb10ubmF0aXZlRXh0ZW50LGk9bmV3IGE7aWYobltvXS5wcm9qZWN0aW9uVHlwZT09PSJXZWJNZXJjYXRvciIpe2xldCBzPW5bb10ucHJvamVjdGlvbi5fZWxsaXBzb2lkLl9yYWRpaTtpPW5ldyBubyhuZXcgWShzLngscy55LHMueikpLnByb2plY3QobmV3IHN0KHQsZSwwKSl9ZWxzZSBpLng9dCxpLnk9ZTtpZihpLng+ci53ZXN0JiZpLng8ci5lYXN0JiZpLnk+ci5zb3V0aCYmaS55PHIubm9ydGgpcmV0dXJuIEg2KGkueCxpLnksbltvXSl9cmV0dXJuIDB9ZnVuY3Rpb24gcTYodCxlLG4sbyxyLGkscyl7aWYocylyZXR1cm47bGV0IGY9TVMoci5sb25naXR1ZGUsci5sYXRpdHVkZSxpKTtmb3IobGV0IHU9MDt1PHQ7Kyt1KXtsZXQgYz1NUyhyLmxvbmdpdHVkZStQLnRvUmFkaWFucyhuKmVbdSozXSksci5sYXRpdHVkZStQLnRvUmFkaWFucyhvKmVbdSozKzFdKSxpKTtlW3UqMysyXSs9Yy1mfX1mdW5jdGlvbiBLNih0LGUsbixvLHIsaSxzLGYsdSl7aWYodD09PTB8fCFoKGUpfHxlLmxlbmd0aD09PTApcmV0dXJuO2xldCBjPW5ldyBZKE1hdGguc3FydChzLngpLE1hdGguc3FydChzLnkpLE1hdGguc3FydChzLnopKTtmb3IobGV0IGw9MDtsPHQ7KytsKXtsZXQgcD1sKjMsZD1wKzEsbT1wKzIsXz1uZXcgc3Q7Xy5sb25naXR1ZGU9by5sb25naXR1ZGUrUC50b1JhZGlhbnMoZiplW3BdKSxfLmxhdGl0dWRlPW8ubGF0aXR1ZGUrUC50b1JhZGlhbnModSplW2RdKSxfLmhlaWdodD1vLmhlaWdodCtlW21dO2xldCBnPXt9O2MuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oXyxnKSxnLngtPXIueCxnLnktPXIueSxnLnotPXIuejtsZXQgYj17fTtpZihaLm11bHRpcGx5QnlWZWN0b3IoaSxnLGIpLGVbcF09Yi54LGVbZF09Yi55LGVbbV09Yi56LGgobikpe2xldCBUPW5ldyBhKG5bcF0sbltkXSxuW21dKSxPPXt9O1oubXVsdGlwbHlCeVZlY3RvcihpLFQsTyksbltwXT1PLngsbltkXT1PLnksblttXT1PLnp9fX1mdW5jdGlvbiBXNih0LGUsbil7Zm9yKGxldCBvPTA7bzx0Oysrbyl7bGV0IHI9bltvKjRdLzY1NTM1LGk9bltvKjQrMV0vNjU1MzUscz0obltvKjQrMl0tbltvKjRdKS82NTUzNSxmPShuW28qNCszXS1uW28qNCsxXSkvNjU1MzU7ZVtvKjJdKj1zLGVbbyoyXSs9cixlW28qMisxXSo9ZixlW28qMisxXSs9aX19ZnVuY3Rpb24gWDYodCxlLG4sbyl7bGV0IHI9bmV3IFVpbnQzMkFycmF5KHQpLGk9aChlKT9mPT5lW2ZdOmY9PmYscz0wO2lmKG8mJmgobikpe2xldCBmPXU9Pm5baSh1KSo0KzNdPDI1NTtmb3IobGV0IHU9MDt1PHQ7dSs9MykhZih1KSYmIWYodSsxKSYmIWYodSsyKSYmKHJbcysrXT1pKHUpLHJbcysrXT1pKHUrMSkscltzKytdPWkodSsyKSk7aWYocz4wKXtsZXQgdT1zO2ZvcihsZXQgYz0wO2M8dDtjKz0zKShmKGMpfHxmKGMrMSl8fGYoYysyKSkmJihyW3UrK109aShjKSxyW3UrK109aShjKzEpLHJbdSsrXT1pKGMrMikpfWVsc2UgZm9yKGxldCB1PTA7dTx0OysrdSlyW3VdPWkodSl9ZWxzZXtzPXQ7Zm9yKGxldCBmPTA7Zjx0OysrZilyW2ZdPWkoZil9cmV0dXJue2luZGV4QXJyYXk6cix0cmFuc3BhcmVudFZlcnRleE9mZnNldDpzfX1mdW5jdGlvbiBZNih0LGUsbil7bGV0IG89ZVtuXTtpZihoKG8pKXJldHVybiBvO2xldCByPWVbbl09e3Bvc2l0aW9uczp7fSxpbmRpY2VzOnt9LGVkZ2VzOnt9fSxpPXRbbl0/P3QuZGVmYXVsdDtyZXR1cm4gci5oYXNPdXRsaW5lPWgoaT8uZWRnZXMpLHJ9ZnVuY3Rpb24gJDYodCxlLG4sbyl7aWYoIWgodFtuXSkpe2xldCByPW4qMyxpPWU7Zm9yKGxldCBzPTA7czwzO3MrKyl7bGV0IGY9b1tyK3NdO2goaVtmXSl8fChpW2ZdPXt9KSxpPWlbZl19aChpLmluZGV4KXx8KGkuaW5kZXg9biksdFtuXT1pLmluZGV4fX1mdW5jdGlvbiBaNih0LGUsbixvLHIsaSl7bGV0IHMsZjtvPHI/KHM9byxmPXIpOihzPXIsZj1vKTtsZXQgdT10W3NdO2godSl8fCh1PXRbc109e30pO2xldCBjPXVbZl07aChjKXx8KGM9dVtmXT17bm9ybWFsc0luZGV4OltdLG91dGxpbmVzOltdfSksYy5ub3JtYWxzSW5kZXgucHVzaChpKSwoYy5vdXRsaW5lcy5sZW5ndGg9PT0wfHxlIT09b3x8biE9PXIpJiZjLm91dGxpbmVzLnB1c2goZSxuKX1mdW5jdGlvbiBRNih0LGUsbixvKXtsZXQgcj1bXTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krPTMpe2xldCBzPWgoZSk/ZVtuW2ldXToiZGVmYXVsdCIsZj1ZNih0LHIscyk7aWYoIWYuaGFzT3V0bGluZSljb250aW51ZTtsZXQgdT1mLmluZGljZXMsYz1mLnBvc2l0aW9ucztmb3IobGV0IHA9MDtwPDM7cCsrKXtsZXQgZD1uW2krcF07JDYodSxjLGQsbyl9bGV0IGw9Zi5lZGdlcztmb3IobGV0IHA9MDtwPDM7cCsrKXtsZXQgZD1uW2krcF0sbT1uW2krKHArMSklM10sXz11W2RdLGc9dVttXTtaNihsLGQsbSxfLGcsaSl9fXJldHVybiByfWZ1bmN0aW9uIE5TKHQsZSxuLG8pe2xldCByPW5bZV0qMyxpPW5bZSsxXSozLHM9bltlKzJdKjM7YS5mcm9tQXJyYXkobyxyLEFpKSxhLmZyb21BcnJheShvLGkscG0pLGEuZnJvbUFycmF5KG8scyxkbSksYS5zdWJ0cmFjdChwbSxBaSxwbSksYS5zdWJ0cmFjdChkbSxBaSxkbSksYS5jcm9zcyhwbSxkbSxBaSk7bGV0IGY9YS5tYWduaXR1ZGUoQWkpO2YhPT0wJiZhLmRpdmlkZUJ5U2NhbGFyKEFpLGYsQWkpO2xldCB1PWUqMyxjPShlKzEpKjMsbD0oZSsyKSozO2EucGFjayhBaSx0LHUpLGEucGFjayhBaSx0LGMpLGEucGFjayhBaSx0LGwpfWZ1bmN0aW9uIEo2KHQsZSxuKXthLmZyb21BcnJheSh0LGUsbW0pLGEuZnJvbUFycmF5KHQsbixLZyk7bGV0IG89YS5kb3QobW0sS2cpLHI9YS5tYWduaXR1ZGUoYS5jcm9zcyhtbSxLZyxtbSkpO3JldHVybiBNYXRoLmF0YW4yKHIsbyk8LjI1fWZ1bmN0aW9uIHQ4KHQsZSxuLG8scil7aWYoZS5ub3JtYWxzSW5kZXgubGVuZ3RoPjEpe2xldCBpPW8ubGVuZ3RoPT09ci5sZW5ndGg7Zm9yKGxldCBzPTA7czxlLm5vcm1hbHNJbmRleC5sZW5ndGg7cysrKXtsZXQgZj1lLm5vcm1hbHNJbmRleFtzXTtpZihoKHJbZiozXSl8fE5TKHIsZixuLG8pLHMhPT0wKWZvcihsZXQgdT0wO3U8czt1Kyspe2xldCBjPWUubm9ybWFsc0luZGV4W3VdLGw9aT9uW2ZdKjM6ZiozLHA9aT9uW2NdKjM6YyozO2lmKEo2KHIsbCxwKSlyZXR1cm59fX10LnB1c2goLi4uZS5vdXRsaW5lcyl9ZnVuY3Rpb24gZTgodCxlLG4sbyxyKXtsZXQgaT1PYmplY3Qua2V5cyhlKTtmb3IobGV0IHM9MDtzPGkubGVuZ3RoO3MrKyl7bGV0IGY9ZVtpW3NdXSx1PU9iamVjdC5rZXlzKGYpO2ZvcihsZXQgYz0wO2M8dS5sZW5ndGg7YysrKXtsZXQgbD1mW3VbY11dO3Q4KHQsbCxuLG8scil9fX1mdW5jdGlvbiBuOCh0LGUsbixvKXtsZXQgcj1bXSxpPU9iamVjdC5rZXlzKHQpO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgZj10W2lbc11dLmVkZ2VzO2U4KHIsZixlLG4sbyl9cmV0dXJuIHJ9ZnVuY3Rpb24gbzgodCxlLG4sbyxyKXtpZighaCh0KXx8T2JqZWN0LmtleXModCkubGVuZ3RoPT09MClyZXR1cm47bGV0IGk9UTYodCxlLG4sbyk7KCFoKHIpfHxuLmxlbmd0aCozIT09ci5sZW5ndGgpJiYocj1bXSk7bGV0IHM9bjgoaSxuLG8scik7cmV0dXJuIHMubGVuZ3RoPjA/bmV3IFVpbnQzMkFycmF5KHMpOnZvaWQgMH1mdW5jdGlvbiByOCh0KXtsZXQgZT1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rPTQpZVtuXT11bShuZS5ieXRlVG9GbG9hdCh0W25dKSksZVtuKzFdPXVtKG5lLmJ5dGVUb0Zsb2F0KHRbbisxXSkpLGVbbisyXT11bShuZS5ieXRlVG9GbG9hdCh0W24rMl0pKSxlW24rM109bmUuYnl0ZVRvRmxvYXQodFtuKzNdKTtyZXR1cm4gZX1mdW5jdGlvbiBpOCh0LGUsbixvLHIsaSxzKXtsZXQgZj17bm9ybWFsczp2b2lkIDAscG9zaXRpb25zOnZvaWQgMCx1djBzOnZvaWQgMCxjb2xvcnM6dm9pZCAwLGZlYXR1cmVJbmRleDp2b2lkIDAsdmVydGV4Q291bnQ6dm9pZCAwfTtpZih0PT09MHx8IWgobil8fG4ubGVuZ3RoPT09MHx8aChvKSlyZXR1cm4gZjtpZihoKGUpKXtmLnZlcnRleENvdW50PWUubGVuZ3RoLGYucG9zaXRpb25zPW5ldyBGbG9hdDMyQXJyYXkoZS5sZW5ndGgqMyksZi51djBzPWgocik/bmV3IEZsb2F0MzJBcnJheShlLmxlbmd0aCoyKTp2b2lkIDAsZi5jb2xvcnM9aChpKT9uZXcgVWludDhBcnJheShlLmxlbmd0aCo0KTp2b2lkIDAsZi5mZWF0dXJlSW5kZXg9aChzKT9uZXcgQXJyYXkoZS5sZW5ndGgpOnZvaWQgMDtmb3IobGV0IHU9MDt1PGUubGVuZ3RoO3UrKyl7bGV0IGM9ZVt1XTtmLnBvc2l0aW9uc1t1KjNdPW5bYyozXSxmLnBvc2l0aW9uc1t1KjMrMV09bltjKjMrMV0sZi5wb3NpdGlvbnNbdSozKzJdPW5bYyozKzJdLGgoZi51djBzKSYmKGYudXYwc1t1KjJdPXJbYyoyXSxmLnV2MHNbdSoyKzFdPXJbYyoyKzFdKSxoKGYuY29sb3JzKSYmKGYuY29sb3JzW3UqNF09aVtjKjRdLGYuY29sb3JzW3UqNCsxXT1pW2MqNCsxXSxmLmNvbG9yc1t1KjQrMl09aVtjKjQrMl0sZi5jb2xvcnNbdSo0KzNdPWlbYyo0KzNdKSxoKGYuZmVhdHVyZUluZGV4KSYmKGYuZmVhdHVyZUluZGV4W3VdPXNbY10pfXQ9ZS5sZW5ndGgsbj1mLnBvc2l0aW9uc31lPW5ldyBBcnJheSh0KTtmb3IobGV0IHU9MDt1PHQ7dSsrKWVbdV09dTtmLm5vcm1hbHM9bmV3IEZsb2F0MzJBcnJheShlLmxlbmd0aCozKTtmb3IobGV0IHU9MDt1PGUubGVuZ3RoO3UrPTMpTlMoZi5ub3JtYWxzLHUsZSxuKTtyZXR1cm4gZn1mdW5jdGlvbiBzOCh0LGUsbixvLHIsaSxzLGYpe2lmKHQ9PT0wfHwhaChuKXx8bi5sZW5ndGg9PT0wKXJldHVybntidWZmZXJzOltdLGJ1ZmZlclZpZXdzOltdLGFjY2Vzc29yczpbXSxtZXNoZXM6W10sbm9kZXM6W10sbm9kZXNJblNjZW5lOltdfTtsZXQgdT1bXSxjPVtdLGw9W10scD1bXSxkPVtdLG09W10sXz17fSxnPVtdO2goZSkmJih0PWUubGVuZ3RoKTtsZXR7aW5kZXhBcnJheTpiLHRyYW5zcGFyZW50VmVydGV4T2Zmc2V0OlR9PVg2KHQsZSxpLGYuc3BsaXRHZW9tZXRyeUJ5Q29sb3JUcmFuc3BhcmVuY3kpLE89bmV3IEJsb2IoW2JdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSksRT1VUkwuY3JlYXRlT2JqZWN0VVJMKE8pLHc9dCxDPWYuZW5hYmxlRmVhdHVyZXMmJmgocyk/bmV3IEZsb2F0MzJBcnJheShzLmxlbmd0aCk6dm9pZCAwLE09MDtpZihoKEMpKWZvcihsZXQgZnQ9MDtmdDxzLmxlbmd0aDsrK2Z0KXtDW2Z0XT1zW2Z0XTtsZXQgSXQ9c1tmdF0rMTtNPEl0JiYoTT1JdCl9bGV0IE4sRj1vOChmLnN5bWJvbG9neURhdGEscyxiLG4sbyk7aWYoaChGKSl7bGV0IGZ0PW5ldyBCbG9iKFtGXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO049VVJMLmNyZWF0ZU9iamVjdFVSTChmdCl9bGV0IEk9bi5zdWJhcnJheSgwLHcqMyksdj1uZXcgQmxvYihbSV0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KSxCPVVSTC5jcmVhdGVPYmplY3RVUkwodiksQT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksUz1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkseD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksRD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksej1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksaj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Zm9yKGxldCBmdD0wO2Z0PEkubGVuZ3RoLzM7ZnQrKylBPU1hdGgubWluKEEsSVtmdCozKzBdKSxTPU1hdGgubWF4KFMsSVtmdCozKzBdKSx4PU1hdGgubWluKHgsSVtmdCozKzFdKSxEPU1hdGgubWF4KEQsSVtmdCozKzFdKSx6PU1hdGgubWluKHosSVtmdCozKzJdKSxqPU1hdGgubWF4KGosSVtmdCozKzJdKTtsZXQgaz1vP28uc3ViYXJyYXkoMCx3KjMpOnZvaWQgMCxxO2lmKGgoaykpe2xldCBmdD1uZXcgQmxvYihba10se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtxPVVSTC5jcmVhdGVPYmplY3RVUkwoZnQpfWxldCBXPXI/ci5zdWJhcnJheSgwLHcqMik6dm9pZCAwLFI7aWYoaChXKSl7bGV0IGZ0PW5ldyBCbG9iKFtXXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO1I9VVJMLmNyZWF0ZU9iamVjdFVSTChmdCl9bGV0IG50PWgoaSk/cjgoaS5zdWJhcnJheSgwLHcqNCkpOnZvaWQgMCxjdDtpZihoKG50KSl7bGV0IGZ0PW5ldyBCbG9iKFtudF0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtjdD1VUkwuY3JlYXRlT2JqZWN0VVJMKGZ0KX1sZXQgbHQ9aChDKT9DLnN1YmFycmF5KDAsdyk6dm9pZCAwLF90O2lmKGgobHQpKXtsZXQgZnQ9bmV3IEJsb2IoW2x0XSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO190PVVSTC5jcmVhdGVPYmplY3RVUkwoZnQpfWxldCBvdD1oKEMpP25ldyBGbG9hdDMyQXJyYXkoTSk6dm9pZCAwLHh0O2lmKGgob3QpKXtmb3IobGV0IEl0PTA7SXQ8b3QubGVuZ3RoOysrSXQpb3RbSXRdPUl0O2xldCBmdD1uZXcgQmxvYihbb3RdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSk7eHQ9VVJMLmNyZWF0ZU9iamVjdFVSTChmdCl9bGV0IHl0PXt9LFN0PXt9O3l0LlBPU0lUSU9OPWwubGVuZ3RoLHUucHVzaCh7dXJpOkIsYnl0ZUxlbmd0aDpJLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjp1Lmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOkkuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSxsLnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50OkkubGVuZ3RoLzMsdHlwZToiVkVDMyIsbWF4OltBLHgsel0sbWluOltTLEQsal19KSxoKHEpJiYoeXQuTk9STUFMPWwubGVuZ3RoLHUucHVzaCh7dXJpOnEsYnl0ZUxlbmd0aDprLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjp1Lmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOmsuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSxsLnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50OmsubGVuZ3RoLzMsdHlwZToiVkVDMyJ9KSksaChSKSYmKHl0LlRFWENPT1JEXzA9bC5sZW5ndGgsdS5wdXNoKHt1cmk6UixieXRlTGVuZ3RoOlcuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOnUubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6Vy5ieXRlTGVuZ3RoLHRhcmdldDozNDk2Mn0pLGwucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjYsY291bnQ6Vy5sZW5ndGgvMix0eXBlOiJWRUMyIn0pKSxoKGN0KSYmKHl0LkNPTE9SXzA9bC5sZW5ndGgsdS5wdXNoKHt1cmk6Y3QsYnl0ZUxlbmd0aDpudC5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6dS5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpudC5ieXRlTGVuZ3RoLHRhcmdldDozNDk2Mn0pLGwucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjYsY291bnQ6bnQubGVuZ3RoLzQsdHlwZToiVkVDNCJ9KSksaChfdCkmJih5dC5fRkVBVFVSRV9JRF8wPWwubGVuZ3RoLHUucHVzaCh7dXJpOl90LGJ5dGVMZW5ndGg6bHQuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOnUubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6bHQuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KSxsLnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50Omx0Lmxlbmd0aCx0eXBlOiJTQ0FMQVIifSksU3QuRVhUX21lc2hfZmVhdHVyZXM9e2ZlYXR1cmVJZHM6W3thdHRyaWJ1dGU6MCxwcm9wZXJ0eVRhYmxlOjAsZmVhdHVyZUNvdW50Ok19XX0sZy5wdXNoKCJFWFRfbWVzaF9mZWF0dXJlcyIpKSxoKHh0KSYmKHUucHVzaCh7dXJpOnh0LGJ5dGVMZW5ndGg6b3QuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOnUubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6b3QuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KSxfLkVYVF9zdHJ1Y3R1cmFsX21ldGFkYXRhPXtzY2hlbWE6e2lkOiJpM3MtbWV0YWRhdGEtc2NoZW1hLTAwMSIsbmFtZToiSTNTIG1ldGFkYXRhIHNjaGVtYSAwMDEiLGRlc2NyaXB0aW9uOiJUaGUgc2NoZW1hIGZvciBJM1MgbWV0YWRhdGEiLHZlcnNpb246IjEuMCIsY2xhc3Nlczp7ZmVhdHVyZTp7bmFtZToiZmVhdHVyZSIsZGVzY3JpcHRpb246IkZlYXR1cmUgbWV0YWRhdGEiLHByb3BlcnRpZXM6e2luZGV4OntkZXNjcmlwdGlvbjoiVGhlIGZlYXR1cmUgaW5kZXgiLHR5cGU6IlNDQUxBUiIsY29tcG9uZW50VHlwZToiRkxPQVQzMiIscmVxdWlyZWQ6ITB9fX19fSxwcm9wZXJ0eVRhYmxlczpbe25hbWU6ImZlYXR1cmUtaW5kaWNlcy1tYXBwaW5nIixjbGFzczoiZmVhdHVyZSIsY291bnQ6TSxwcm9wZXJ0aWVzOntpbmRleDp7dmFsdWVzOmMubGVuZ3RoLTF9fX1dfSxnLnB1c2goIkVYVF9zdHJ1Y3R1cmFsX21ldGFkYXRhIikpLGgoTikmJih1LnB1c2goe3VyaTpOLGJ5dGVMZW5ndGg6Ri5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6dS5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpGLmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYzfSksbC5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGNvbXBvbmVudFR5cGU6NTEyNSxjb3VudDpGLmxlbmd0aCx0eXBlOiJTQ0FMQVIifSksU3QuQ0VTSVVNX3ByaW1pdGl2ZV9vdXRsaW5lPXtpbmRpY2VzOmwubGVuZ3RoLTF9LGcucHVzaCgiQ0VTSVVNX3ByaW1pdGl2ZV9vdXRsaW5lIikpLHUucHVzaCh7dXJpOkUsYnl0ZUxlbmd0aDpiLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjp1Lmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOmIuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KTtsZXQgZHQ9W107cmV0dXJuIFQ+MCYmKGwucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjUsY291bnQ6VCx0eXBlOiJTQ0FMQVIifSksZHQucHVzaCh7YXR0cmlidXRlczp5dCxpbmRpY2VzOmwubGVuZ3RoLTEsbWF0ZXJpYWw6ZHQubGVuZ3RoLGV4dGVuc2lvbnM6U3R9KSksVDx0JiYobC5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDo0KlQsY29tcG9uZW50VHlwZTo1MTI1LGNvdW50OnQtVCx0eXBlOiJTQ0FMQVIifSksZHQucHVzaCh7YXR0cmlidXRlczp5dCxpbmRpY2VzOmwubGVuZ3RoLTEsbWF0ZXJpYWw6ZHQubGVuZ3RoLGV4dGVuc2lvbnM6U3QsZXh0cmE6e2lzVHJhbnNwYXJlbnQ6ITB9fSkpLHAucHVzaCh7cHJpbWl0aXZlczpkdH0pLG0ucHVzaCgwKSxkLnB1c2goe21lc2g6MH0pLHtidWZmZXJzOnUsYnVmZmVyVmlld3M6YyxhY2Nlc3NvcnM6bCxtZXNoZXM6cCxub2RlczpkLG5vZGVzSW5TY2VuZTptLHJvb3RFeHRlbnNpb25zOl8sZXh0ZW5zaW9uc1VzZWQ6Z319ZnVuY3Rpb24gYzgodCxlLG4sbyl7bGV0IHI9bmV3IFVpbnQ4QXJyYXkodCwwLDUpO3JldHVybiByWzBdPT09NjgmJnJbMV09PT04MiYmclsyXT09PTY1JiZyWzNdPT09NjcmJnJbNF09PT03OT9hOCh0LG4pOnU4KHQsZSxuLG8pfWZ1bmN0aW9uIGE4KHQpe2xldCBlPVhnLG49bmV3IGUuRGVjb2RlckJ1ZmZlcixvPW5ldyBVaW50OEFycmF5KHQpO24uSW5pdChvLG8ubGVuZ3RoKTtsZXQgcj1uZXcgZS5EZWNvZGVyLGk9ci5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlKG4pLHM9bmV3IGUuTWV0YWRhdGFRdWVyaWVyLGYsdTtpPT09ZS5UUklBTkdVTEFSX01FU0gmJihmPW5ldyBlLk1lc2gsdT1yLkRlY29kZUJ1ZmZlclRvTWVzaChuLGYpKTtsZXQgYz17dmVydGV4Q291bnQ6WzBdLGZlYXR1cmVDb3VudDowfTtpZihoKHUpJiZ1Lm9rKCkmJmYucHRyIT09MCl7bGV0IGw9Zi5udW1fZmFjZXMoKSxwPWYubnVtX2F0dHJpYnV0ZXMoKSxkPWYubnVtX3BvaW50cygpO2MuaW5kaWNlcz1uZXcgVWludDMyQXJyYXkobCozKTtsZXQgbT1jLmluZGljZXM7Yy52ZXJ0ZXhDb3VudFswXT1kLGMuc2NhbGVfeD0xLGMuc2NhbGVfeT0xO2xldCBfPW5ldyBlLkRyYWNvSW50MzJBcnJheSgzKTtmb3IobGV0IGc9MDtnPGw7KytnKXIuR2V0RmFjZUZyb21NZXNoKGYsZyxfKSxtW2cqM109Xy5HZXRWYWx1ZSgwKSxtW2cqMysxXT1fLkdldFZhbHVlKDEpLG1bZyozKzJdPV8uR2V0VmFsdWUoMik7ZS5kZXN0cm95KF8pO2ZvcihsZXQgZz0wO2c8cDsrK2cpe2xldCBiPXIuR2V0QXR0cmlidXRlKGYsZyksVD1mOChlLHIsZixiLGQpLE89Yi5hdHRyaWJ1dGVfdHlwZSgpLEU9InVua25vd24iO089PT1lLlBPU0lUSU9OP0U9InBvc2l0aW9ucyI6Tz09PWUuTk9STUFMP0U9Im5vcm1hbHMiOk89PT1lLkNPTE9SP0U9ImNvbG9ycyI6Tz09PWUuVEVYX0NPT1JEJiYoRT0idXYwcyIpO2xldCB3PXIuR2V0QXR0cmlidXRlTWV0YWRhdGEoZixnKTtpZih3LnB0ciE9PTApe2xldCBDPXMuTnVtRW50cmllcyh3KTtmb3IobGV0IE09MDtNPEM7KytNKXtsZXQgTj1zLkdldEVudHJ5TmFtZSh3LE0pO049PT0iaTNzLXNjYWxlX3giP2Muc2NhbGVfeD1zLkdldERvdWJsZUVudHJ5KHcsImkzcy1zY2FsZV94Iik6Tj09PSJpM3Mtc2NhbGVfeSI/Yy5zY2FsZV95PXMuR2V0RG91YmxlRW50cnkodywiaTNzLXNjYWxlX3kiKTpOPT09Imkzcy1hdHRyaWJ1dGUtdHlwZSImJihFPXMuR2V0U3RyaW5nRW50cnkodywiaTNzLWF0dHJpYnV0ZS10eXBlIikpfX1oKGNbRV0pJiZjb25zb2xlLmxvZygiQXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIixFKSxjW0VdPVQsRT09PSJmZWF0dXJlLWluZGV4IiYmYy5mZWF0dXJlQ291bnQrK31lLmRlc3Ryb3koZil9cmV0dXJuIGUuZGVzdHJveShzKSxlLmRlc3Ryb3kociksY31mdW5jdGlvbiBmOCh0LGUsbixvLHIpe2xldCBpPW8ubnVtX2NvbXBvbmVudHMoKSpyLHMsdT1bZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0ludDhBcnJheShpKSxlLkdldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IEludDhBcnJheShpKTtmb3IobGV0IHA9MDtwPGk7KytwKWxbcF09cy5HZXRWYWx1ZShwKTtyZXR1cm4gbH0sZnVuY3Rpb24oKXtzPW5ldyB0LkRyYWNvSW50OEFycmF5KGkpLGUuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IFVpbnQ4QXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0ludDE2QXJyYXkoaSksZS5HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50cyhuLG8scyl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgbD1uZXcgSW50MTZBcnJheShpKTtmb3IobGV0IHA9MDtwPGk7KytwKWxbcF09cy5HZXRWYWx1ZShwKTtyZXR1cm4gbH0sZnVuY3Rpb24oKXtzPW5ldyB0LkRyYWNvSW50MTZBcnJheShpKSxlLkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cyhuLG8scyl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgbD1uZXcgVWludDE2QXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0ludDMyQXJyYXkoaSksZS5HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50cyhuLG8scyl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgbD1uZXcgSW50MzJBcnJheShpKTtmb3IobGV0IHA9MDtwPGk7KytwKWxbcF09cy5HZXRWYWx1ZShwKTtyZXR1cm4gbH0sZnVuY3Rpb24oKXtzPW5ldyB0LkRyYWNvSW50MzJBcnJheShpKSxlLkdldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50cyhuLG8scyl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgbD1uZXcgVWludDMyQXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe30sZnVuY3Rpb24oKXtzPW5ldyB0LkRyYWNvRmxvYXQzMkFycmF5KGkpLGUuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IEZsb2F0MzJBcnJheShpKTtmb3IobGV0IHA9MDtwPGk7KytwKWxbcF09cy5HZXRWYWx1ZShwKTtyZXR1cm4gbH0sZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb1VJbnQ4QXJyYXkoaSksZS5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cyhuLG8scyl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgbD1uZXcgVWludDhBcnJheShpKTtmb3IobGV0IHA9MDtwPGk7KytwKWxbcF09cy5HZXRWYWx1ZShwKTtyZXR1cm4gbH1dW28uZGF0YV90eXBlKCldKCk7cmV0dXJuIGgocykmJnQuZGVzdHJveShzKSx1fWZ1bmN0aW9uIHU4KHQsZSxuLG8pe2xldCByPXt2ZXJ0ZXhDb3VudDowfSxpPW5ldyBEYXRhVmlldyh0KTt0cnl7bGV0IHM9MDtpZihyLnZlcnRleENvdW50PWkuZ2V0VWludDMyKHMsMSkscys9NCxyLmZlYXR1cmVDb3VudD1pLmdldFVpbnQzMihzLDEpLHMrPTQsaChuKSlmb3IobGV0IGY9MDtmPG4uYXR0cmlidXRlcy5sZW5ndGg7ZisrKWgoaG1bbi5hdHRyaWJ1dGVzW2ZdXSk/cz1obVtuLmF0dHJpYnV0ZXNbZl1dKHIsdCxzKTpjb25zb2xlLmVycm9yKCJVbmtub3duIGRlY29kZXIgZm9yIixuLmF0dHJpYnV0ZXNbZl0pO2Vsc2V7bGV0IGY9ZS5vcmRlcmluZyx1PWUuZmVhdHVyZUF0dHJpYnV0ZU9yZGVyO2gobykmJmgoby5nZW9tZXRyeURhdGEpJiZoKG8uZ2VvbWV0cnlEYXRhWzBdKSYmaChvLmdlb21ldHJ5RGF0YVswXS5wYXJhbXMpJiYoZj1PYmplY3Qua2V5cyhvLmdlb21ldHJ5RGF0YVswXS5wYXJhbXMudmVydGV4QXR0cmlidXRlcyksdT1PYmplY3Qua2V5cyhvLmdlb21ldHJ5RGF0YVswXS5wYXJhbXMuZmVhdHVyZUF0dHJpYnV0ZXMpKTtmb3IobGV0IGM9MDtjPGYubGVuZ3RoO2MrKyl7bGV0IGw9aG1bZltjXV07cz1sKHIsdCxzKX1mb3IobGV0IGM9MDtjPHUubGVuZ3RoO2MrKyl7bGV0IGw9aG1bdVtjXV07cz1sKHIsdCxzKX19fWNhdGNoKHMpe2NvbnNvbGUuZXJyb3Iocyl9cmV0dXJuIHIuc2NhbGVfeD0xLHIuc2NhbGVfeT0xLHJ9ZnVuY3Rpb24gbDgodCl7bGV0IGU9YzgodC5iaW5hcnlEYXRhLHQuc2NoZW1hLHQuYnVmZmVySW5mbyx0LmZlYXR1cmVEYXRhKTtoKHQuZ2VvaWREYXRhTGlzdCkmJnQuZ2VvaWREYXRhTGlzdC5sZW5ndGg+MCYmcTYoZS52ZXJ0ZXhDb3VudCxlLnBvc2l0aW9ucyxlLnNjYWxlX3gsZS5zY2FsZV95LHQuY2FydG9ncmFwaGljQ2VudGVyLHQuZ2VvaWREYXRhTGlzdCwhMSksSzYoZS52ZXJ0ZXhDb3VudCxlLnBvc2l0aW9ucyxlLm5vcm1hbHMsdC5jYXJ0b2dyYXBoaWNDZW50ZXIsdC5jYXJ0ZXNpYW5DZW50ZXIsdC5wYXJlbnRSb3RhdGlvbix0LmVsbGlwc29pZFJhZGlpU3F1YXJlLGUuc2NhbGVfeCxlLnNjYWxlX3kpLGgoZS51djBzKSYmaChlWyJ1di1yZWdpb24iXSkmJlc2KGUudmVydGV4Q291bnQsZS51djBzLGVbInV2LXJlZ2lvbiJdKTtsZXQgbjtpZihoKGVbImZlYXR1cmUtaW5kZXgiXSkpbj1lWyJmZWF0dXJlLWluZGV4Il07ZWxzZSBpZihoKGUuZmFjZVJhbmdlKSl7bj1uZXcgQXJyYXkoZS52ZXJ0ZXhDb3VudCk7Zm9yKGxldCBzPTA7czxlLmZhY2VSYW5nZS5sZW5ndGgtMTtzKz0yKXtsZXQgZj1zLzIsdT1lLmZhY2VSYW5nZVtzXSxjPWUuZmFjZVJhbmdlW3MrMV07Zm9yKGxldCBsPXU7bDw9YztsKyspbltsKjNdPWYsbltsKjMrMV09ZixuW2wqMysyXT1mfX1pZih0LmNhbGN1bGF0ZU5vcm1hbHMpe2xldCBzPWk4KGUudmVydGV4Q291bnQsZS5pbmRpY2VzLGUucG9zaXRpb25zLGUubm9ybWFscyxlLnV2MHMsZS5jb2xvcnMsbik7aChzLm5vcm1hbHMpJiYoZS5ub3JtYWxzPXMubm9ybWFscyxoKHMudmVydGV4Q291bnQpJiYoZS52ZXJ0ZXhDb3VudD1zLnZlcnRleENvdW50LGUuaW5kaWNlcz1zLmluZGljZXMsZS5wb3NpdGlvbnM9cy5wb3NpdGlvbnMsZS51djBzPXMudXYwcyxlLmNvbG9ycz1zLmNvbG9ycyxuPXMuZmVhdHVyZUluZGV4KSl9bGV0IG89czgoZS52ZXJ0ZXhDb3VudCxlLmluZGljZXMsZS5wb3NpdGlvbnMsZS5ub3JtYWxzLGUudXYwcyxlLmNvbG9ycyxuLHQpLHI9e3Bvc2l0aW9uczplLnBvc2l0aW9ucyxpbmRpY2VzOmUuaW5kaWNlcyxmZWF0dXJlSW5kZXg6bixzb3VyY2VVUkw6dC51cmwsY2FydGVzaWFuQ2VudGVyOnQuY2FydGVzaWFuQ2VudGVyLHBhcmVudFJvdGF0aW9uOnQucGFyZW50Um90YXRpb259O3JldHVybiBvLl9jdXN0b21BdHRyaWJ1dGVzPXIse21lc2hEYXRhOm99fWFzeW5jIGZ1bmN0aW9uIHA4KHQsZSl7bGV0IG49dC53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gaChuKSYmaChuLndhc21CaW5hcnlGaWxlKT9YZz1hd2FpdCgwLFdnLmRlZmF1bHQpKG4pOlhnPWF3YWl0KDAsV2cuZGVmYXVsdCkoKSwhMH1mdW5jdGlvbiBkOCh0LGUpe2xldCBuPXQud2ViQXNzZW1ibHlDb25maWc7cmV0dXJuIGgobik/cDgodCxlKTpsOCh0LGUpfXZhciBXZyxYZyxBaSxwbSxkbSxtbSxLZyxobSxtOCwkZz0kKCgpPT57c28oKTthdCgpO2ljKCk7JHQoKTtJZSgpO0x0KCk7UGEoKTtCbigpO0t0KCk7V2c9ZHIoUmcoKSwxKTtQUygpO0FpPW5ldyBhLHBtPW5ldyBhLGRtPW5ldyBhO21tPW5ldyBhLEtnPW5ldyBhO2htPXtwb3NpdGlvbjpmdW5jdGlvbih0LGUsbil7bGV0IG89dC52ZXJ0ZXhDb3VudCozO3JldHVybiB0LnBvc2l0aW9ucz1uZXcgRmxvYXQzMkFycmF5KGUsbixvKSxuKz1vKjQsbn0sbm9ybWFsOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LnZlcnRleENvdW50KjM7cmV0dXJuIHQubm9ybWFscz1uZXcgRmxvYXQzMkFycmF5KGUsbixvKSxuKz1vKjQsbn0sdXYwOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LnZlcnRleENvdW50KjI7cmV0dXJuIHQudXYwcz1uZXcgRmxvYXQzMkFycmF5KGUsbixvKSxuKz1vKjQsbn0sY29sb3I6ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQudmVydGV4Q291bnQqNDtyZXR1cm4gdC5jb2xvcnM9bmV3IFVpbnQ4QXJyYXkoZSxuLG8pLG4rPW8sbn0sZmVhdHVyZUlkOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LmZlYXR1cmVDb3VudDtyZXR1cm4gbis9byo4LG59LGlkOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LmZlYXR1cmVDb3VudDtyZXR1cm4gbis9byo4LG59LGZhY2VSYW5nZTpmdW5jdGlvbih0LGUsbil7bGV0IG89dC5mZWF0dXJlQ291bnQqMjtyZXR1cm4gdC5mYWNlUmFuZ2U9bmV3IFVpbnQzMkFycmF5KGUsbixvKSxuKz1vKjQsbn0sdXZSZWdpb246ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQudmVydGV4Q291bnQqNDtyZXR1cm4gdFsidXYtcmVnaW9uIl09bmV3IFVpbnQxNkFycmF5KGUsbixvKSxuKz1vKjIsbn0scmVnaW9uOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LnZlcnRleENvdW50KjQ7cmV0dXJuIHRbInV2LXJlZ2lvbiJdPW5ldyBVaW50MTZBcnJheShlLG4sbyksbis9byoyLG59fTttOD1RZShkOCl9KTt2YXIgU2UsbnIsWmc9JCgoKT0+eyRzKCk7U2U9e1VOU0lHTkVEX0JZVEU6SHQuVU5TSUdORURfQllURSxVTlNJR05FRF9TSE9SVDpIdC5VTlNJR05FRF9TSE9SVCxVTlNJR05FRF9JTlQ6SHQuVU5TSUdORURfSU5ULEZMT0FUOkh0LkZMT0FULEhBTEZfRkxPQVQ6SHQuSEFMRl9GTE9BVF9PRVMsVU5TSUdORURfSU5UXzI0Xzg6SHQuVU5TSUdORURfSU5UXzI0XzgsVU5TSUdORURfU0hPUlRfNF80XzRfNDpIdC5VTlNJR05FRF9TSE9SVF80XzRfNF80LFVOU0lHTkVEX1NIT1JUXzVfNV81XzE6SHQuVU5TSUdORURfU0hPUlRfNV81XzVfMSxVTlNJR05FRF9TSE9SVF81XzZfNTpIdC5VTlNJR05FRF9TSE9SVF81XzZfNX07U2UudG9XZWJHTENvbnN0YW50PWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQpe2Nhc2UgU2UuVU5TSUdORURfQllURTpyZXR1cm4gSHQuVU5TSUdORURfQllURTtjYXNlIFNlLlVOU0lHTkVEX1NIT1JUOnJldHVybiBIdC5VTlNJR05FRF9TSE9SVDtjYXNlIFNlLlVOU0lHTkVEX0lOVDpyZXR1cm4gSHQuVU5TSUdORURfSU5UO2Nhc2UgU2UuRkxPQVQ6cmV0dXJuIEh0LkZMT0FUO2Nhc2UgU2UuSEFMRl9GTE9BVDpyZXR1cm4gZS53ZWJnbDI/SHQuSEFMRl9GTE9BVDpIdC5IQUxGX0ZMT0FUX09FUztjYXNlIFNlLlVOU0lHTkVEX0lOVF8yNF84OnJldHVybiBIdC5VTlNJR05FRF9JTlRfMjRfODtjYXNlIFNlLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6cmV0dXJuIEh0LlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ7Y2FzZSBTZS5VTlNJR05FRF9TSE9SVF81XzVfNV8xOnJldHVybiBIdC5VTlNJR05FRF9TSE9SVF81XzVfNV8xO2Nhc2UgU2UuVU5TSUdORURfU0hPUlRfNV82XzU6cmV0dXJuIFNlLlVOU0lHTkVEX1NIT1JUXzVfNl81fX07U2UuaXNQYWNrZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TZS5VTlNJR05FRF9JTlRfMjRfOHx8dD09PVNlLlVOU0lHTkVEX1NIT1JUXzRfNF80XzR8fHQ9PT1TZS5VTlNJR05FRF9TSE9SVF81XzVfNV8xfHx0PT09U2UuVU5TSUdORURfU0hPUlRfNV82XzV9O1NlLnNpemVJbkJ5dGVzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIFNlLlVOU0lHTkVEX0JZVEU6cmV0dXJuIDE7Y2FzZSBTZS5VTlNJR05FRF9TSE9SVDpjYXNlIFNlLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Y2FzZSBTZS5VTlNJR05FRF9TSE9SVF81XzVfNV8xOmNhc2UgU2UuVU5TSUdORURfU0hPUlRfNV82XzU6Y2FzZSBTZS5IQUxGX0ZMT0FUOnJldHVybiAyO2Nhc2UgU2UuVU5TSUdORURfSU5UOmNhc2UgU2UuRkxPQVQ6Y2FzZSBTZS5VTlNJR05FRF9JTlRfMjRfODpyZXR1cm4gNH19O1NlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09U2UuVU5TSUdORURfQllURXx8dD09PVNlLlVOU0lHTkVEX1NIT1JUfHx0PT09U2UuVU5TSUdORURfSU5UfHx0PT09U2UuRkxPQVR8fHQ9PT1TZS5IQUxGX0ZMT0FUfHx0PT09U2UuVU5TSUdORURfSU5UXzI0Xzh8fHQ9PT1TZS5VTlNJR05FRF9TSE9SVF80XzRfNF80fHx0PT09U2UuVU5TSUdORURfU0hPUlRfNV81XzVfMXx8dD09PVNlLlVOU0lHTkVEX1NIT1JUXzVfNl81fTtTZS5nZXRUeXBlZEFycmF5Q29uc3RydWN0b3I9ZnVuY3Rpb24odCl7bGV0IGU9U2Uuc2l6ZUluQnl0ZXModCk7cmV0dXJuIGU9PT1VaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UP1VpbnQ4QXJyYXk6ZT09PVVpbnQxNkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UP1VpbnQxNkFycmF5OmU9PT1GbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQmJnQ9PT1TZS5GTE9BVD9GbG9hdDMyQXJyYXk6VWludDMyQXJyYXl9O25yPU9iamVjdC5mcmVlemUoU2UpfSk7dmFyIFJ0LGtuLElTPSQoKCk9PntaZygpOyRzKCk7UnQ9e0RFUFRIX0NPTVBPTkVOVDpIdC5ERVBUSF9DT01QT05FTlQsREVQVEhfU1RFTkNJTDpIdC5ERVBUSF9TVEVOQ0lMLEFMUEhBOkh0LkFMUEhBLFJFRDpIdC5SRUQsUkc6SHQuUkcsUkdCOkh0LlJHQixSR0JBOkh0LlJHQkEsTFVNSU5BTkNFOkh0LkxVTUlOQU5DRSxMVU1JTkFOQ0VfQUxQSEE6SHQuTFVNSU5BTkNFX0FMUEhBLFJHQl9EWFQxOkh0LkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsUkdCQV9EWFQxOkh0LkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULFJHQkFfRFhUMzpIdC5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVCxSR0JBX0RYVDU6SHQuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQsUkdCX1BWUlRDXzRCUFBWMTpIdC5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HLFJHQl9QVlJUQ18yQlBQVjE6SHQuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyxSR0JBX1BWUlRDXzRCUFBWMTpIdC5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRyxSR0JBX1BWUlRDXzJCUFBWMTpIdC5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRyxSR0JBX0FTVEM6SHQuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X1dFQkdMLFJHQl9FVEMxOkh0LkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0wsUkdCOF9FVEMyOkh0LkNPTVBSRVNTRURfUkdCOF9FVEMyLFJHQkE4X0VUQzJfRUFDOkh0LkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUMsUkdCQV9CQzc6SHQuQ09NUFJFU1NFRF9SR0JBX0JQVENfVU5PUk19O1J0LmNvbXBvbmVudHNMZW5ndGg9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgUnQuUkdCOnJldHVybiAzO2Nhc2UgUnQuUkdCQTpyZXR1cm4gNDtjYXNlIFJ0LkxVTUlOQU5DRV9BTFBIQTpjYXNlIFJ0LlJHOnJldHVybiAyO2Nhc2UgUnQuQUxQSEE6Y2FzZSBSdC5SRUQ6Y2FzZSBSdC5MVU1JTkFOQ0U6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gMX19O1J0LnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09UnQuREVQVEhfQ09NUE9ORU5UfHx0PT09UnQuREVQVEhfU1RFTkNJTHx8dD09PVJ0LkFMUEhBfHx0PT09UnQuUkVEfHx0PT09UnQuUkd8fHQ9PT1SdC5SR0J8fHQ9PT1SdC5SR0JBfHx0PT09UnQuTFVNSU5BTkNFfHx0PT09UnQuTFVNSU5BTkNFX0FMUEhBfHx0PT09UnQuUkdCX0RYVDF8fHQ9PT1SdC5SR0JBX0RYVDF8fHQ9PT1SdC5SR0JBX0RYVDN8fHQ9PT1SdC5SR0JBX0RYVDV8fHQ9PT1SdC5SR0JfUFZSVENfNEJQUFYxfHx0PT09UnQuUkdCX1BWUlRDXzJCUFBWMXx8dD09PVJ0LlJHQkFfUFZSVENfNEJQUFYxfHx0PT09UnQuUkdCQV9QVlJUQ18yQlBQVjF8fHQ9PT1SdC5SR0JBX0FTVEN8fHQ9PT1SdC5SR0JfRVRDMXx8dD09PVJ0LlJHQjhfRVRDMnx8dD09PVJ0LlJHQkE4X0VUQzJfRUFDfHx0PT09UnQuUkdCQV9CQzd9O1J0LmlzQ29sb3JGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1SdC5SRUR8fHQ9PT1SdC5BTFBIQXx8dD09PVJ0LlJHQnx8dD09PVJ0LlJHQkF8fHQ9PT1SdC5MVU1JTkFOQ0V8fHQ9PT1SdC5MVU1JTkFOQ0VfQUxQSEF9O1J0LmlzRGVwdGhGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1SdC5ERVBUSF9DT01QT05FTlR8fHQ9PT1SdC5ERVBUSF9TVEVOQ0lMfTtSdC5pc0NvbXByZXNzZWRGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1SdC5SR0JfRFhUMXx8dD09PVJ0LlJHQkFfRFhUMXx8dD09PVJ0LlJHQkFfRFhUM3x8dD09PVJ0LlJHQkFfRFhUNXx8dD09PVJ0LlJHQl9QVlJUQ180QlBQVjF8fHQ9PT1SdC5SR0JfUFZSVENfMkJQUFYxfHx0PT09UnQuUkdCQV9QVlJUQ180QlBQVjF8fHQ9PT1SdC5SR0JBX1BWUlRDXzJCUFBWMXx8dD09PVJ0LlJHQkFfQVNUQ3x8dD09PVJ0LlJHQl9FVEMxfHx0PT09UnQuUkdCOF9FVEMyfHx0PT09UnQuUkdCQThfRVRDMl9FQUN8fHQ9PT1SdC5SR0JBX0JDN307UnQuaXNEWFRGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1SdC5SR0JfRFhUMXx8dD09PVJ0LlJHQkFfRFhUMXx8dD09PVJ0LlJHQkFfRFhUM3x8dD09PVJ0LlJHQkFfRFhUNX07UnQuaXNQVlJUQ0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVJ0LlJHQl9QVlJUQ180QlBQVjF8fHQ9PT1SdC5SR0JfUFZSVENfMkJQUFYxfHx0PT09UnQuUkdCQV9QVlJUQ180QlBQVjF8fHQ9PT1SdC5SR0JBX1BWUlRDXzJCUFBWMX07UnQuaXNBU1RDRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09UnQuUkdCQV9BU1RDfTtSdC5pc0VUQzFGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1SdC5SR0JfRVRDMX07UnQuaXNFVEMyRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09UnQuUkdCOF9FVEMyfHx0PT09UnQuUkdCQThfRVRDMl9FQUN9O1J0LmlzQkM3Rm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09UnQuUkdCQV9CQzd9O1J0LmNvbXByZXNzZWRUZXh0dXJlU2l6ZUluQnl0ZXM9ZnVuY3Rpb24odCxlLG4pe3N3aXRjaCh0KXtjYXNlIFJ0LlJHQl9EWFQxOmNhc2UgUnQuUkdCQV9EWFQxOmNhc2UgUnQuUkdCX0VUQzE6Y2FzZSBSdC5SR0I4X0VUQzI6cmV0dXJuIE1hdGguZmxvb3IoKGUrMykvNCkqTWF0aC5mbG9vcigobiszKS80KSo4O2Nhc2UgUnQuUkdCQV9EWFQzOmNhc2UgUnQuUkdCQV9EWFQ1OmNhc2UgUnQuUkdCQV9BU1RDOmNhc2UgUnQuUkdCQThfRVRDMl9FQUM6cmV0dXJuIE1hdGguZmxvb3IoKGUrMykvNCkqTWF0aC5mbG9vcigobiszKS80KSoxNjtjYXNlIFJ0LlJHQl9QVlJUQ180QlBQVjE6Y2FzZSBSdC5SR0JBX1BWUlRDXzRCUFBWMTpyZXR1cm4gTWF0aC5mbG9vcigoTWF0aC5tYXgoZSw4KSpNYXRoLm1heChuLDgpKjQrNykvOCk7Y2FzZSBSdC5SR0JfUFZSVENfMkJQUFYxOmNhc2UgUnQuUkdCQV9QVlJUQ18yQlBQVjE6cmV0dXJuIE1hdGguZmxvb3IoKE1hdGgubWF4KGUsMTYpKk1hdGgubWF4KG4sOCkqMis3KS84KTtjYXNlIFJ0LlJHQkFfQkM3OnJldHVybiBNYXRoLmNlaWwoZS80KSpNYXRoLmNlaWwobi80KSoxNjtkZWZhdWx0OnJldHVybiAwfX07UnQudGV4dHVyZVNpemVJbkJ5dGVzPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPVJ0LmNvbXBvbmVudHNMZW5ndGgodCk7cmV0dXJuIG5yLmlzUGFja2VkKGUpJiYocj0xKSxyKm5yLnNpemVJbkJ5dGVzKGUpKm4qb307UnQuYWxpZ25tZW50SW5CeXRlcz1mdW5jdGlvbih0LGUsbil7bGV0IG89UnQudGV4dHVyZVNpemVJbkJ5dGVzKHQsZSxuLDEpJTQ7cmV0dXJuIG89PT0wPzQ6bz09PTI/MjoxfTtSdC5jcmVhdGVUeXBlZEFycmF5PWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPW5yLmdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcihlKSxpPVJ0LmNvbXBvbmVudHNMZW5ndGgodCkqbipvO3JldHVybiBuZXcgcihpKX07UnQuZmxpcFk9ZnVuY3Rpb24odCxlLG4sbyxyKXtpZihyPT09MSlyZXR1cm4gdDtsZXQgaT1SdC5jcmVhdGVUeXBlZEFycmF5KGUsbixvLHIpLHM9UnQuY29tcG9uZW50c0xlbmd0aChlKSxmPW8qcztmb3IobGV0IHU9MDt1PHI7Kyt1KXtsZXQgYz11Km8qcyxsPShyLXUtMSkqbypzO2ZvcihsZXQgcD0wO3A8ZjsrK3ApaVtsK3BdPXRbYytwXX1yZXR1cm4gaX07UnQudG9JbnRlcm5hbEZvcm1hdD1mdW5jdGlvbih0LGUsbil7aWYoIW4ud2ViZ2wyKXJldHVybiB0O2lmKHQ9PT1SdC5ERVBUSF9TVEVOQ0lMKXJldHVybiBIdC5ERVBUSDI0X1NURU5DSUw4O2lmKHQ9PT1SdC5ERVBUSF9DT01QT05FTlQpe2lmKGU9PT1uci5VTlNJR05FRF9TSE9SVClyZXR1cm4gSHQuREVQVEhfQ09NUE9ORU5UMTY7aWYoZT09PW5yLlVOU0lHTkVEX0lOVClyZXR1cm4gSHQuREVQVEhfQ09NUE9ORU5UMjR9aWYoZT09PW5yLkZMT0FUKXN3aXRjaCh0KXtjYXNlIFJ0LlJHQkE6cmV0dXJuIEh0LlJHQkEzMkY7Y2FzZSBSdC5SR0I6cmV0dXJuIEh0LlJHQjMyRjtjYXNlIFJ0LlJHOnJldHVybiBIdC5SRzMyRjtjYXNlIFJ0LlJFRDpyZXR1cm4gSHQuUjMyRn1pZihlPT09bnIuSEFMRl9GTE9BVClzd2l0Y2godCl7Y2FzZSBSdC5SR0JBOnJldHVybiBIdC5SR0JBMTZGO2Nhc2UgUnQuUkdCOnJldHVybiBIdC5SR0IxNkY7Y2FzZSBSdC5SRzpyZXR1cm4gSHQuUkcxNkY7Y2FzZSBSdC5SRUQ6cmV0dXJuIEh0LlIxNkZ9cmV0dXJuIHR9O2tuPU9iamVjdC5mcmVlemUoUnQpfSk7dmFyIGg4LHl1LHZTPSQoKCk9PntoOD17VktfRk9STUFUX1VOREVGSU5FRDowLFZLX0ZPUk1BVF9SNEc0X1VOT1JNX1BBQ0s4OjEsVktfRk9STUFUX1I0RzRCNEE0X1VOT1JNX1BBQ0sxNjoyLFZLX0ZPUk1BVF9CNEc0UjRBNF9VTk9STV9QQUNLMTY6MyxWS19GT1JNQVRfUjVHNkI1X1VOT1JNX1BBQ0sxNjo0LFZLX0ZPUk1BVF9CNUc2UjVfVU5PUk1fUEFDSzE2OjUsVktfRk9STUFUX1I1RzVCNUExX1VOT1JNX1BBQ0sxNjo2LFZLX0ZPUk1BVF9CNUc1UjVBMV9VTk9STV9QQUNLMTY6NyxWS19GT1JNQVRfQTFSNUc1QjVfVU5PUk1fUEFDSzE2OjgsVktfRk9STUFUX1I4X1VOT1JNOjksVktfRk9STUFUX1I4X1NOT1JNOjEwLFZLX0ZPUk1BVF9SOF9VU0NBTEVEOjExLFZLX0ZPUk1BVF9SOF9TU0NBTEVEOjEyLFZLX0ZPUk1BVF9SOF9VSU5UOjEzLFZLX0ZPUk1BVF9SOF9TSU5UOjE0LFZLX0ZPUk1BVF9SOF9TUkdCOjE1LFZLX0ZPUk1BVF9SOEc4X1VOT1JNOjE2LFZLX0ZPUk1BVF9SOEc4X1NOT1JNOjE3LFZLX0ZPUk1BVF9SOEc4X1VTQ0FMRUQ6MTgsVktfRk9STUFUX1I4RzhfU1NDQUxFRDoxOSxWS19GT1JNQVRfUjhHOF9VSU5UOjIwLFZLX0ZPUk1BVF9SOEc4X1NJTlQ6MjEsVktfRk9STUFUX1I4RzhfU1JHQjoyMixWS19GT1JNQVRfUjhHOEI4X1VOT1JNOjIzLFZLX0ZPUk1BVF9SOEc4QjhfU05PUk06MjQsVktfRk9STUFUX1I4RzhCOF9VU0NBTEVEOjI1LFZLX0ZPUk1BVF9SOEc4QjhfU1NDQUxFRDoyNixWS19GT1JNQVRfUjhHOEI4X1VJTlQ6MjcsVktfRk9STUFUX1I4RzhCOF9TSU5UOjI4LFZLX0ZPUk1BVF9SOEc4QjhfU1JHQjoyOSxWS19GT1JNQVRfQjhHOFI4X1VOT1JNOjMwLFZLX0ZPUk1BVF9COEc4UjhfU05PUk06MzEsVktfRk9STUFUX0I4RzhSOF9VU0NBTEVEOjMyLFZLX0ZPUk1BVF9COEc4UjhfU1NDQUxFRDozMyxWS19GT1JNQVRfQjhHOFI4X1VJTlQ6MzQsVktfRk9STUFUX0I4RzhSOF9TSU5UOjM1LFZLX0ZPUk1BVF9COEc4UjhfU1JHQjozNixWS19GT1JNQVRfUjhHOEI4QThfVU5PUk06MzcsVktfRk9STUFUX1I4RzhCOEE4X1NOT1JNOjM4LFZLX0ZPUk1BVF9SOEc4QjhBOF9VU0NBTEVEOjM5LFZLX0ZPUk1BVF9SOEc4QjhBOF9TU0NBTEVEOjQwLFZLX0ZPUk1BVF9SOEc4QjhBOF9VSU5UOjQxLFZLX0ZPUk1BVF9SOEc4QjhBOF9TSU5UOjQyLFZLX0ZPUk1BVF9SOEc4QjhBOF9TUkdCOjQzLFZLX0ZPUk1BVF9COEc4UjhBOF9VTk9STTo0NCxWS19GT1JNQVRfQjhHOFI4QThfU05PUk06NDUsVktfRk9STUFUX0I4RzhSOEE4X1VTQ0FMRUQ6NDYsVktfRk9STUFUX0I4RzhSOEE4X1NTQ0FMRUQ6NDcsVktfRk9STUFUX0I4RzhSOEE4X1VJTlQ6NDgsVktfRk9STUFUX0I4RzhSOEE4X1NJTlQ6NDksVktfRk9STUFUX0I4RzhSOEE4X1NSR0I6NTAsVktfRk9STUFUX0E4QjhHOFI4X1VOT1JNX1BBQ0szMjo1MSxWS19GT1JNQVRfQThCOEc4UjhfU05PUk1fUEFDSzMyOjUyLFZLX0ZPUk1BVF9BOEI4RzhSOF9VU0NBTEVEX1BBQ0szMjo1MyxWS19GT1JNQVRfQThCOEc4UjhfU1NDQUxFRF9QQUNLMzI6NTQsVktfRk9STUFUX0E4QjhHOFI4X1VJTlRfUEFDSzMyOjU1LFZLX0ZPUk1BVF9BOEI4RzhSOF9TSU5UX1BBQ0szMjo1NixWS19GT1JNQVRfQThCOEc4UjhfU1JHQl9QQUNLMzI6NTcsVktfRk9STUFUX0EyUjEwRzEwQjEwX1VOT1JNX1BBQ0szMjo1OCxWS19GT1JNQVRfQTJSMTBHMTBCMTBfU05PUk1fUEFDSzMyOjU5LFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9VU0NBTEVEX1BBQ0szMjo2MCxWS19GT1JNQVRfQTJSMTBHMTBCMTBfU1NDQUxFRF9QQUNLMzI6NjEsVktfRk9STUFUX0EyUjEwRzEwQjEwX1VJTlRfUEFDSzMyOjYyLFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9TSU5UX1BBQ0szMjo2MyxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVU5PUk1fUEFDSzMyOjY0LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9TTk9STV9QQUNLMzI6NjUsVktfRk9STUFUX0EyQjEwRzEwUjEwX1VTQ0FMRURfUEFDSzMyOjY2LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9TU0NBTEVEX1BBQ0szMjo2NyxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVUlOVF9QQUNLMzI6NjgsVktfRk9STUFUX0EyQjEwRzEwUjEwX1NJTlRfUEFDSzMyOjY5LFZLX0ZPUk1BVF9SMTZfVU5PUk06NzAsVktfRk9STUFUX1IxNl9TTk9STTo3MSxWS19GT1JNQVRfUjE2X1VTQ0FMRUQ6NzIsVktfRk9STUFUX1IxNl9TU0NBTEVEOjczLFZLX0ZPUk1BVF9SMTZfVUlOVDo3NCxWS19GT1JNQVRfUjE2X1NJTlQ6NzUsVktfRk9STUFUX1IxNl9TRkxPQVQ6NzYsVktfRk9STUFUX1IxNkcxNl9VTk9STTo3NyxWS19GT1JNQVRfUjE2RzE2X1NOT1JNOjc4LFZLX0ZPUk1BVF9SMTZHMTZfVVNDQUxFRDo3OSxWS19GT1JNQVRfUjE2RzE2X1NTQ0FMRUQ6ODAsVktfRk9STUFUX1IxNkcxNl9VSU5UOjgxLFZLX0ZPUk1BVF9SMTZHMTZfU0lOVDo4MixWS19GT1JNQVRfUjE2RzE2X1NGTE9BVDo4MyxWS19GT1JNQVRfUjE2RzE2QjE2X1VOT1JNOjg0LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU05PUk06ODUsVktfRk9STUFUX1IxNkcxNkIxNl9VU0NBTEVEOjg2LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU1NDQUxFRDo4NyxWS19GT1JNQVRfUjE2RzE2QjE2X1VJTlQ6ODgsVktfRk9STUFUX1IxNkcxNkIxNl9TSU5UOjg5LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU0ZMT0FUOjkwLFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk06OTEsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STTo5MixWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1VTQ0FMRUQ6OTMsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TU0NBTEVEOjk0LFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlOVDo5NSxWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6OTYsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TRkxPQVQ6OTcsVktfRk9STUFUX1IzMl9VSU5UOjk4LFZLX0ZPUk1BVF9SMzJfU0lOVDo5OSxWS19GT1JNQVRfUjMyX1NGTE9BVDoxMDAsVktfRk9STUFUX1IzMkczMl9VSU5UOjEwMSxWS19GT1JNQVRfUjMyRzMyX1NJTlQ6MTAyLFZLX0ZPUk1BVF9SMzJHMzJfU0ZMT0FUOjEwMyxWS19GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6MTA0LFZLX0ZPUk1BVF9SMzJHMzJCMzJfU0lOVDoxMDUsVktfRk9STUFUX1IzMkczMkIzMl9TRkxPQVQ6MTA2LFZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVDoxMDcsVktfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5UOjEwOCxWS19GT1JNQVRfUjMyRzMyQjMyQTMyX1NGTE9BVDoxMDksVktfRk9STUFUX1I2NF9VSU5UOjExMCxWS19GT1JNQVRfUjY0X1NJTlQ6MTExLFZLX0ZPUk1BVF9SNjRfU0ZMT0FUOjExMixWS19GT1JNQVRfUjY0RzY0X1VJTlQ6MTEzLFZLX0ZPUk1BVF9SNjRHNjRfU0lOVDoxMTQsVktfRk9STUFUX1I2NEc2NF9TRkxPQVQ6MTE1LFZLX0ZPUk1BVF9SNjRHNjRCNjRfVUlOVDoxMTYsVktfRk9STUFUX1I2NEc2NEI2NF9TSU5UOjExNyxWS19GT1JNQVRfUjY0RzY0QjY0X1NGTE9BVDoxMTgsVktfRk9STUFUX1I2NEc2NEI2NEE2NF9VSU5UOjExOSxWS19GT1JNQVRfUjY0RzY0QjY0QTY0X1NJTlQ6MTIwLFZLX0ZPUk1BVF9SNjRHNjRCNjRBNjRfU0ZMT0FUOjEyMSxWS19GT1JNQVRfQjEwRzExUjExX1VGTE9BVF9QQUNLMzI6MTIyLFZLX0ZPUk1BVF9FNUI5RzlSOV9VRkxPQVRfUEFDSzMyOjEyMyxWS19GT1JNQVRfRDE2X1VOT1JNOjEyNCxWS19GT1JNQVRfWDhfRDI0X1VOT1JNX1BBQ0szMjoxMjUsVktfRk9STUFUX0QzMl9TRkxPQVQ6MTI2LFZLX0ZPUk1BVF9TOF9VSU5UOjEyNyxWS19GT1JNQVRfRDE2X1VOT1JNX1M4X1VJTlQ6MTI4LFZLX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoxMjksVktfRk9STUFUX0QzMl9TRkxPQVRfUzhfVUlOVDoxMzAsVktfRk9STUFUX0JDMV9SR0JfVU5PUk1fQkxPQ0s6MTMxLFZLX0ZPUk1BVF9CQzFfUkdCX1NSR0JfQkxPQ0s6MTMyLFZLX0ZPUk1BVF9CQzFfUkdCQV9VTk9STV9CTE9DSzoxMzMsVktfRk9STUFUX0JDMV9SR0JBX1NSR0JfQkxPQ0s6MTM0LFZLX0ZPUk1BVF9CQzJfVU5PUk1fQkxPQ0s6MTM1LFZLX0ZPUk1BVF9CQzJfU1JHQl9CTE9DSzoxMzYsVktfRk9STUFUX0JDM19VTk9STV9CTE9DSzoxMzcsVktfRk9STUFUX0JDM19TUkdCX0JMT0NLOjEzOCxWS19GT1JNQVRfQkM0X1VOT1JNX0JMT0NLOjEzOSxWS19GT1JNQVRfQkM0X1NOT1JNX0JMT0NLOjE0MCxWS19GT1JNQVRfQkM1X1VOT1JNX0JMT0NLOjE0MSxWS19GT1JNQVRfQkM1X1NOT1JNX0JMT0NLOjE0MixWS19GT1JNQVRfQkM2SF9VRkxPQVRfQkxPQ0s6MTQzLFZLX0ZPUk1BVF9CQzZIX1NGTE9BVF9CTE9DSzoxNDQsVktfRk9STUFUX0JDN19VTk9STV9CTE9DSzoxNDUsVktfRk9STUFUX0JDN19TUkdCX0JMT0NLOjE0NixWS19GT1JNQVRfRVRDMl9SOEc4QjhfVU5PUk1fQkxPQ0s6MTQ3LFZLX0ZPUk1BVF9FVEMyX1I4RzhCOF9TUkdCX0JMT0NLOjE0OCxWS19GT1JNQVRfRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9DSzoxNDksVktfRk9STUFUX0VUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSzoxNTAsVktfRk9STUFUX0VUQzJfUjhHOEI4QThfVU5PUk1fQkxPQ0s6MTUxLFZLX0ZPUk1BVF9FVEMyX1I4RzhCOEE4X1NSR0JfQkxPQ0s6MTUyLFZLX0ZPUk1BVF9FQUNfUjExX1VOT1JNX0JMT0NLOjE1MyxWS19GT1JNQVRfRUFDX1IxMV9TTk9STV9CTE9DSzoxNTQsVktfRk9STUFUX0VBQ19SMTFHMTFfVU5PUk1fQkxPQ0s6MTU1LFZLX0ZPUk1BVF9FQUNfUjExRzExX1NOT1JNX0JMT0NLOjE1NixWS19GT1JNQVRfQVNUQ180eDRfVU5PUk1fQkxPQ0s6MTU3LFZLX0ZPUk1BVF9BU1RDXzR4NF9TUkdCX0JMT0NLOjE1OCxWS19GT1JNQVRfQVNUQ181eDRfVU5PUk1fQkxPQ0s6MTU5LFZLX0ZPUk1BVF9BU1RDXzV4NF9TUkdCX0JMT0NLOjE2MCxWS19GT1JNQVRfQVNUQ181eDVfVU5PUk1fQkxPQ0s6MTYxLFZLX0ZPUk1BVF9BU1RDXzV4NV9TUkdCX0JMT0NLOjE2MixWS19GT1JNQVRfQVNUQ182eDVfVU5PUk1fQkxPQ0s6MTYzLFZLX0ZPUk1BVF9BU1RDXzZ4NV9TUkdCX0JMT0NLOjE2NCxWS19GT1JNQVRfQVNUQ182eDZfVU5PUk1fQkxPQ0s6MTY1LFZLX0ZPUk1BVF9BU1RDXzZ4Nl9TUkdCX0JMT0NLOjE2NixWS19GT1JNQVRfQVNUQ184eDVfVU5PUk1fQkxPQ0s6MTY3LFZLX0ZPUk1BVF9BU1RDXzh4NV9TUkdCX0JMT0NLOjE2OCxWS19GT1JNQVRfQVNUQ184eDZfVU5PUk1fQkxPQ0s6MTY5LFZLX0ZPUk1BVF9BU1RDXzh4Nl9TUkdCX0JMT0NLOjE3MCxWS19GT1JNQVRfQVNUQ184eDhfVU5PUk1fQkxPQ0s6MTcxLFZLX0ZPUk1BVF9BU1RDXzh4OF9TUkdCX0JMT0NLOjE3MixWS19GT1JNQVRfQVNUQ18xMHg1X1VOT1JNX0JMT0NLOjE3MyxWS19GT1JNQVRfQVNUQ18xMHg1X1NSR0JfQkxPQ0s6MTc0LFZLX0ZPUk1BVF9BU1RDXzEweDZfVU5PUk1fQkxPQ0s6MTc1LFZLX0ZPUk1BVF9BU1RDXzEweDZfU1JHQl9CTE9DSzoxNzYsVktfRk9STUFUX0FTVENfMTB4OF9VTk9STV9CTE9DSzoxNzcsVktfRk9STUFUX0FTVENfMTB4OF9TUkdCX0JMT0NLOjE3OCxWS19GT1JNQVRfQVNUQ18xMHgxMF9VTk9STV9CTE9DSzoxNzksVktfRk9STUFUX0FTVENfMTB4MTBfU1JHQl9CTE9DSzoxODAsVktfRk9STUFUX0FTVENfMTJ4MTBfVU5PUk1fQkxPQ0s6MTgxLFZLX0ZPUk1BVF9BU1RDXzEyeDEwX1NSR0JfQkxPQ0s6MTgyLFZLX0ZPUk1BVF9BU1RDXzEyeDEyX1VOT1JNX0JMT0NLOjE4MyxWS19GT1JNQVRfQVNUQ18xMngxMl9TUkdCX0JMT0NLOjE4NCxWS19GT1JNQVRfRzhCOEc4UjhfNDIyX1VOT1JNOjEwMDAxNTZlMyxWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNOjEwMDAxNTYwMDEsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjBfVU5PUk06MTAwMDE1NjAwMixWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIwX1VOT1JNOjEwMDAxNTYwMDMsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjJfVU5PUk06MTAwMDE1NjAwNCxWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIyX1VOT1JNOjEwMDAxNTYwMDUsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80NDRfVU5PUk06MTAwMDE1NjAwNixWS19GT1JNQVRfUjEwWDZfVU5PUk1fUEFDSzE2OjEwMDAxNTYwMDcsVktfRk9STUFUX1IxMFg2RzEwWDZfVU5PUk1fMlBBQ0sxNjoxMDAwMTU2MDA4LFZLX0ZPUk1BVF9SMTBYNkcxMFg2QjEwWDZBMTBYNl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMDksVktfRk9STUFUX0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTAsVktfRk9STUFUX0IxMFg2RzEwWDZSMTBYNkcxMFg2XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTEsVktfRk9STUFUX0cxMFg2X0IxMFg2X1IxMFg2XzNQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDEyLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDEzLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNl9SMTBYNl8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNCxWS19GT1JNQVRfRzEwWDZfQjEwWDZSMTBYNl8yUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMTYsVktfRk9STUFUX1IxMlg0X1VOT1JNX1BBQ0sxNjoxMDAwMTU2MDE3LFZLX0ZPUk1BVF9SMTJYNEcxMlg0X1VOT1JNXzJQQUNLMTY6MTAwMDE1NjAxOCxWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDE5LFZLX0ZPUk1BVF9HMTJYNEIxMlg0RzEyWDRSMTJYNF80MjJfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDIwLFZLX0ZPUk1BVF9CMTJYNEcxMlg0UjEyWDRHMTJYNF80MjJfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDIxLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyMixWS19GT1JNQVRfRzEyWDRfQjEyWDRSMTJYNF8yUExBTkVfNDIwX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyMyxWS19GT1JNQVRfRzEyWDRfQjEyWDRfUjEyWDRfM1BMQU5FXzQyMl9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjQsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjUsVktfRk9STUFUX0cxMlg0X0IxMlg0X1IxMlg0XzNQTEFORV80NDRfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDI2LFZLX0ZPUk1BVF9HMTZCMTZHMTZSMTZfNDIyX1VOT1JNOjEwMDAxNTYwMjcsVktfRk9STUFUX0IxNkcxNlIxNkcxNl80MjJfVU5PUk06MTAwMDE1NjAyOCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMF9VTk9STToxMDAwMTU2MDI5LFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjBfVU5PUk06MTAwMDE1NjAzMCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STToxMDAwMTU2MDMxLFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjJfVU5PUk06MTAwMDE1NjAzMixWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STToxMDAwMTU2MDMzLFZLX0ZPUk1BVF9QVlJUQzFfMkJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NGUzLFZLX0ZPUk1BVF9QVlJUQzFfNEJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NDAwMSxWS19GT1JNQVRfUFZSVEMyXzJCUFBfVU5PUk1fQkxPQ0tfSU1HOjEwMDAwNTQwMDIsVktfRk9STUFUX1BWUlRDMl80QlBQX1VOT1JNX0JMT0NLX0lNRzoxMDAwMDU0MDAzLFZLX0ZPUk1BVF9QVlJUQzFfMkJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA0LFZLX0ZPUk1BVF9QVlJUQzFfNEJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA1LFZLX0ZPUk1BVF9QVlJUQzJfMkJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA2LFZLX0ZPUk1BVF9QVlJUQzJfNEJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA3LFZLX0ZPUk1BVF9BU1RDXzR4NF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjZlMyxWS19GT1JNQVRfQVNUQ181eDRfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDAxLFZLX0ZPUk1BVF9BU1RDXzV4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDIsVktfRk9STUFUX0FTVENfNng1X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwMyxWS19GT1JNQVRfQVNUQ182eDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA0LFZLX0ZPUk1BVF9BU1RDXzh4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDUsVktfRk9STUFUX0FTVENfOHg2X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwNixWS19GT1JNQVRfQVNUQ184eDhfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA3LFZLX0ZPUk1BVF9BU1RDXzEweDVfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA4LFZLX0ZPUk1BVF9BU1RDXzEweDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA5LFZLX0ZPUk1BVF9BU1RDXzEweDhfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDEwLFZLX0ZPUk1BVF9BU1RDXzEweDEwX1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAxMSxWS19GT1JNQVRfQVNUQ18xMngxMF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMTIsVktfRk9STUFUX0FTVENfMTJ4MTJfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDEzLFZLX0ZPUk1BVF9HOEI4RzhSOF80MjJfVU5PUk1fS0hSOjEwMDAxNTZlMyxWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDAxLFZLX0ZPUk1BVF9HOF9COF9SOF8zUExBTkVfNDIwX1VOT1JNX0tIUjoxMDAwMTU2MDAyLFZLX0ZPUk1BVF9HOF9COFI4XzJQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMDMsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMDQsVktfRk9STUFUX0c4X0I4UjhfMlBMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAwNSxWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQ0NF9VTk9STV9LSFI6MTAwMDE1NjAwNixWS19GT1JNQVRfUjEwWDZfVU5PUk1fUEFDSzE2X0tIUjoxMDAwMTU2MDA3LFZLX0ZPUk1BVF9SMTBYNkcxMFg2X1VOT1JNXzJQQUNLMTZfS0hSOjEwMDAxNTYwMDgsVktfRk9STUFUX1IxMFg2RzEwWDZCMTBYNkExMFg2X1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMDksVktfRk9STUFUX0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDEwLFZLX0ZPUk1BVF9CMTBYNkcxMFg2UjEwWDZHMTBYNl80MjJfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAxMSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDEyLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAxMyxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE0LFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjJfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAxNSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE2LFZLX0ZPUk1BVF9SMTJYNF9VTk9STV9QQUNLMTZfS0hSOjEwMDAxNTYwMTcsVktfRk9STUFUX1IxMlg0RzEyWDRfVU5PUk1fMlBBQ0sxNl9LSFI6MTAwMDE1NjAxOCxWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAxOSxWS19GT1JNQVRfRzEyWDRCMTJYNEcxMlg0UjEyWDRfNDIyX1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMjAsVktfRk9STUFUX0IxMlg0RzEyWDRSMTJYNEcxMlg0XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDIxLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjIsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDIzLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjQsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDI1LFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDQ0X1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjYsVktfRk9STUFUX0cxNkIxNkcxNlIxNl80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMjcsVktfRk9STUFUX0IxNkcxNlIxNkcxNl80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMjgsVktfRk9STUFUX0cxNl9CMTZfUjE2XzNQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMjksVktfRk9STUFUX0cxNl9CMTZSMTZfMlBMQU5FXzQyMF9VTk9STV9LSFI6MTAwMDE1NjAzMCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAzMSxWS19GT1JNQVRfRzE2X0IxNlIxNl8yUExBTkVfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDMyLFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8zUExBTkVfNDQ0X1VOT1JNX0tIUjoxMDAwMTU2MDMzfSx5dT1PYmplY3QuZnJlZXplKGg4KX0pO2Z1bmN0aW9uIEZTKHQpe3JldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUodCl9ZnVuY3Rpb24gTFModCl7bGV0IGU9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0LEdvLmxlbmd0aCk7aWYoZVswXSE9PUdvWzBdfHxlWzFdIT09R29bMV18fGVbMl0hPT1Hb1syXXx8ZVszXSE9PUdvWzNdfHxlWzRdIT09R29bNF18fGVbNV0hPT1Hb1s1XXx8ZVs2XSE9PUdvWzZdfHxlWzddIT09R29bN118fGVbOF0hPT1Hb1s4XXx8ZVs5XSE9PUdvWzldfHxlWzEwXSE9PUdvWzEwXXx8ZVsxMV0hPT1Hb1sxMV0pdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIEtUWCAyLjAgaWRlbnRpZmllci4iKTtsZXQgbj1uZXcgUWcsbz0xNypVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxyPW5ldyBQYyh0LEdvLmxlbmd0aCxvLCEwKTtuLnZrRm9ybWF0PXIuX25leHRVaW50MzIoKSxuLnR5cGVTaXplPXIuX25leHRVaW50MzIoKSxuLnBpeGVsV2lkdGg9ci5fbmV4dFVpbnQzMigpLG4ucGl4ZWxIZWlnaHQ9ci5fbmV4dFVpbnQzMigpLG4ucGl4ZWxEZXB0aD1yLl9uZXh0VWludDMyKCksbi5sYXllckNvdW50PXIuX25leHRVaW50MzIoKSxuLmZhY2VDb3VudD1yLl9uZXh0VWludDMyKCk7bGV0IGk9ci5fbmV4dFVpbnQzMigpO24uc3VwZXJjb21wcmVzc2lvblNjaGVtZT1yLl9uZXh0VWludDMyKCk7bGV0IHM9ci5fbmV4dFVpbnQzMigpLGY9ci5fbmV4dFVpbnQzMigpLHU9ci5fbmV4dFVpbnQzMigpLGM9ci5fbmV4dFVpbnQzMigpLGw9ci5fbmV4dFVpbnQ2NCgpLHA9ci5fbmV4dFVpbnQ2NCgpLGQ9aSozKjgsbT1uZXcgUGModCxHby5sZW5ndGgrbyxkLCEwKTtmb3IobGV0IFc9MDtXPGk7VysrKW4ubGV2ZWxzLnB1c2goe2xldmVsRGF0YTpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbS5fbmV4dFVpbnQ2NCgpLG0uX25leHRVaW50NjQoKSksdW5jb21wcmVzc2VkQnl0ZUxlbmd0aDptLl9uZXh0VWludDY0KCl9KTtsZXQgXz1uZXcgUGModCxzLGYsITApLGc9e3ZlbmRvcklkOl8uX3NraXAoNCkuX25leHRVaW50MTYoKSxkZXNjcmlwdG9yVHlwZTpfLl9uZXh0VWludDE2KCksdmVyc2lvbk51bWJlcjpfLl9uZXh0VWludDE2KCksZGVzY3JpcHRvckJsb2NrU2l6ZTpfLl9uZXh0VWludDE2KCksY29sb3JNb2RlbDpfLl9uZXh0VWludDgoKSxjb2xvclByaW1hcmllczpfLl9uZXh0VWludDgoKSx0cmFuc2ZlckZ1bmN0aW9uOl8uX25leHRVaW50OCgpLGZsYWdzOl8uX25leHRVaW50OCgpLHRleGVsQmxvY2tEaW1lbnNpb246W18uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpXSxieXRlc1BsYW5lOltfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKSxfLl9uZXh0VWludDgoKV0sc2FtcGxlczpbXX0sTz0oZy5kZXNjcmlwdG9yQmxvY2tTaXplLzQtNikvNDtmb3IobGV0IFc9MDtXPE87VysrKXtsZXQgUj17Yml0T2Zmc2V0Ol8uX25leHRVaW50MTYoKSxiaXRMZW5ndGg6Xy5fbmV4dFVpbnQ4KCksY2hhbm5lbFR5cGU6Xy5fbmV4dFVpbnQ4KCksc2FtcGxlUG9zaXRpb246W18uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpXSxzYW1wbGVMb3dlcjotMS8wLHNhbXBsZVVwcGVyOjEvMH07Ui5jaGFubmVsVHlwZSY2ND8oUi5zYW1wbGVMb3dlcj1fLl9uZXh0SW50MzIoKSxSLnNhbXBsZVVwcGVyPV8uX25leHRJbnQzMigpKTooUi5zYW1wbGVMb3dlcj1fLl9uZXh0VWludDMyKCksUi5zYW1wbGVVcHBlcj1fLl9uZXh0VWludDMyKCkpLGcuc2FtcGxlc1tXXT1SfW4uZGF0YUZvcm1hdERlc2NyaXB0b3IubGVuZ3RoPTAsbi5kYXRhRm9ybWF0RGVzY3JpcHRvci5wdXNoKGcpO2xldCBFPW5ldyBQYyh0LHUsYywhMCk7Zm9yKDtFLl9vZmZzZXQ8Yzspe2xldCBXPUUuX25leHRVaW50MzIoKSxSPUUuX3NjYW4oVyksbnQ9RlMoUik7aWYobi5rZXlWYWx1ZVtudF09RS5fbmV4dFVpbnQ4QXJyYXkoVy1SLmJ5dGVMZW5ndGgtMSksbnQubWF0Y2goL15rdHgvaSkpe2xldCBsdD1GUyhuLmtleVZhbHVlW250XSk7bi5rZXlWYWx1ZVtudF09bHQuc3Vic3RyaW5nKDAsbHQubGFzdEluZGV4T2YoIlwwIikpfWxldCBjdD1XJTQ/NC1XJTQ6MDtFLl9za2lwKGN0KX1pZihwPD0wKXJldHVybiBuO2xldCB3PW5ldyBQYyh0LGwscCwhMCksQz13Ll9uZXh0VWludDE2KCksTT13Ll9uZXh0VWludDE2KCksTj13Ll9uZXh0VWludDMyKCksRj13Ll9uZXh0VWludDMyKCksST13Ll9uZXh0VWludDMyKCksdj13Ll9uZXh0VWludDMyKCksQj1bXTtmb3IobGV0IFc9MDtXPGk7VysrKUIucHVzaCh7aW1hZ2VGbGFnczp3Ll9uZXh0VWludDMyKCkscmdiU2xpY2VCeXRlT2Zmc2V0OncuX25leHRVaW50MzIoKSxyZ2JTbGljZUJ5dGVMZW5ndGg6dy5fbmV4dFVpbnQzMigpLGFscGhhU2xpY2VCeXRlT2Zmc2V0OncuX25leHRVaW50MzIoKSxhbHBoYVNsaWNlQnl0ZUxlbmd0aDp3Ll9uZXh0VWludDMyKCl9KTtsZXQgQT1sK3cuX29mZnNldCxTPUErTix4PVMrRixEPXgrSSx6PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtBLE4pLGo9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0K1MsRiksaz1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQreCxJKSxxPW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtELHYpO3JldHVybiBuLmdsb2JhbERhdGE9e2VuZHBvaW50Q291bnQ6QyxzZWxlY3RvckNvdW50Ok0saW1hZ2VEZXNjczpCLGVuZHBvaW50c0RhdGE6eixzZWxlY3RvcnNEYXRhOmosdGFibGVzRGF0YTprLGV4dGVuZGVkRGF0YTpxfSxufXZhciBRZyxQYyxPdXQsR28sRFM9JCgoKT0+e1FnPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy52a0Zvcm1hdD0wLHRoaXMudHlwZVNpemU9MSx0aGlzLnBpeGVsV2lkdGg9MCx0aGlzLnBpeGVsSGVpZ2h0PTAsdGhpcy5waXhlbERlcHRoPTAsdGhpcy5sYXllckNvdW50PTAsdGhpcy5mYWNlQ291bnQ9MSx0aGlzLnN1cGVyY29tcHJlc3Npb25TY2hlbWU9MCx0aGlzLmxldmVscz1bXSx0aGlzLmRhdGFGb3JtYXREZXNjcmlwdG9yPVt7dmVuZG9ySWQ6MCxkZXNjcmlwdG9yVHlwZTowLGRlc2NyaXB0b3JCbG9ja1NpemU6MCx2ZXJzaW9uTnVtYmVyOjIsY29sb3JNb2RlbDowLGNvbG9yUHJpbWFyaWVzOjEsdHJhbnNmZXJGdW5jdGlvbjoyLGZsYWdzOjAsdGV4ZWxCbG9ja0RpbWVuc2lvbjpbMCwwLDAsMF0sYnl0ZXNQbGFuZTpbMCwwLDAsMCwwLDAsMCwwXSxzYW1wbGVzOltdfV0sdGhpcy5rZXlWYWx1ZT17fSx0aGlzLmdsb2JhbERhdGE9bnVsbH19LFBjPWNsYXNze2NvbnN0cnVjdG9yKGUsbixvLHIpe3RoaXMuX2RhdGFWaWV3PXZvaWQgMCx0aGlzLl9saXR0bGVFbmRpYW49dm9pZCAwLHRoaXMuX29mZnNldD12b2lkIDAsdGhpcy5fZGF0YVZpZXc9bmV3IERhdGFWaWV3KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCtuLG8pLHRoaXMuX2xpdHRsZUVuZGlhbj1yLHRoaXMuX29mZnNldD0wfV9uZXh0VWludDgoKXtsZXQgZT10aGlzLl9kYXRhVmlldy5nZXRVaW50OCh0aGlzLl9vZmZzZXQpO3JldHVybiB0aGlzLl9vZmZzZXQrPTEsZX1fbmV4dFVpbnQxNigpe2xldCBlPXRoaXMuX2RhdGFWaWV3LmdldFVpbnQxNih0aGlzLl9vZmZzZXQsdGhpcy5fbGl0dGxlRW5kaWFuKTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz0yLGV9X25leHRVaW50MzIoKXtsZXQgZT10aGlzLl9kYXRhVmlldy5nZXRVaW50MzIodGhpcy5fb2Zmc2V0LHRoaXMuX2xpdHRsZUVuZGlhbik7cmV0dXJuIHRoaXMuX29mZnNldCs9NCxlfV9uZXh0VWludDY0KCl7bGV0IGU9dGhpcy5fZGF0YVZpZXcuZ2V0VWludDMyKHRoaXMuX29mZnNldCx0aGlzLl9saXR0bGVFbmRpYW4pLG49dGhpcy5fZGF0YVZpZXcuZ2V0VWludDMyKHRoaXMuX29mZnNldCs0LHRoaXMuX2xpdHRsZUVuZGlhbiksbz1lKzIqKjMyKm47cmV0dXJuIHRoaXMuX29mZnNldCs9OCxvfV9uZXh0SW50MzIoKXtsZXQgZT10aGlzLl9kYXRhVmlldy5nZXRJbnQzMih0aGlzLl9vZmZzZXQsdGhpcy5fbGl0dGxlRW5kaWFuKTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz00LGV9X25leHRVaW50OEFycmF5KGUpe2xldCBuPW5ldyBVaW50OEFycmF5KHRoaXMuX2RhdGFWaWV3LmJ1ZmZlcix0aGlzLl9kYXRhVmlldy5ieXRlT2Zmc2V0K3RoaXMuX29mZnNldCxlKTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz1lLG59X3NraXAoZSl7cmV0dXJuIHRoaXMuX29mZnNldCs9ZSx0aGlzfV9zY2FuKGUsbj0wKXtsZXQgbz10aGlzLl9vZmZzZXQscj0wO2Zvcig7dGhpcy5fZGF0YVZpZXcuZ2V0VWludDgodGhpcy5fb2Zmc2V0KSE9PW4mJnI8ZTspcisrLHRoaXMuX29mZnNldCsrO3JldHVybiByPGUmJnRoaXMuX29mZnNldCsrLG5ldyBVaW50OEFycmF5KHRoaXMuX2RhdGFWaWV3LmJ1ZmZlcix0aGlzLl9kYXRhVmlldy5ieXRlT2Zmc2V0K28scil9fSxPdXQ9bmV3IFVpbnQ4QXJyYXkoWzBdKSxHbz1bMTcxLDc1LDg0LDg4LDMyLDUwLDQ4LDE4NywxMywxMCwyNiwxMF19KTt2YXIgQlM9WG4oKF9tLHQxKT0+e3ZhciBKZz1mdW5jdGlvbigpe3ZhciB0PXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQ/ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM6dm9pZCAwO3JldHVybiB0eXBlb2YgX19maWxlbmFtZTwidSImJih0PXR8fF9fZmlsZW5hbWUpLGZ1bmN0aW9uKGUpe2U9ZXx8e307dmFyIG49dHlwZW9mIGU8InUiP2U6e30sbyxyO24ucmVhZHk9bmV3IFByb21pc2UoZnVuY3Rpb24oVSxHKXtvPVUscj1HfSk7dmFyIGk9e30scztmb3IocyBpbiBuKW4uaGFzT3duUHJvcGVydHkocykmJihpW3NdPW5bc10pO3ZhciBmPVtdLHU9Ii4vdGhpcy5wcm9ncmFtIixjPWZ1bmN0aW9uKFUsRyl7dGhyb3cgR30sbD0hMSxwPSExLGQ9ITEsbT0hMTtsPXR5cGVvZiB3aW5kb3c9PSJvYmplY3QiLHA9dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsZD10eXBlb2YgcHJvY2Vzcz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMubm9kZT09InN0cmluZyIsbT0hbCYmIWQmJiFwO3ZhciBfPSIiO2Z1bmN0aW9uIGcoVSl7cmV0dXJuIG4ubG9jYXRlRmlsZT9uLmxvY2F0ZUZpbGUoVSxfKTpfK1V9dmFyIGIsVCxPLEUsdyxDO2Q/KHA/Xz1wcigicGF0aCIpLmRpcm5hbWUoXykrIi8iOl89X19kaXJuYW1lKyIvIixiPWZ1bmN0aW9uKEcsWCl7cmV0dXJuIHd8fCh3PXByKCJmcyIpKSxDfHwoQz1wcigicGF0aCIpKSxHPUMubm9ybWFsaXplKEcpLHcucmVhZEZpbGVTeW5jKEcsWD9udWxsOiJ1dGY4Iil9LE89ZnVuY3Rpb24oRyl7dmFyIFg9YihHLCEwKTtyZXR1cm4gWC5idWZmZXJ8fChYPW5ldyBVaW50OEFycmF5KFgpKSxEKFguYnVmZmVyKSxYfSxwcm9jZXNzLmFyZ3YubGVuZ3RoPjEmJih1PXByb2Nlc3MuYXJndlsxXS5yZXBsYWNlKC9cXC9nLCIvIikpLGY9cHJvY2Vzcy5hcmd2LnNsaWNlKDIpLHByb2Nlc3Mub24oInVuY2F1Z2h0RXhjZXB0aW9uIixmdW5jdGlvbihVKXtpZighKFUgaW5zdGFuY2VvZiBPaSkpdGhyb3cgVX0pLHByb2Nlc3Mub24oInVuaGFuZGxlZFJlamVjdGlvbiIsS2UpLGM9ZnVuY3Rpb24oVSl7cHJvY2Vzcy5leGl0KFUpfSxuLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iW0Vtc2NyaXB0ZW4gTW9kdWxlIG9iamVjdF0ifSk6bT8odHlwZW9mIHJlYWQ8InUiJiYoYj1mdW5jdGlvbihHKXtyZXR1cm4gcmVhZChHKX0pLE89ZnVuY3Rpb24oRyl7dmFyIFg7cmV0dXJuIHR5cGVvZiByZWFkYnVmZmVyPT0iZnVuY3Rpb24iP25ldyBVaW50OEFycmF5KHJlYWRidWZmZXIoRykpOihYPXJlYWQoRywiYmluYXJ5IiksRCh0eXBlb2YgWD09Im9iamVjdCIpLFgpfSx0eXBlb2Ygc2NyaXB0QXJnczwidSI/Zj1zY3JpcHRBcmdzOnR5cGVvZiBhcmd1bWVudHM8InUiJiYoZj1hcmd1bWVudHMpLHR5cGVvZiBxdWl0PT0iZnVuY3Rpb24iJiYoYz1mdW5jdGlvbihVKXtxdWl0KFUpfSksdHlwZW9mIHByaW50PCJ1IiYmKHR5cGVvZiBjb25zb2xlPiJ1IiYmKGNvbnNvbGU9e30pLGNvbnNvbGUubG9nPXByaW50LGNvbnNvbGUud2Fybj1jb25zb2xlLmVycm9yPXR5cGVvZiBwcmludEVycjwidSI/cHJpbnRFcnI6cHJpbnQpKToobHx8cCkmJihwP189c2VsZi5sb2NhdGlvbi5ocmVmOnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihfPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKSx0JiYoXz10KSxfLmluZGV4T2YoImJsb2I6IikhPT0wP189Xy5zdWJzdHIoMCxfLmxhc3RJbmRleE9mKCIvIikrMSk6Xz0iIixiPWZ1bmN0aW9uKFUpe3ZhciBHPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gRy5vcGVuKCJHRVQiLFUsITEpLEcuc2VuZChudWxsKSxHLnJlc3BvbnNlVGV4dH0scCYmKE89ZnVuY3Rpb24oVSl7dmFyIEc9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBHLm9wZW4oIkdFVCIsVSwhMSksRy5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixHLnNlbmQobnVsbCksbmV3IFVpbnQ4QXJyYXkoRy5yZXNwb25zZSl9KSxUPWZ1bmN0aW9uKFUsRyxYKXt2YXIgUT1uZXcgWE1MSHR0cFJlcXVlc3Q7US5vcGVuKCJHRVQiLFUsITApLFEucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsUS5vbmxvYWQ9ZnVuY3Rpb24oKXtpZihRLnN0YXR1cz09MjAwfHxRLnN0YXR1cz09MCYmUS5yZXNwb25zZSl7RyhRLnJlc3BvbnNlKTtyZXR1cm59WCgpfSxRLm9uZXJyb3I9WCxRLnNlbmQobnVsbCl9LEU9ZnVuY3Rpb24oVSl7ZG9jdW1lbnQudGl0bGU9VX0pO3ZhciBNPW4ucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksTj1uLnByaW50RXJyfHxjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtmb3IocyBpbiBpKWkuaGFzT3duUHJvcGVydHkocykmJihuW3NdPWlbc10pO2k9bnVsbCxuLmFyZ3VtZW50cyYmKGY9bi5hcmd1bWVudHMpLG4udGhpc1Byb2dyYW0mJih1PW4udGhpc1Byb2dyYW0pLG4ucXVpdCYmKGM9bi5xdWl0KTt2YXIgRj0wLEk9ZnVuY3Rpb24oVSl7Rj1VfSx2O24ud2FzbUJpbmFyeSYmKHY9bi53YXNtQmluYXJ5KTt2YXIgQj1uLm5vRXhpdFJ1bnRpbWV8fCEwO3R5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJktlKCJubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkIik7dmFyIEEsUz0hMSx4O2Z1bmN0aW9uIEQoVSxHKXtVfHxLZSgiQXNzZXJ0aW9uIGZhaWxlZDogIitHKX12YXIgej10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmOCIpOnZvaWQgMDtmdW5jdGlvbiBqKFUsRyxYKXtmb3IodmFyIFE9RytYLHV0PUc7VVt1dF0mJiEodXQ+PVEpOykrK3V0O2lmKHV0LUc+MTYmJlUuc3ViYXJyYXkmJnopcmV0dXJuIHouZGVjb2RlKFUuc3ViYXJyYXkoRyx1dCkpO2Zvcih2YXIgd3Q9IiI7Rzx1dDspe3ZhciBFdD1VW0crK107aWYoIShFdCYxMjgpKXt3dCs9U3RyaW5nLmZyb21DaGFyQ29kZShFdCk7Y29udGludWV9dmFyIG10PVVbRysrXSY2MztpZigoRXQmMjI0KT09MTkyKXt3dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoRXQmMzEpPDw2fG10KTtjb250aW51ZX12YXIgaHQ9VVtHKytdJjYzO2lmKChFdCYyNDApPT0yMjQ/RXQ9KEV0JjE1KTw8MTJ8bXQ8PDZ8aHQ6RXQ9KEV0JjcpPDwxOHxtdDw8MTJ8aHQ8PDZ8VVtHKytdJjYzLEV0PDY1NTM2KXd0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKEV0KTtlbHNle3ZhciBxdD1FdC02NTUzNjt3dCs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxxdD4+MTAsNTYzMjB8cXQmMTAyMyl9fXJldHVybiB3dH1mdW5jdGlvbiBrKFUsRyl7cmV0dXJuIFU/aihJdCxVLEcpOiIifWZ1bmN0aW9uIHEoVSxHLFgsUSl7aWYoIShRPjApKXJldHVybiAwO2Zvcih2YXIgdXQ9WCx3dD1YK1EtMSxFdD0wO0V0PFUubGVuZ3RoOysrRXQpe3ZhciBtdD1VLmNoYXJDb2RlQXQoRXQpO2lmKG10Pj01NTI5NiYmbXQ8PTU3MzQzKXt2YXIgaHQ9VS5jaGFyQ29kZUF0KCsrRXQpO210PTY1NTM2KygobXQmMTAyMyk8PDEwKXxodCYxMDIzfWlmKG10PD0xMjcpe2lmKFg+PXd0KWJyZWFrO0dbWCsrXT1tdH1lbHNlIGlmKG10PD0yMDQ3KXtpZihYKzE+PXd0KWJyZWFrO0dbWCsrXT0xOTJ8bXQ+PjYsR1tYKytdPTEyOHxtdCY2M31lbHNlIGlmKG10PD02NTUzNSl7aWYoWCsyPj13dClicmVhaztHW1grK109MjI0fG10Pj4xMixHW1grK109MTI4fG10Pj42JjYzLEdbWCsrXT0xMjh8bXQmNjN9ZWxzZXtpZihYKzM+PXd0KWJyZWFrO0dbWCsrXT0yNDB8bXQ+PjE4LEdbWCsrXT0xMjh8bXQ+PjEyJjYzLEdbWCsrXT0xMjh8bXQ+PjYmNjMsR1tYKytdPTEyOHxtdCY2M319cmV0dXJuIEdbWF09MCxYLXV0fWZ1bmN0aW9uIFcoVSxHLFgpe3JldHVybiBxKFUsSXQsRyxYKX1mdW5jdGlvbiBSKFUpe2Zvcih2YXIgRz0wLFg9MDtYPFUubGVuZ3RoOysrWCl7dmFyIFE9VS5jaGFyQ29kZUF0KFgpO1E+PTU1Mjk2JiZRPD01NzM0MyYmKFE9NjU1MzYrKChRJjEwMjMpPDwxMCl8VS5jaGFyQ29kZUF0KCsrWCkmMTAyMyksUTw9MTI3PysrRzpRPD0yMDQ3P0crPTI6UTw9NjU1MzU/Rys9MzpHKz00fXJldHVybiBHfXZhciBudD10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2RlcigidXRmLTE2bGUiKTp2b2lkIDA7ZnVuY3Rpb24gY3QoVSxHKXtmb3IodmFyIFg9VSxRPVg+PjEsdXQ9UStHLzI7IShRPj11dCkmJmRlW1FdOykrK1E7aWYoWD1RPDwxLFgtVT4zMiYmbnQpcmV0dXJuIG50LmRlY29kZShJdC5zdWJhcnJheShVLFgpKTtmb3IodmFyIHd0PSIiLEV0PTA7IShFdD49Ry8yKTsrK0V0KXt2YXIgbXQ9VnRbVStFdCoyPj4xXTtpZihtdD09MClicmVhazt3dCs9U3RyaW5nLmZyb21DaGFyQ29kZShtdCl9cmV0dXJuIHd0fWZ1bmN0aW9uIGx0KFUsRyxYKXtpZihYPT09dm9pZCAwJiYoWD0yMTQ3NDgzNjQ3KSxYPDIpcmV0dXJuIDA7WC09Mjtmb3IodmFyIFE9Ryx1dD1YPFUubGVuZ3RoKjI/WC8yOlUubGVuZ3RoLHd0PTA7d3Q8dXQ7Kyt3dCl7dmFyIEV0PVUuY2hhckNvZGVBdCh3dCk7VnRbRz4+MV09RXQsRys9Mn1yZXR1cm4gVnRbRz4+MV09MCxHLVF9ZnVuY3Rpb24gX3QoVSl7cmV0dXJuIFUubGVuZ3RoKjJ9ZnVuY3Rpb24gb3QoVSxHKXtmb3IodmFyIFg9MCxRPSIiOyEoWD49Ry80KTspe3ZhciB1dD1zZVtVK1gqND4+Ml07aWYodXQ9PTApYnJlYWs7aWYoKytYLHV0Pj02NTUzNil7dmFyIHd0PXV0LTY1NTM2O1ErPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8d3Q+PjEwLDU2MzIwfHd0JjEwMjMpfWVsc2UgUSs9U3RyaW5nLmZyb21DaGFyQ29kZSh1dCl9cmV0dXJuIFF9ZnVuY3Rpb24geHQoVSxHLFgpe2lmKFg9PT12b2lkIDAmJihYPTIxNDc0ODM2NDcpLFg8NClyZXR1cm4gMDtmb3IodmFyIFE9Ryx1dD1RK1gtNCx3dD0wO3d0PFUubGVuZ3RoOysrd3Qpe3ZhciBFdD1VLmNoYXJDb2RlQXQod3QpO2lmKEV0Pj01NTI5NiYmRXQ8PTU3MzQzKXt2YXIgbXQ9VS5jaGFyQ29kZUF0KCsrd3QpO0V0PTY1NTM2KygoRXQmMTAyMyk8PDEwKXxtdCYxMDIzfWlmKHNlW0c+PjJdPUV0LEcrPTQsRys0PnV0KWJyZWFrfXJldHVybiBzZVtHPj4yXT0wLEctUX1mdW5jdGlvbiB5dChVKXtmb3IodmFyIEc9MCxYPTA7WDxVLmxlbmd0aDsrK1gpe3ZhciBRPVUuY2hhckNvZGVBdChYKTtRPj01NTI5NiYmUTw9NTczNDMmJisrWCxHKz00fXJldHVybiBHfWZ1bmN0aW9uIFN0KFUsRyl7cmV0dXJuIFUlRz4wJiYoVSs9Ry1VJUcpLFV9dmFyIGR0LGZ0LEl0LFZ0LGRlLHNlLGxlLGZlLFp0O2Z1bmN0aW9uIFF0KFUpe2R0PVUsbi5IRUFQOD1mdD1uZXcgSW50OEFycmF5KFUpLG4uSEVBUDE2PVZ0PW5ldyBJbnQxNkFycmF5KFUpLG4uSEVBUDMyPXNlPW5ldyBJbnQzMkFycmF5KFUpLG4uSEVBUFU4PUl0PW5ldyBVaW50OEFycmF5KFUpLG4uSEVBUFUxNj1kZT1uZXcgVWludDE2QXJyYXkoVSksbi5IRUFQVTMyPWxlPW5ldyBVaW50MzJBcnJheShVKSxuLkhFQVBGMzI9ZmU9bmV3IEZsb2F0MzJBcnJheShVKSxuLkhFQVBGNjQ9WnQ9bmV3IEZsb2F0NjRBcnJheShVKX12YXIgTmU9bi5JTklUSUFMX01FTU9SWXx8MTY3NzcyMTYsZ2UsRWU9W10sdW49W10sR2U9W10sYmU9W10sbG49ITE7ZnVuY3Rpb24gcG4oKXtpZihuLnByZVJ1bilmb3IodHlwZW9mIG4ucHJlUnVuPT0iZnVuY3Rpb24iJiYobi5wcmVSdW49W24ucHJlUnVuXSk7bi5wcmVSdW4ubGVuZ3RoOylWZShuLnByZVJ1bi5zaGlmdCgpKTt6byhFZSl9ZnVuY3Rpb24gRW4oKXtsbj0hMCx6byh1bil9ZnVuY3Rpb24gb2UoKXt6byhHZSl9ZnVuY3Rpb24gWXQoKXtpZihuLnBvc3RSdW4pZm9yKHR5cGVvZiBuLnBvc3RSdW49PSJmdW5jdGlvbiImJihuLnBvc3RSdW49W24ucG9zdFJ1bl0pO24ucG9zdFJ1bi5sZW5ndGg7KXNuKG4ucG9zdFJ1bi5zaGlmdCgpKTt6byhiZSl9ZnVuY3Rpb24gVmUoVSl7RWUudW5zaGlmdChVKX1mdW5jdGlvbiBkbihVKXt1bi51bnNoaWZ0KFUpfWZ1bmN0aW9uIHNuKFUpe2JlLnVuc2hpZnQoVSl9dmFyIG1uPTAsZm89bnVsbCxIbj1udWxsO2Z1bmN0aW9uIFplKFUpe21uKyssbi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZuLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMobW4pfWZ1bmN0aW9uIGNuKFUpe2lmKG1uLS0sbi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZuLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMobW4pLG1uPT0wJiYoZm8hPT1udWxsJiYoY2xlYXJJbnRlcnZhbChmbyksZm89bnVsbCksSG4pKXt2YXIgRz1IbjtIbj1udWxsLEcoKX19bi5wcmVsb2FkZWRJbWFnZXM9e30sbi5wcmVsb2FkZWRBdWRpb3M9e307ZnVuY3Rpb24gS2UoVSl7bi5vbkFib3J0JiZuLm9uQWJvcnQoVSksVSs9IiIsTihVKSxTPSEwLHg9MSxVPSJhYm9ydCgiK1UrIikuIEJ1aWxkIHdpdGggLXMgQVNTRVJUSU9OUz0xIGZvciBtb3JlIGluZm8uIjt2YXIgRz1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKFUpO3Rocm93IHIoRyksR31mdW5jdGlvbiBobihVLEcpe3JldHVybiBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGg/VS5zdGFydHNXaXRoKEcpOlUuaW5kZXhPZihHKT09PTB9dmFyIHVvPSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIjtmdW5jdGlvbiBxbihVKXtyZXR1cm4gaG4oVSx1byl9dmFyIEtuPSJmaWxlOi8vIjtmdW5jdGlvbiBsbyhVKXtyZXR1cm4gaG4oVSxLbil9dmFyIHplPSJiYXNpc190cmFuc2NvZGVyLndhc20iO3FuKHplKXx8KHplPWcoemUpKTtmdW5jdGlvbiBGZShVKXt0cnl7aWYoVT09emUmJnYpcmV0dXJuIG5ldyBVaW50OEFycmF5KHYpO2lmKE8pcmV0dXJuIE8oVSk7dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKEcpe0tlKEcpfX1mdW5jdGlvbiBMbigpe2lmKCF2JiYobHx8cCkpe2lmKHR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmIWxvKHplKSlyZXR1cm4gZmV0Y2goemUse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKFUpe2lmKCFVLm9rKXRocm93ImZhaWxlZCB0byBsb2FkIHdhc20gYmluYXJ5IGZpbGUgYXQgJyIremUrIiciO3JldHVybiBVLmFycmF5QnVmZmVyKCl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiBGZSh6ZSl9KTtpZihUKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihVLEcpe1QoemUsZnVuY3Rpb24oWCl7VShuZXcgVWludDhBcnJheShYKSl9LEcpfSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gRmUoemUpfSl9ZnVuY3Rpb24gV24oKXt2YXIgVT17YTpEbH07ZnVuY3Rpb24gRyhFdCxtdCl7dmFyIGh0PUV0LmV4cG9ydHM7bi5hc209aHQsQT1uLmFzbS5LLFF0KEEuYnVmZmVyKSxnZT1uLmFzbS5PLGRuKG4uYXNtLkwpLGNuKCJ3YXNtLWluc3RhbnRpYXRlIil9WmUoIndhc20taW5zdGFudGlhdGUiKTtmdW5jdGlvbiBYKEV0KXtHKEV0Lmluc3RhbmNlKX1mdW5jdGlvbiBRKEV0KXtyZXR1cm4gTG4oKS50aGVuKGZ1bmN0aW9uKG10KXt2YXIgaHQ9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobXQsVSk7cmV0dXJuIGh0fSkudGhlbihFdCxmdW5jdGlvbihtdCl7TigiZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogIittdCksS2UobXQpfSl9ZnVuY3Rpb24gdXQoKXtyZXR1cm4hdiYmdHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nPT0iZnVuY3Rpb24iJiYhcW4oemUpJiYhbG8oemUpJiZ0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiI/ZmV0Y2goemUse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKGZ1bmN0aW9uKEV0KXt2YXIgbXQ9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmcoRXQsVSk7cmV0dXJuIG10LnRoZW4oWCxmdW5jdGlvbihodCl7cmV0dXJuIE4oIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK2h0KSxOKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLFEoWCl9KX0pOlEoWCl9aWYobi5pbnN0YW50aWF0ZVdhc20pdHJ5e3ZhciB3dD1uLmluc3RhbnRpYXRlV2FzbShVLEcpO3JldHVybiB3dH1jYXRjaChFdCl7cmV0dXJuIE4oIk1vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICIrRXQpLCExfXJldHVybiB1dCgpLmNhdGNoKHIpLHt9fWZ1bmN0aW9uIHpvKFUpe2Zvcig7VS5sZW5ndGg+MDspe3ZhciBHPVUuc2hpZnQoKTtpZih0eXBlb2YgRz09ImZ1bmN0aW9uIil7RyhuKTtjb250aW51ZX12YXIgWD1HLmZ1bmM7dHlwZW9mIFg9PSJudW1iZXIiP0cuYXJnPT09dm9pZCAwP2dlLmdldChYKSgpOmdlLmdldChYKShHLmFyZyk6WChHLmFyZz09PXZvaWQgMD9udWxsOkcuYXJnKX19dmFyIHJuPXt9O2Z1bmN0aW9uIFJuKFUpe2Zvcig7VS5sZW5ndGg7KXt2YXIgRz1VLnBvcCgpLFg9VS5wb3AoKTtYKEcpfX1mdW5jdGlvbiBhcihVKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUobGVbVT4+Ml0pfXZhciBRbj17fSxqbz17fSxOcj17fSxOcz00OCxJcz01NztmdW5jdGlvbiBZaShVKXtpZihVPT09dm9pZCAwKXJldHVybiJfdW5rbm93biI7VT1VLnJlcGxhY2UoL1teYS16QS1aMC05X10vZywiJCIpO3ZhciBHPVUuY2hhckNvZGVBdCgwKTtyZXR1cm4gRz49TnMmJkc8PUlzPyJfIitVOlV9ZnVuY3Rpb24gSXIoVSxHKXtyZXR1cm4gVT1ZaShVKSxuZXcgRnVuY3Rpb24oImJvZHkiLCJyZXR1cm4gZnVuY3Rpb24gIitVK2AoKSB7CiAgICAidXNlIHN0cmljdCI7ICAgIHJldHVybiBib2R5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7Cn07CmApKEcpfWZ1bmN0aW9uICRpKFUsRyl7dmFyIFg9SXIoRyxmdW5jdGlvbihRKXt0aGlzLm5hbWU9Ryx0aGlzLm1lc3NhZ2U9UTt2YXIgdXQ9bmV3IEVycm9yKFEpLnN0YWNrO3V0IT09dm9pZCAwJiYodGhpcy5zdGFjaz10aGlzLnRvU3RyaW5nKCkrYApgK3V0LnJlcGxhY2UoL15FcnJvcig6W15cbl0qKT9cbi8sIiIpKX0pO3JldHVybiBYLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFUucHJvdG90eXBlKSxYLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1YLFgucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZT09PXZvaWQgMD90aGlzLm5hbWU6dGhpcy5uYW1lKyI6ICIrdGhpcy5tZXNzYWdlfSxYfXZhciB2cz12b2lkIDA7ZnVuY3Rpb24gYmkoVSl7dGhyb3cgbmV3IHZzKFUpfWZ1bmN0aW9uIG9vKFUsRyxYKXtVLmZvckVhY2goZnVuY3Rpb24obXQpe05yW210XT1HfSk7ZnVuY3Rpb24gUShtdCl7dmFyIGh0PVgobXQpO2h0Lmxlbmd0aCE9PVUubGVuZ3RoJiZiaSgiTWlzbWF0Y2hlZCB0eXBlIGNvbnZlcnRlciBjb3VudCIpO2Zvcih2YXIgcXQ9MDtxdDxVLmxlbmd0aDsrK3F0KW9yKFVbcXRdLGh0W3F0XSl9dmFyIHV0PW5ldyBBcnJheShHLmxlbmd0aCksd3Q9W10sRXQ9MDtHLmZvckVhY2goZnVuY3Rpb24obXQsaHQpe2pvLmhhc093blByb3BlcnR5KG10KT91dFtodF09am9bbXRdOih3dC5wdXNoKG10KSxRbi5oYXNPd25Qcm9wZXJ0eShtdCl8fChRblttdF09W10pLFFuW210XS5wdXNoKGZ1bmN0aW9uKCl7dXRbaHRdPWpvW210XSwrK0V0LEV0PT09d3QubGVuZ3RoJiZRKHV0KX0pKX0pLHd0Lmxlbmd0aD09PTAmJlEodXQpfWZ1bmN0aW9uIHBvKFUpe3ZhciBHPXJuW1VdO2RlbGV0ZSBybltVXTt2YXIgWD1HLnJhd0NvbnN0cnVjdG9yLFE9Ry5yYXdEZXN0cnVjdG9yLHV0PUcuZmllbGRzLHd0PXV0Lm1hcChmdW5jdGlvbihFdCl7cmV0dXJuIEV0LmdldHRlclJldHVyblR5cGV9KS5jb25jYXQodXQubWFwKGZ1bmN0aW9uKEV0KXtyZXR1cm4gRXQuc2V0dGVyQXJndW1lbnRUeXBlfSkpO29vKFtVXSx3dCxmdW5jdGlvbihFdCl7dmFyIG10PXt9O3JldHVybiB1dC5mb3JFYWNoKGZ1bmN0aW9uKGh0LHF0KXt2YXIgSnQ9aHQuZmllbGROYW1lLHdlPUV0W3F0XSxKZT1odC5nZXR0ZXIsYm49aHQuZ2V0dGVyQ29udGV4dCxybz1FdFtxdCt1dC5sZW5ndGhdLElvPWh0LnNldHRlcixscj1odC5zZXR0ZXJDb250ZXh0O210W0p0XT17cmVhZDpmdW5jdGlvbihacil7cmV0dXJuIHdlLmZyb21XaXJlVHlwZShKZShibixacikpfSx3cml0ZTpmdW5jdGlvbihacixvZil7dmFyIEVpPVtdO0lvKGxyLFpyLHJvLnRvV2lyZVR5cGUoRWksb2YpKSxSbihFaSl9fX0pLFt7bmFtZTpHLm5hbWUsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKGh0KXt2YXIgcXQ9e307Zm9yKHZhciBKdCBpbiBtdClxdFtKdF09bXRbSnRdLnJlYWQoaHQpO3JldHVybiBRKGh0KSxxdH0sdG9XaXJlVHlwZTpmdW5jdGlvbihodCxxdCl7Zm9yKHZhciBKdCBpbiBtdClpZighKEp0IGluIHF0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCdNaXNzaW5nIGZpZWxkOiAgIicrSnQrJyInKTt2YXIgd2U9WCgpO2ZvcihKdCBpbiBtdCltdFtKdF0ud3JpdGUod2UscXRbSnRdKTtyZXR1cm4gaHQhPT1udWxsJiZodC5wdXNoKFEsd2UpLHdlfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmFyLGRlc3RydWN0b3JGdW5jdGlvbjpRfV19KX1mdW5jdGlvbiB2cihVKXtzd2l0Y2goVSl7Y2FzZSAxOnJldHVybiAwO2Nhc2UgMjpyZXR1cm4gMTtjYXNlIDQ6cmV0dXJuIDI7Y2FzZSA4OnJldHVybiAzO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biB0eXBlIHNpemU6ICIrVSl9fWZ1bmN0aW9uIE1jKCl7Zm9yKHZhciBVPW5ldyBBcnJheSgyNTYpLEc9MDtHPDI1NjsrK0cpVVtHXT1TdHJpbmcuZnJvbUNoYXJDb2RlKEcpO05jPVV9dmFyIE5jPXZvaWQgMDtmdW5jdGlvbiBEbihVKXtmb3IodmFyIEc9IiIsWD1VO0l0W1hdOylHKz1OY1tJdFtYKytdXTtyZXR1cm4gR312YXIgVGk9dm9pZCAwO2Z1bmN0aW9uIExlKFUpe3Rocm93IG5ldyBUaShVKX1mdW5jdGlvbiBvcihVLEcsWCl7aWYoWD1YfHx7fSwhKCJhcmdQYWNrQWR2YW5jZSJpbiBHKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJyZWdpc3RlclR5cGUgcmVnaXN0ZXJlZEluc3RhbmNlIHJlcXVpcmVzIGFyZ1BhY2tBZHZhbmNlIik7dmFyIFE9Ry5uYW1lO2lmKFV8fExlKCd0eXBlICInK1ErJyIgbXVzdCBoYXZlIGEgcG9zaXRpdmUgaW50ZWdlciB0eXBlaWQgcG9pbnRlcicpLGpvLmhhc093blByb3BlcnR5KFUpKXtpZihYLmlnbm9yZUR1cGxpY2F0ZVJlZ2lzdHJhdGlvbnMpcmV0dXJuO0xlKCJDYW5ub3QgcmVnaXN0ZXIgdHlwZSAnIitRKyInIHR3aWNlIil9aWYoam9bVV09RyxkZWxldGUgTnJbVV0sUW4uaGFzT3duUHJvcGVydHkoVSkpe3ZhciB1dD1RbltVXTtkZWxldGUgUW5bVV0sdXQuZm9yRWFjaChmdW5jdGlvbih3dCl7d3QoKX0pfX1mdW5jdGlvbiBBdShVLEcsWCxRLHV0KXt2YXIgd3Q9dnIoWCk7Rz1EbihHKSxvcihVLHtuYW1lOkcsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKEV0KXtyZXR1cm4hIUV0fSx0b1dpcmVUeXBlOmZ1bmN0aW9uKEV0LG10KXtyZXR1cm4gbXQ/UTp1dH0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpmdW5jdGlvbihFdCl7dmFyIG10O2lmKFg9PT0xKW10PWZ0O2Vsc2UgaWYoWD09PTIpbXQ9VnQ7ZWxzZSBpZihYPT09NCltdD1zZTtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gYm9vbGVhbiB0eXBlIHNpemU6ICIrRyk7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKG10W0V0Pj53dF0pfSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfWZ1bmN0aW9uIGJ1KFUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEZyKXx8IShVIGluc3RhbmNlb2YgRnIpKXJldHVybiExO2Zvcih2YXIgRz10aGlzLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLFg9dGhpcy4kJC5wdHIsUT1VLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLHV0PVUuJCQucHRyO0cuYmFzZUNsYXNzOylYPUcudXBjYXN0KFgpLEc9Ry5iYXNlQ2xhc3M7Zm9yKDtRLmJhc2VDbGFzczspdXQ9US51cGNhc3QodXQpLFE9US5iYXNlQ2xhc3M7cmV0dXJuIEc9PT1RJiZYPT09dXR9ZnVuY3Rpb24gVHUoVSl7cmV0dXJue2NvdW50OlUuY291bnQsZGVsZXRlU2NoZWR1bGVkOlUuZGVsZXRlU2NoZWR1bGVkLHByZXNlcnZlUG9pbnRlck9uRGVsZXRlOlUucHJlc2VydmVQb2ludGVyT25EZWxldGUscHRyOlUucHRyLHB0clR5cGU6VS5wdHJUeXBlLHNtYXJ0UHRyOlUuc21hcnRQdHIsc21hcnRQdHJUeXBlOlUuc21hcnRQdHJUeXBlfX1mdW5jdGlvbiBJYyhVKXtmdW5jdGlvbiBHKFgpe3JldHVybiBYLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLm5hbWV9TGUoRyhVKSsiIGluc3RhbmNlIGFscmVhZHkgZGVsZXRlZCIpfXZhciB2Yz0hMTtmdW5jdGlvbiBIYShVKXt9ZnVuY3Rpb24gd3UoVSl7VS5zbWFydFB0cj9VLnNtYXJ0UHRyVHlwZS5yYXdEZXN0cnVjdG9yKFUuc21hcnRQdHIpOlUucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MucmF3RGVzdHJ1Y3RvcihVLnB0cil9ZnVuY3Rpb24gcWEoVSl7VS5jb3VudC52YWx1ZS09MTt2YXIgRz1VLmNvdW50LnZhbHVlPT09MDtHJiZ3dShVKX1mdW5jdGlvbiBaaShVKXtyZXR1cm4gdHlwZW9mIEZpbmFsaXphdGlvbkdyb3VwPiJ1Ij8oWmk9ZnVuY3Rpb24oRyl7cmV0dXJuIEd9LFUpOih2Yz1uZXcgRmluYWxpemF0aW9uR3JvdXAoZnVuY3Rpb24oRyl7Zm9yKHZhciBYPUcubmV4dCgpOyFYLmRvbmU7WD1HLm5leHQoKSl7dmFyIFE9WC52YWx1ZTtRLnB0cj9xYShRKTpjb25zb2xlLndhcm4oIm9iamVjdCBhbHJlYWR5IGRlbGV0ZWQ6ICIrUS5wdHIpfX0pLFppPWZ1bmN0aW9uKEcpe3JldHVybiB2Yy5yZWdpc3RlcihHLEcuJCQsRy4kJCksR30sSGE9ZnVuY3Rpb24oRyl7dmMudW5yZWdpc3RlcihHLiQkKX0sWmkoVSkpfWZ1bmN0aW9uIE91KCl7aWYodGhpcy4kJC5wdHJ8fEljKHRoaXMpLHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUpcmV0dXJuIHRoaXMuJCQuY291bnQudmFsdWUrPTEsdGhpczt2YXIgVT1aaShPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSx7JCQ6e3ZhbHVlOlR1KHRoaXMuJCQpfX0pKTtyZXR1cm4gVS4kJC5jb3VudC52YWx1ZSs9MSxVLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxVfWZ1bmN0aW9uIEV1KCl7dGhpcy4kJC5wdHJ8fEljKHRoaXMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkJiYhdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSYmTGUoIk9iamVjdCBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgZGVsZXRpb24iKSxIYSh0aGlzKSxxYSh0aGlzLiQkKSx0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlfHwodGhpcy4kJC5zbWFydFB0cj12b2lkIDAsdGhpcy4kJC5wdHI9dm9pZCAwKX1mdW5jdGlvbiBSdSgpe3JldHVybiF0aGlzLiQkLnB0cn12YXIgUWk9dm9pZCAwLEppPVtdO2Z1bmN0aW9uIEZjKCl7Zm9yKDtKaS5sZW5ndGg7KXt2YXIgVT1KaS5wb3AoKTtVLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMSxVLmRlbGV0ZSgpfX1mdW5jdGlvbiBTdSgpe3JldHVybiB0aGlzLiQkLnB0cnx8SWModGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZMZSgiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLEppLnB1c2godGhpcyksSmkubGVuZ3RoPT09MSYmUWkmJlFpKEZjKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZD0hMCx0aGlzfWZ1bmN0aW9uIEN1KCl7RnIucHJvdG90eXBlLmlzQWxpYXNPZj1idSxGci5wcm90b3R5cGUuY2xvbmU9T3UsRnIucHJvdG90eXBlLmRlbGV0ZT1FdSxGci5wcm90b3R5cGUuaXNEZWxldGVkPVJ1LEZyLnByb3RvdHlwZS5kZWxldGVMYXRlcj1TdX1mdW5jdGlvbiBGcigpe312YXIgS2E9e307ZnVuY3Rpb24gV2EoVSxHLFgpe2lmKFVbR10ub3ZlcmxvYWRUYWJsZT09PXZvaWQgMCl7dmFyIFE9VVtHXTtVW0ddPWZ1bmN0aW9uKCl7cmV0dXJuIFVbR10ub3ZlcmxvYWRUYWJsZS5oYXNPd25Qcm9wZXJ0eShhcmd1bWVudHMubGVuZ3RoKXx8TGUoIkZ1bmN0aW9uICciK1grIicgY2FsbGVkIHdpdGggYW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzICgiK2FyZ3VtZW50cy5sZW5ndGgrIikgLSBleHBlY3RzIG9uZSBvZiAoIitVW0ddLm92ZXJsb2FkVGFibGUrIikhIiksVVtHXS5vdmVybG9hZFRhYmxlW2FyZ3VtZW50cy5sZW5ndGhdLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sVVtHXS5vdmVybG9hZFRhYmxlPVtdLFVbR10ub3ZlcmxvYWRUYWJsZVtRLmFyZ0NvdW50XT1RfX1mdW5jdGlvbiBMYyhVLEcsWCl7bi5oYXNPd25Qcm9wZXJ0eShVKT8oKFg9PT12b2lkIDB8fG5bVV0ub3ZlcmxvYWRUYWJsZSE9PXZvaWQgMCYmbltVXS5vdmVybG9hZFRhYmxlW1hdIT09dm9pZCAwKSYmTGUoIkNhbm5vdCByZWdpc3RlciBwdWJsaWMgbmFtZSAnIitVKyInIHR3aWNlIiksV2EobixVLFUpLG4uaGFzT3duUHJvcGVydHkoWCkmJkxlKCJDYW5ub3QgcmVnaXN0ZXIgbXVsdGlwbGUgb3ZlcmxvYWRzIG9mIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgYXJndW1lbnRzICgiK1grIikhIiksbltVXS5vdmVybG9hZFRhYmxlW1hdPUcpOihuW1VdPUcsWCE9PXZvaWQgMCYmKG5bVV0ubnVtQXJndW1lbnRzPVgpKX1mdW5jdGlvbiB4dShVLEcsWCxRLHV0LHd0LEV0LG10KXt0aGlzLm5hbWU9VSx0aGlzLmNvbnN0cnVjdG9yPUcsdGhpcy5pbnN0YW5jZVByb3RvdHlwZT1YLHRoaXMucmF3RGVzdHJ1Y3Rvcj1RLHRoaXMuYmFzZUNsYXNzPXV0LHRoaXMuZ2V0QWN0dWFsVHlwZT13dCx0aGlzLnVwY2FzdD1FdCx0aGlzLmRvd25jYXN0PW10LHRoaXMucHVyZVZpcnR1YWxGdW5jdGlvbnM9W119ZnVuY3Rpb24gRGMoVSxHLFgpe2Zvcig7RyE9PVg7KUcudXBjYXN0fHxMZSgiRXhwZWN0ZWQgbnVsbCBvciBpbnN0YW5jZSBvZiAiK1gubmFtZSsiLCBnb3QgYW4gaW5zdGFuY2Ugb2YgIitHLm5hbWUpLFU9Ry51cGNhc3QoVSksRz1HLmJhc2VDbGFzcztyZXR1cm4gVX1mdW5jdGlvbiBQdShVLEcpe2lmKEc9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZMZSgibnVsbCBpcyBub3QgYSB2YWxpZCAiK3RoaXMubmFtZSksMDtHLiQkfHxMZSgnQ2Fubm90IHBhc3MgIicrd2koRykrJyIgYXMgYSAnK3RoaXMubmFtZSksRy4kJC5wdHJ8fExlKCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAiK3RoaXMubmFtZSk7dmFyIFg9Ry4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxRPURjKEcuJCQucHRyLFgsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBRfWZ1bmN0aW9uIE11KFUsRyl7dmFyIFg7aWYoRz09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJkxlKCJudWxsIGlzIG5vdCBhIHZhbGlkICIrdGhpcy5uYW1lKSx0aGlzLmlzU21hcnRQb2ludGVyPyhYPXRoaXMucmF3Q29uc3RydWN0b3IoKSxVIT09bnVsbCYmVS5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvcixYKSxYKTowO0cuJCR8fExlKCdDYW5ub3QgcGFzcyAiJyt3aShHKSsnIiBhcyBhICcrdGhpcy5uYW1lKSxHLiQkLnB0cnx8TGUoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIrdGhpcy5uYW1lKSwhdGhpcy5pc0NvbnN0JiZHLiQkLnB0clR5cGUuaXNDb25zdCYmTGUoIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgIisoRy4kJC5zbWFydFB0clR5cGU/Ry4kJC5zbWFydFB0clR5cGUubmFtZTpHLiQkLnB0clR5cGUubmFtZSkrIiB0byBwYXJhbWV0ZXIgdHlwZSAiK3RoaXMubmFtZSk7dmFyIFE9Ry4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcztpZihYPURjKEcuJCQucHRyLFEsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpLHRoaXMuaXNTbWFydFBvaW50ZXIpc3dpdGNoKEcuJCQuc21hcnRQdHI9PT12b2lkIDAmJkxlKCJQYXNzaW5nIHJhdyBwb2ludGVyIHRvIHNtYXJ0IHBvaW50ZXIgaXMgaWxsZWdhbCIpLHRoaXMuc2hhcmluZ1BvbGljeSl7Y2FzZSAwOkcuJCQuc21hcnRQdHJUeXBlPT09dGhpcz9YPUcuJCQuc21hcnRQdHI6TGUoIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgIisoRy4kJC5zbWFydFB0clR5cGU/Ry4kJC5zbWFydFB0clR5cGUubmFtZTpHLiQkLnB0clR5cGUubmFtZSkrIiB0byBwYXJhbWV0ZXIgdHlwZSAiK3RoaXMubmFtZSk7YnJlYWs7Y2FzZSAxOlg9Ry4kJC5zbWFydFB0cjticmVhaztjYXNlIDI6aWYoRy4kJC5zbWFydFB0clR5cGU9PT10aGlzKVg9Ry4kJC5zbWFydFB0cjtlbHNle3ZhciB1dD1HLmNsb25lKCk7WD10aGlzLnJhd1NoYXJlKFgsdXIoZnVuY3Rpb24oKXt1dC5kZWxldGUoKX0pKSxVIT09bnVsbCYmVS5wdXNoKHRoaXMucmF3RGVzdHJ1Y3RvcixYKX1icmVhaztkZWZhdWx0OkxlKCJVbnN1cHBvcnRpbmcgc2hhcmluZyBwb2xpY3kiKX1yZXR1cm4gWH1mdW5jdGlvbiBOdShVLEcpe2lmKEc9PT1udWxsKXJldHVybiB0aGlzLmlzUmVmZXJlbmNlJiZMZSgibnVsbCBpcyBub3QgYSB2YWxpZCAiK3RoaXMubmFtZSksMDtHLiQkfHxMZSgnQ2Fubm90IHBhc3MgIicrd2koRykrJyIgYXMgYSAnK3RoaXMubmFtZSksRy4kJC5wdHJ8fExlKCJDYW5ub3QgcGFzcyBkZWxldGVkIG9iamVjdCBhcyBhIHBvaW50ZXIgb2YgdHlwZSAiK3RoaXMubmFtZSksRy4kJC5wdHJUeXBlLmlzQ29uc3QmJkxlKCJDYW5ub3QgY29udmVydCBhcmd1bWVudCBvZiB0eXBlICIrRy4kJC5wdHJUeXBlLm5hbWUrIiB0byBwYXJhbWV0ZXIgdHlwZSAiK3RoaXMubmFtZSk7dmFyIFg9Ry4kJC5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcyxRPURjKEcuJCQucHRyLFgsdGhpcy5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBRfWZ1bmN0aW9uIEl1KFUpe3JldHVybiB0aGlzLnJhd0dldFBvaW50ZWUmJihVPXRoaXMucmF3R2V0UG9pbnRlZShVKSksVX1mdW5jdGlvbiB2dShVKXt0aGlzLnJhd0Rlc3RydWN0b3ImJnRoaXMucmF3RGVzdHJ1Y3RvcihVKX1mdW5jdGlvbiBGdShVKXtVIT09bnVsbCYmVS5kZWxldGUoKX1mdW5jdGlvbiBYYShVLEcsWCl7aWYoRz09PVgpcmV0dXJuIFU7aWYoWC5iYXNlQ2xhc3M9PT12b2lkIDApcmV0dXJuIG51bGw7dmFyIFE9WGEoVSxHLFguYmFzZUNsYXNzKTtyZXR1cm4gUT09PW51bGw/bnVsbDpYLmRvd25jYXN0KFEpfWZ1bmN0aW9uIEx1KCl7cmV0dXJuIE9iamVjdC5rZXlzKHRzKS5sZW5ndGh9ZnVuY3Rpb24gRHUoKXt2YXIgVT1bXTtmb3IodmFyIEcgaW4gdHMpdHMuaGFzT3duUHJvcGVydHkoRykmJlUucHVzaCh0c1tHXSk7cmV0dXJuIFV9ZnVuY3Rpb24gQnUoVSl7UWk9VSxKaS5sZW5ndGgmJlFpJiZRaShGYyl9ZnVuY3Rpb24gVXUoKXtuLmdldEluaGVyaXRlZEluc3RhbmNlQ291bnQ9THUsbi5nZXRMaXZlSW5oZXJpdGVkSW5zdGFuY2VzPUR1LG4uZmx1c2hQZW5kaW5nRGVsZXRlcz1GYyxuLnNldERlbGF5RnVuY3Rpb249QnV9dmFyIHRzPXt9O2Z1bmN0aW9uIGt1KFUsRyl7Zm9yKEc9PT12b2lkIDAmJkxlKCJwdHIgc2hvdWxkIG5vdCBiZSB1bmRlZmluZWQiKTtVLmJhc2VDbGFzczspRz1VLnVwY2FzdChHKSxVPVUuYmFzZUNsYXNzO3JldHVybiBHfWZ1bmN0aW9uIEd1KFUsRyl7cmV0dXJuIEc9a3UoVSxHKSx0c1tHXX1mdW5jdGlvbiBGcyhVLEcpeyghRy5wdHJUeXBlfHwhRy5wdHIpJiZiaSgibWFrZUNsYXNzSGFuZGxlIHJlcXVpcmVzIHB0ciBhbmQgcHRyVHlwZSIpO3ZhciBYPSEhRy5zbWFydFB0clR5cGUsUT0hIUcuc21hcnRQdHI7cmV0dXJuIFghPT1RJiZiaSgiQm90aCBzbWFydFB0clR5cGUgYW5kIHNtYXJ0UHRyIG11c3QgYmUgc3BlY2lmaWVkIiksRy5jb3VudD17dmFsdWU6MX0sWmkoT2JqZWN0LmNyZWF0ZShVLHskJDp7dmFsdWU6R319KSl9ZnVuY3Rpb24gVnUoVSl7dmFyIEc9dGhpcy5nZXRQb2ludGVlKFUpO2lmKCFHKXJldHVybiB0aGlzLmRlc3RydWN0b3IoVSksbnVsbDt2YXIgWD1HdSh0aGlzLnJlZ2lzdGVyZWRDbGFzcyxHKTtpZihYIT09dm9pZCAwKXtpZihYLiQkLmNvdW50LnZhbHVlPT09MClyZXR1cm4gWC4kJC5wdHI9RyxYLiQkLnNtYXJ0UHRyPVUsWC5jbG9uZSgpO3ZhciBRPVguY2xvbmUoKTtyZXR1cm4gdGhpcy5kZXN0cnVjdG9yKFUpLFF9ZnVuY3Rpb24gdXQoKXtyZXR1cm4gdGhpcy5pc1NtYXJ0UG9pbnRlcj9Gcyh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTp0aGlzLnBvaW50ZWVUeXBlLHB0cjpHLHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOlV9KTpGcyh0aGlzLnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTp0aGlzLHB0cjpVfSl9dmFyIHd0PXRoaXMucmVnaXN0ZXJlZENsYXNzLmdldEFjdHVhbFR5cGUoRyksRXQ9S2Fbd3RdO2lmKCFFdClyZXR1cm4gdXQuY2FsbCh0aGlzKTt2YXIgbXQ7dGhpcy5pc0NvbnN0P210PUV0LmNvbnN0UG9pbnRlclR5cGU6bXQ9RXQucG9pbnRlclR5cGU7dmFyIGh0PVhhKEcsdGhpcy5yZWdpc3RlcmVkQ2xhc3MsbXQucmVnaXN0ZXJlZENsYXNzKTtyZXR1cm4gaHQ9PT1udWxsP3V0LmNhbGwodGhpcyk6dGhpcy5pc1NtYXJ0UG9pbnRlcj9GcyhtdC5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6bXQscHRyOmh0LHNtYXJ0UHRyVHlwZTp0aGlzLHNtYXJ0UHRyOlV9KTpGcyhtdC5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUse3B0clR5cGU6bXQscHRyOmh0fSl9ZnVuY3Rpb24genUoKXtmci5wcm90b3R5cGUuZ2V0UG9pbnRlZT1JdSxmci5wcm90b3R5cGUuZGVzdHJ1Y3Rvcj12dSxmci5wcm90b3R5cGUuYXJnUGFja0FkdmFuY2U9OCxmci5wcm90b3R5cGUucmVhZFZhbHVlRnJvbVBvaW50ZXI9YXIsZnIucHJvdG90eXBlLmRlbGV0ZU9iamVjdD1GdSxmci5wcm90b3R5cGUuZnJvbVdpcmVUeXBlPVZ1fWZ1bmN0aW9uIGZyKFUsRyxYLFEsdXQsd3QsRXQsbXQsaHQscXQsSnQpe3RoaXMubmFtZT1VLHRoaXMucmVnaXN0ZXJlZENsYXNzPUcsdGhpcy5pc1JlZmVyZW5jZT1YLHRoaXMuaXNDb25zdD1RLHRoaXMuaXNTbWFydFBvaW50ZXI9dXQsdGhpcy5wb2ludGVlVHlwZT13dCx0aGlzLnNoYXJpbmdQb2xpY3k9RXQsdGhpcy5yYXdHZXRQb2ludGVlPW10LHRoaXMucmF3Q29uc3RydWN0b3I9aHQsdGhpcy5yYXdTaGFyZT1xdCx0aGlzLnJhd0Rlc3RydWN0b3I9SnQsIXV0JiZHLmJhc2VDbGFzcz09PXZvaWQgMD9RPyh0aGlzLnRvV2lyZVR5cGU9UHUsdGhpcy5kZXN0cnVjdG9yRnVuY3Rpb249bnVsbCk6KHRoaXMudG9XaXJlVHlwZT1OdSx0aGlzLmRlc3RydWN0b3JGdW5jdGlvbj1udWxsKTp0aGlzLnRvV2lyZVR5cGU9TXV9ZnVuY3Rpb24gWWEoVSxHLFgpe24uaGFzT3duUHJvcGVydHkoVSl8fGJpKCJSZXBsYWNpbmcgbm9uZXhpc3RhbnQgcHVibGljIHN5bWJvbCIpLG5bVV0ub3ZlcmxvYWRUYWJsZSE9PXZvaWQgMCYmWCE9PXZvaWQgMD9uW1VdLm92ZXJsb2FkVGFibGVbWF09RzoobltVXT1HLG5bVV0uYXJnQ291bnQ9WCl9ZnVuY3Rpb24ganUoVSxHLFgpe3ZhciBRPW5bImR5bkNhbGxfIitVXTtyZXR1cm4gWCYmWC5sZW5ndGg/US5hcHBseShudWxsLFtHXS5jb25jYXQoWCkpOlEuY2FsbChudWxsLEcpfWZ1bmN0aW9uIEh1KFUsRyxYKXtyZXR1cm4gVS5pbmRleE9mKCJqIikhPS0xP2p1KFUsRyxYKTpnZS5nZXQoRykuYXBwbHkobnVsbCxYKX1mdW5jdGlvbiBxdShVLEcpe3ZhciBYPVtdO3JldHVybiBmdW5jdGlvbigpe1gubGVuZ3RoPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHZhciBRPTA7UTxhcmd1bWVudHMubGVuZ3RoO1ErKylYW1FdPWFyZ3VtZW50c1tRXTtyZXR1cm4gSHUoVSxHLFgpfX1mdW5jdGlvbiBIbyhVLEcpe1U9RG4oVSk7ZnVuY3Rpb24gWCgpe3JldHVybiBVLmluZGV4T2YoImoiKSE9LTE/cXUoVSxHKTpnZS5nZXQoRyl9dmFyIFE9WCgpO3JldHVybiB0eXBlb2YgUSE9ImZ1bmN0aW9uIiYmTGUoInVua25vd24gZnVuY3Rpb24gcG9pbnRlciB3aXRoIHNpZ25hdHVyZSAiK1UrIjogIitHKSxRfXZhciAkYT12b2lkIDA7ZnVuY3Rpb24gWmEoVSl7dmFyIEc9dHQoVSksWD1EbihHKTtyZXR1cm4gSyhHKSxYfWZ1bmN0aW9uIExzKFUsRyl7dmFyIFg9W10sUT17fTtmdW5jdGlvbiB1dCh3dCl7aWYoIVFbd3RdJiYham9bd3RdKXtpZihOclt3dF0pe05yW3d0XS5mb3JFYWNoKHV0KTtyZXR1cm59WC5wdXNoKHd0KSxRW3d0XT0hMH19dGhyb3cgRy5mb3JFYWNoKHV0KSxuZXcgJGEoVSsiOiAiK1gubWFwKFphKS5qb2luKFsiLCAiXSkpfWZ1bmN0aW9uIEt1KFUsRyxYLFEsdXQsd3QsRXQsbXQsaHQscXQsSnQsd2UsSmUpe0p0PURuKEp0KSx3dD1Ibyh1dCx3dCksbXQmJihtdD1IbyhFdCxtdCkpLHF0JiYocXQ9SG8oaHQscXQpKSxKZT1Ibyh3ZSxKZSk7dmFyIGJuPVlpKEp0KTtMYyhibixmdW5jdGlvbigpe0xzKCJDYW5ub3QgY29uc3RydWN0ICIrSnQrIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsW1FdKX0pLG9vKFtVLEcsWF0sUT9bUV06W10sZnVuY3Rpb24ocm8pe3JvPXJvWzBdO3ZhciBJbyxscjtRPyhJbz1yby5yZWdpc3RlcmVkQ2xhc3MsbHI9SW8uaW5zdGFuY2VQcm90b3R5cGUpOmxyPUZyLnByb3RvdHlwZTt2YXIgWnI9SXIoYm4sZnVuY3Rpb24oKXtpZihPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykhPT1vZil0aHJvdyBuZXcgVGkoIlVzZSAnbmV3JyB0byBjb25zdHJ1Y3QgIitKdCk7aWYoRWkuY29uc3RydWN0b3JfYm9keT09PXZvaWQgMCl0aHJvdyBuZXcgVGkoSnQrIiBoYXMgbm8gYWNjZXNzaWJsZSBjb25zdHJ1Y3RvciIpO3ZhciBsMT1FaS5jb25zdHJ1Y3Rvcl9ib2R5W2FyZ3VtZW50cy5sZW5ndGhdO2lmKGwxPT09dm9pZCAwKXRocm93IG5ldyBUaSgiVHJpZWQgdG8gaW52b2tlIGN0b3Igb2YgIitKdCsiIHdpdGggaW52YWxpZCBudW1iZXIgb2YgcGFyYW1ldGVycyAoIithcmd1bWVudHMubGVuZ3RoKyIpIC0gZXhwZWN0ZWQgKCIrT2JqZWN0LmtleXMoRWkuY29uc3RydWN0b3JfYm9keSkudG9TdHJpbmcoKSsiKSBwYXJhbWV0ZXJzIGluc3RlYWQhIik7cmV0dXJuIGwxLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLG9mPU9iamVjdC5jcmVhdGUobHIse2NvbnN0cnVjdG9yOnt2YWx1ZTpacn19KTtaci5wcm90b3R5cGU9b2Y7dmFyIEVpPW5ldyB4dShKdCxacixvZixKZSxJbyx3dCxtdCxxdCksV1M9bmV3IGZyKEp0LEVpLCEwLCExLCExKSxmMT1uZXcgZnIoSnQrIioiLEVpLCExLCExLCExKSx1MT1uZXcgZnIoSnQrIiBjb25zdCoiLEVpLCExLCEwLCExKTtyZXR1cm4gS2FbVV09e3BvaW50ZXJUeXBlOmYxLGNvbnN0UG9pbnRlclR5cGU6dTF9LFlhKGJuLFpyKSxbV1MsZjEsdTFdfSl9ZnVuY3Rpb24gQmMoVSxHKXtmb3IodmFyIFg9W10sUT0wO1E8VTtRKyspWC5wdXNoKHNlWyhHPj4yKStRXSk7cmV0dXJuIFh9ZnVuY3Rpb24gV3UoVSxHLFgsUSx1dCx3dCl7RChHPjApO3ZhciBFdD1CYyhHLFgpO3V0PUhvKFEsdXQpO3ZhciBtdD1bd3RdLGh0PVtdO29vKFtdLFtVXSxmdW5jdGlvbihxdCl7cXQ9cXRbMF07dmFyIEp0PSJjb25zdHJ1Y3RvciAiK3F0Lm5hbWU7aWYocXQucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHk9PT12b2lkIDAmJihxdC5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keT1bXSkscXQucmVnaXN0ZXJlZENsYXNzLmNvbnN0cnVjdG9yX2JvZHlbRy0xXSE9PXZvaWQgMCl0aHJvdyBuZXcgVGkoIkNhbm5vdCByZWdpc3RlciBtdWx0aXBsZSBjb25zdHJ1Y3RvcnMgd2l0aCBpZGVudGljYWwgbnVtYmVyIG9mIHBhcmFtZXRlcnMgKCIrKEctMSkrIikgZm9yIGNsYXNzICciK3F0Lm5hbWUrIichIE92ZXJsb2FkIHJlc29sdXRpb24gaXMgY3VycmVudGx5IG9ubHkgcGVyZm9ybWVkIHVzaW5nIHRoZSBwYXJhbWV0ZXIgY291bnQsIG5vdCBhY3R1YWwgdHlwZSBpbmZvISIpO3JldHVybiBxdC5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtHLTFdPWZ1bmN0aW9uKCl7THMoIkNhbm5vdCBjb25zdHJ1Y3QgIitxdC5uYW1lKyIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLEV0KX0sb28oW10sRXQsZnVuY3Rpb24od2Upe3JldHVybiBxdC5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtHLTFdPWZ1bmN0aW9uKCl7YXJndW1lbnRzLmxlbmd0aCE9PUctMSYmTGUoSnQrIiBjYWxsZWQgd2l0aCAiK2FyZ3VtZW50cy5sZW5ndGgrIiBhcmd1bWVudHMsIGV4cGVjdGVkICIrKEctMSkpLGh0Lmxlbmd0aD0wLG10Lmxlbmd0aD1HO2Zvcih2YXIgYm49MTtibjxHOysrYm4pbXRbYm5dPXdlW2JuXS50b1dpcmVUeXBlKGh0LGFyZ3VtZW50c1tibi0xXSk7dmFyIHJvPXV0LmFwcGx5KG51bGwsbXQpO3JldHVybiBSbihodCksd2VbMF0uZnJvbVdpcmVUeXBlKHJvKX0sW119KSxbXX0pfWZ1bmN0aW9uIFFhKFUsRyl7aWYoIShVIGluc3RhbmNlb2YgRnVuY3Rpb24pKXRocm93IG5ldyBUeXBlRXJyb3IoIm5ld18gY2FsbGVkIHdpdGggY29uc3RydWN0b3IgdHlwZSAiK3R5cGVvZiBVKyIgd2hpY2ggaXMgbm90IGEgZnVuY3Rpb24iKTt2YXIgWD1JcihVLm5hbWV8fCJ1bmtub3duRnVuY3Rpb25OYW1lIixmdW5jdGlvbigpe30pO1gucHJvdG90eXBlPVUucHJvdG90eXBlO3ZhciBRPW5ldyBYLHV0PVUuYXBwbHkoUSxHKTtyZXR1cm4gdXQgaW5zdGFuY2VvZiBPYmplY3Q/dXQ6UX1mdW5jdGlvbiBKYShVLEcsWCxRLHV0KXt2YXIgd3Q9Ry5sZW5ndGg7d3Q8MiYmTGUoImFyZ1R5cGVzIGFycmF5IHNpemUgbWlzbWF0Y2ghIE11c3QgYXQgbGVhc3QgZ2V0IHJldHVybiB2YWx1ZSBhbmQgJ3RoaXMnIHR5cGVzISIpO2Zvcih2YXIgRXQ9R1sxXSE9PW51bGwmJlghPT1udWxsLG10PSExLGh0PTE7aHQ8Ry5sZW5ndGg7KytodClpZihHW2h0XSE9PW51bGwmJkdbaHRdLmRlc3RydWN0b3JGdW5jdGlvbj09PXZvaWQgMCl7bXQ9ITA7YnJlYWt9Zm9yKHZhciBxdD1HWzBdLm5hbWUhPT0idm9pZCIsSnQ9IiIsd2U9IiIsaHQ9MDtodDx3dC0yOysraHQpSnQrPShodCE9PTA/IiwgIjoiIikrImFyZyIraHQsd2UrPShodCE9PTA/IiwgIjoiIikrImFyZyIraHQrIldpcmVkIjt2YXIgSmU9InJldHVybiBmdW5jdGlvbiAiK1lpKFUpKyIoIitKdCtgKSB7CmlmIChhcmd1bWVudHMubGVuZ3RoICE9PSBgKyh3dC0yKStgKSB7CnRocm93QmluZGluZ0Vycm9yKCdmdW5jdGlvbiBgK1UrIiBjYWxsZWQgd2l0aCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLCBleHBlY3RlZCAiKyh3dC0yKStgIGFyZ3MhJyk7Cn0KYDttdCYmKEplKz1gdmFyIGRlc3RydWN0b3JzID0gW107CmApO3ZhciBibj1tdD8iZGVzdHJ1Y3RvcnMiOiJudWxsIixybz1bInRocm93QmluZGluZ0Vycm9yIiwiaW52b2tlciIsImZuIiwicnVuRGVzdHJ1Y3RvcnMiLCJyZXRUeXBlIiwiY2xhc3NQYXJhbSJdLElvPVtMZSxRLHV0LFJuLEdbMF0sR1sxXV07RXQmJihKZSs9InZhciB0aGlzV2lyZWQgPSBjbGFzc1BhcmFtLnRvV2lyZVR5cGUoIitibitgLCB0aGlzKTsKYCk7Zm9yKHZhciBodD0wO2h0PHd0LTI7KytodClKZSs9InZhciBhcmciK2h0KyJXaXJlZCA9IGFyZ1R5cGUiK2h0KyIudG9XaXJlVHlwZSgiK2JuKyIsIGFyZyIraHQrIik7IC8vICIrR1todCsyXS5uYW1lK2AKYCxyby5wdXNoKCJhcmdUeXBlIitodCksSW8ucHVzaChHW2h0KzJdKTtpZihFdCYmKHdlPSJ0aGlzV2lyZWQiKyh3ZS5sZW5ndGg+MD8iLCAiOiIiKSt3ZSksSmUrPShxdD8idmFyIHJ2ID0gIjoiIikrImludm9rZXIoZm4iKyh3ZS5sZW5ndGg+MD8iLCAiOiIiKSt3ZStgKTsKYCxtdClKZSs9YHJ1bkRlc3RydWN0b3JzKGRlc3RydWN0b3JzKTsKYDtlbHNlIGZvcih2YXIgaHQ9RXQ/MToyO2h0PEcubGVuZ3RoOysraHQpe3ZhciBscj1odD09PTE/InRoaXNXaXJlZCI6ImFyZyIrKGh0LTIpKyJXaXJlZCI7R1todF0uZGVzdHJ1Y3RvckZ1bmN0aW9uIT09bnVsbCYmKEplKz1scisiX2R0b3IoIitscisiKTsgLy8gIitHW2h0XS5uYW1lK2AKYCxyby5wdXNoKGxyKyJfZHRvciIpLElvLnB1c2goR1todF0uZGVzdHJ1Y3RvckZ1bmN0aW9uKSl9cXQmJihKZSs9YHZhciByZXQgPSByZXRUeXBlLmZyb21XaXJlVHlwZShydik7CnJldHVybiByZXQ7CmApLEplKz1gfQpgLHJvLnB1c2goSmUpO3ZhciBacj1RYShGdW5jdGlvbixybykuYXBwbHkobnVsbCxJbyk7cmV0dXJuIFpyfWZ1bmN0aW9uIFh1KFUsRyxYLFEsdXQsd3QsRXQsbXQpe3ZhciBodD1CYyhYLFEpO0c9RG4oRyksd3Q9SG8odXQsd3QpLG9vKFtdLFtVXSxmdW5jdGlvbihxdCl7cXQ9cXRbMF07dmFyIEp0PXF0Lm5hbWUrIi4iK0c7bXQmJnF0LnJlZ2lzdGVyZWRDbGFzcy5wdXJlVmlydHVhbEZ1bmN0aW9ucy5wdXNoKEcpO2Z1bmN0aW9uIHdlKCl7THMoIkNhbm5vdCBjYWxsICIrSnQrIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsaHQpfXZhciBKZT1xdC5yZWdpc3RlcmVkQ2xhc3MuaW5zdGFuY2VQcm90b3R5cGUsYm49SmVbR107cmV0dXJuIGJuPT09dm9pZCAwfHxibi5vdmVybG9hZFRhYmxlPT09dm9pZCAwJiZibi5jbGFzc05hbWUhPT1xdC5uYW1lJiZibi5hcmdDb3VudD09PVgtMj8od2UuYXJnQ291bnQ9WC0yLHdlLmNsYXNzTmFtZT1xdC5uYW1lLEplW0ddPXdlKTooV2EoSmUsRyxKdCksSmVbR10ub3ZlcmxvYWRUYWJsZVtYLTJdPXdlKSxvbyhbXSxodCxmdW5jdGlvbihybyl7dmFyIElvPUphKEp0LHJvLHF0LHd0LEV0KTtyZXR1cm4gSmVbR10ub3ZlcmxvYWRUYWJsZT09PXZvaWQgMD8oSW8uYXJnQ291bnQ9WC0yLEplW0ddPUlvKTpKZVtHXS5vdmVybG9hZFRhYmxlW1gtMl09SW8sW119KSxbXX0pfWZ1bmN0aW9uIFl1KFUsRyxYKXtVPURuKFUpLG9vKFtdLFtHXSxmdW5jdGlvbihRKXtyZXR1cm4gUT1RWzBdLG5bVV09US5mcm9tV2lyZVR5cGUoWCksW119KX12YXIgVWM9W10sQW89W3t9LHt2YWx1ZTp2b2lkIDB9LHt2YWx1ZTpudWxsfSx7dmFsdWU6ITB9LHt2YWx1ZTohMX1dO2Z1bmN0aW9uIGtjKFUpe1U+NCYmLS1Bb1tVXS5yZWZjb3VudD09PTAmJihBb1tVXT12b2lkIDAsVWMucHVzaChVKSl9ZnVuY3Rpb24gJHUoKXtmb3IodmFyIFU9MCxHPTU7RzxBby5sZW5ndGg7KytHKUFvW0ddIT09dm9pZCAwJiYrK1U7cmV0dXJuIFV9ZnVuY3Rpb24gWnUoKXtmb3IodmFyIFU9NTtVPEFvLmxlbmd0aDsrK1UpaWYoQW9bVV0hPT12b2lkIDApcmV0dXJuIEFvW1VdO3JldHVybiBudWxsfWZ1bmN0aW9uIFF1KCl7bi5jb3VudF9lbXZhbF9oYW5kbGVzPSR1LG4uZ2V0X2ZpcnN0X2VtdmFsPVp1fWZ1bmN0aW9uIHVyKFUpe3N3aXRjaChVKXtjYXNlIHZvaWQgMDpyZXR1cm4gMTtjYXNlIG51bGw6cmV0dXJuIDI7Y2FzZSEwOnJldHVybiAzO2Nhc2UhMTpyZXR1cm4gNDtkZWZhdWx0Ont2YXIgRz1VYy5sZW5ndGg/VWMucG9wKCk6QW8ubGVuZ3RoO3JldHVybiBBb1tHXT17cmVmY291bnQ6MSx2YWx1ZTpVfSxHfX19ZnVuY3Rpb24gSnUoVSxHKXtHPURuKEcpLG9yKFUse25hbWU6Ryxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oWCl7dmFyIFE9QW9bWF0udmFsdWU7cmV0dXJuIGtjKFgpLFF9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oWCxRKXtyZXR1cm4gdXIoUSl9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6YXIsZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiB0bChVLEcsWCl7c3dpdGNoKEcpe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oUSl7dmFyIHV0PVg/ZnQ6SXQ7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHV0W1FdKX07Y2FzZSAxOnJldHVybiBmdW5jdGlvbihRKXt2YXIgdXQ9WD9WdDpkZTtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUodXRbUT4+MV0pfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKFEpe3ZhciB1dD1YP3NlOmxlO3JldHVybiB0aGlzLmZyb21XaXJlVHlwZSh1dFtRPj4yXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBpbnRlZ2VyIHR5cGU6ICIrVSl9fWZ1bmN0aW9uIGVsKFUsRyxYLFEpe3ZhciB1dD12cihYKTtHPURuKEcpO2Z1bmN0aW9uIHd0KCl7fXd0LnZhbHVlcz17fSxvcihVLHtuYW1lOkcsY29uc3RydWN0b3I6d3QsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKEV0KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci52YWx1ZXNbRXRdfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKEV0LG10KXtyZXR1cm4gbXQudmFsdWV9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6dGwoRyx1dCxRKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pLExjKEcsd3QpfWZ1bmN0aW9uIERzKFUsRyl7dmFyIFg9am9bVV07cmV0dXJuIFg9PT12b2lkIDAmJkxlKEcrIiBoYXMgdW5rbm93biB0eXBlICIrWmEoVSkpLFh9ZnVuY3Rpb24gbmwoVSxHLFgpe3ZhciBRPURzKFUsImVudW0iKTtHPURuKEcpO3ZhciB1dD1RLmNvbnN0cnVjdG9yLHd0PU9iamVjdC5jcmVhdGUoUS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUse3ZhbHVlOnt2YWx1ZTpYfSxjb25zdHJ1Y3Rvcjp7dmFsdWU6SXIoUS5uYW1lKyJfIitHLGZ1bmN0aW9uKCl7fSl9fSk7dXQudmFsdWVzW1hdPXd0LHV0W0ddPXd0fWZ1bmN0aW9uIHdpKFUpe2lmKFU9PT1udWxsKXJldHVybiJudWxsIjt2YXIgRz10eXBlb2YgVTtyZXR1cm4gRz09PSJvYmplY3QifHxHPT09ImFycmF5Inx8Rz09PSJmdW5jdGlvbiI/VS50b1N0cmluZygpOiIiK1V9ZnVuY3Rpb24gb2woVSxHKXtzd2l0Y2goRyl7Y2FzZSAyOnJldHVybiBmdW5jdGlvbihYKXtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUoZmVbWD4+Ml0pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKFgpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShadFtYPj4zXSl9O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBmbG9hdCB0eXBlOiAiK1UpfX1mdW5jdGlvbiBybChVLEcsWCl7dmFyIFE9dnIoWCk7Rz1EbihHKSxvcihVLHtuYW1lOkcsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKHV0KXtyZXR1cm4gdXR9LHRvV2lyZVR5cGU6ZnVuY3Rpb24odXQsd3Qpe2lmKHR5cGVvZiB3dCE9Im51bWJlciImJnR5cGVvZiB3dCE9ImJvb2xlYW4iKXRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICInK3dpKHd0KSsnIiB0byAnK3RoaXMubmFtZSk7cmV0dXJuIHd0fSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOm9sKEcsUSksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiBpbChVLEcsWCxRLHV0LHd0KXt2YXIgRXQ9QmMoRyxYKTtVPURuKFUpLHV0PUhvKFEsdXQpLExjKFUsZnVuY3Rpb24oKXtMcygiQ2Fubm90IGNhbGwgIitVKyIgZHVlIHRvIHVuYm91bmQgdHlwZXMiLEV0KX0sRy0xKSxvbyhbXSxFdCxmdW5jdGlvbihtdCl7dmFyIGh0PVttdFswXSxudWxsXS5jb25jYXQobXQuc2xpY2UoMSkpO3JldHVybiBZYShVLEphKFUsaHQsbnVsbCx1dCx3dCksRy0xKSxbXX0pfWZ1bmN0aW9uIHNsKFUsRyxYKXtzd2l0Y2goRyl7Y2FzZSAwOnJldHVybiBYP2Z1bmN0aW9uKHV0KXtyZXR1cm4gZnRbdXRdfTpmdW5jdGlvbih1dCl7cmV0dXJuIEl0W3V0XX07Y2FzZSAxOnJldHVybiBYP2Z1bmN0aW9uKHV0KXtyZXR1cm4gVnRbdXQ+PjFdfTpmdW5jdGlvbih1dCl7cmV0dXJuIGRlW3V0Pj4xXX07Y2FzZSAyOnJldHVybiBYP2Z1bmN0aW9uKHV0KXtyZXR1cm4gc2VbdXQ+PjJdfTpmdW5jdGlvbih1dCl7cmV0dXJuIGxlW3V0Pj4yXX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGludGVnZXIgdHlwZTogIitVKX19ZnVuY3Rpb24gY2woVSxHLFgsUSx1dCl7Rz1EbihHKSx1dD09PS0xJiYodXQ9NDI5NDk2NzI5NSk7dmFyIHd0PXZyKFgpLEV0PWZ1bmN0aW9uKHF0KXtyZXR1cm4gcXR9O2lmKFE9PT0wKXt2YXIgbXQ9MzItOCpYO0V0PWZ1bmN0aW9uKHF0KXtyZXR1cm4gcXQ8PG10Pj4+bXR9fXZhciBodD1HLmluZGV4T2YoInVuc2lnbmVkIikhPS0xO29yKFUse25hbWU6Ryxmcm9tV2lyZVR5cGU6RXQsdG9XaXJlVHlwZTpmdW5jdGlvbihxdCxKdCl7aWYodHlwZW9mIEp0IT0ibnVtYmVyIiYmdHlwZW9mIEp0IT0iYm9vbGVhbiIpdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgIicrd2koSnQpKyciIHRvICcrdGhpcy5uYW1lKTtpZihKdDxRfHxKdD51dCl0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXNzaW5nIGEgbnVtYmVyICInK3dpKEp0KSsnIiBmcm9tIEpTIHNpZGUgdG8gQy9DKysgc2lkZSB0byBhbiBhcmd1bWVudCBvZiB0eXBlICInK0crJyIsIHdoaWNoIGlzIG91dHNpZGUgdGhlIHZhbGlkIHJhbmdlIFsnK1ErIiwgIit1dCsiXSEiKTtyZXR1cm4gaHQ/SnQ+Pj4wOkp0fDB9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6c2woRyx3dCxRIT09MCksZGVzdHJ1Y3RvckZ1bmN0aW9uOm51bGx9KX1mdW5jdGlvbiBhbChVLEcsWCl7dmFyIFE9W0ludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5XSx1dD1RW0ddO2Z1bmN0aW9uIHd0KEV0KXtFdD1FdD4+Mjt2YXIgbXQ9bGUsaHQ9bXRbRXRdLHF0PW10W0V0KzFdO3JldHVybiBuZXcgdXQoZHQscXQsaHQpfVg9RG4oWCksb3IoVSx7bmFtZTpYLGZyb21XaXJlVHlwZTp3dCxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOnd0fSx7aWdub3JlRHVwbGljYXRlUmVnaXN0cmF0aW9uczohMH0pfWZ1bmN0aW9uIGZsKFUsRyl7Rz1EbihHKTt2YXIgWD1HPT09InN0ZDo6c3RyaW5nIjtvcihVLHtuYW1lOkcsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKFEpe3ZhciB1dD1sZVtRPj4yXSx3dDtpZihYKWZvcih2YXIgRXQ9USs0LG10PTA7bXQ8PXV0OysrbXQpe3ZhciBodD1RKzQrbXQ7aWYobXQ9PXV0fHxJdFtodF09PTApe3ZhciBxdD1odC1FdCxKdD1rKEV0LHF0KTt3dD09PXZvaWQgMD93dD1KdDood3QrPSJcMCIsd3QrPUp0KSxFdD1odCsxfX1lbHNle2Zvcih2YXIgd2U9bmV3IEFycmF5KHV0KSxtdD0wO210PHV0OysrbXQpd2VbbXRdPVN0cmluZy5mcm9tQ2hhckNvZGUoSXRbUSs0K210XSk7d3Q9d2Uuam9pbigiIil9cmV0dXJuIEsoUSksd3R9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oUSx1dCl7dXQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmKHV0PW5ldyBVaW50OEFycmF5KHV0KSk7dmFyIHd0LEV0PXR5cGVvZiB1dD09InN0cmluZyI7RXR8fHV0IGluc3RhbmNlb2YgVWludDhBcnJheXx8dXQgaW5zdGFuY2VvZiBVaW50OENsYW1wZWRBcnJheXx8dXQgaW5zdGFuY2VvZiBJbnQ4QXJyYXl8fExlKCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIHN0ZDo6c3RyaW5nIiksWCYmRXQ/d3Q9ZnVuY3Rpb24oKXtyZXR1cm4gUih1dCl9Ond0PWZ1bmN0aW9uKCl7cmV0dXJuIHV0Lmxlbmd0aH07dmFyIG10PXd0KCksaHQ9Vig0K210KzEpO2lmKGxlW2h0Pj4yXT1tdCxYJiZFdClXKHV0LGh0KzQsbXQrMSk7ZWxzZSBpZihFdClmb3IodmFyIHF0PTA7cXQ8bXQ7KytxdCl7dmFyIEp0PXV0LmNoYXJDb2RlQXQocXQpO0p0PjI1NSYmKEsoaHQpLExlKCJTdHJpbmcgaGFzIFVURi0xNiBjb2RlIHVuaXRzIHRoYXQgZG8gbm90IGZpdCBpbiA4IGJpdHMiKSksSXRbaHQrNCtxdF09SnR9ZWxzZSBmb3IodmFyIHF0PTA7cXQ8bXQ7KytxdClJdFtodCs0K3F0XT11dFtxdF07cmV0dXJuIFEhPT1udWxsJiZRLnB1c2goSyxodCksaHR9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6YXIsZGVzdHJ1Y3RvckZ1bmN0aW9uOmZ1bmN0aW9uKFEpe0soUSl9fSl9ZnVuY3Rpb24gdWwoVSxHLFgpe1g9RG4oWCk7dmFyIFEsdXQsd3QsRXQsbXQ7Rz09PTI/KFE9Y3QsdXQ9bHQsRXQ9X3Qsd3Q9ZnVuY3Rpb24oKXtyZXR1cm4gZGV9LG10PTEpOkc9PT00JiYoUT1vdCx1dD14dCxFdD15dCx3dD1mdW5jdGlvbigpe3JldHVybiBsZX0sbXQ9Miksb3IoVSx7bmFtZTpYLGZyb21XaXJlVHlwZTpmdW5jdGlvbihodCl7Zm9yKHZhciBxdD1sZVtodD4+Ml0sSnQ9d3QoKSx3ZSxKZT1odCs0LGJuPTA7Ym48PXF0OysrYm4pe3ZhciBybz1odCs0K2JuKkc7aWYoYm49PXF0fHxKdFtybz4+bXRdPT0wKXt2YXIgSW89cm8tSmUsbHI9UShKZSxJbyk7d2U9PT12b2lkIDA/d2U9bHI6KHdlKz0iXDAiLHdlKz1sciksSmU9cm8rR319cmV0dXJuIEsoaHQpLHdlfSx0b1dpcmVUeXBlOmZ1bmN0aW9uKGh0LHF0KXt0eXBlb2YgcXQhPSJzdHJpbmciJiZMZSgiQ2Fubm90IHBhc3Mgbm9uLXN0cmluZyB0byBDKysgc3RyaW5nIHR5cGUgIitYKTt2YXIgSnQ9RXQocXQpLHdlPVYoNCtKdCtHKTtyZXR1cm4gbGVbd2U+PjJdPUp0Pj5tdCx1dChxdCx3ZSs0LEp0K0cpLGh0IT09bnVsbCYmaHQucHVzaChLLHdlKSx3ZX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjphcixkZXN0cnVjdG9yRnVuY3Rpb246ZnVuY3Rpb24oaHQpe0soaHQpfX0pfWZ1bmN0aW9uIGxsKFUsRyxYLFEsdXQsd3Qpe3JuW1VdPXtuYW1lOkRuKEcpLHJhd0NvbnN0cnVjdG9yOkhvKFgsUSkscmF3RGVzdHJ1Y3RvcjpIbyh1dCx3dCksZmllbGRzOltdfX1mdW5jdGlvbiBwbChVLEcsWCxRLHV0LHd0LEV0LG10LGh0LHF0KXtybltVXS5maWVsZHMucHVzaCh7ZmllbGROYW1lOkRuKEcpLGdldHRlclJldHVyblR5cGU6WCxnZXR0ZXI6SG8oUSx1dCksZ2V0dGVyQ29udGV4dDp3dCxzZXR0ZXJBcmd1bWVudFR5cGU6RXQsc2V0dGVyOkhvKG10LGh0KSxzZXR0ZXJDb250ZXh0OnF0fSl9ZnVuY3Rpb24gZGwoVSxHKXtHPURuKEcpLG9yKFUse2lzVm9pZDohMCxuYW1lOkcsYXJnUGFja0FkdmFuY2U6MCxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oKXt9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oWCxRKXt9fSl9ZnVuY3Rpb24gZXMoVSl7cmV0dXJuIFV8fExlKCJDYW5ub3QgdXNlIGRlbGV0ZWQgdmFsLiBoYW5kbGUgPSAiK1UpLEFvW1VdLnZhbHVlfWZ1bmN0aW9uIG1sKFUsRyxYKXtVPWVzKFUpLEc9RHMoRywiZW12YWw6OmFzIik7dmFyIFE9W10sdXQ9dXIoUSk7cmV0dXJuIHNlW1g+PjJdPXV0LEcudG9XaXJlVHlwZShRLFUpfXZhciBobD17fTtmdW5jdGlvbiBCcyhVKXt2YXIgRz1obFtVXTtyZXR1cm4gRz09PXZvaWQgMD9EbihVKTpHfXZhciBHYz1bXTtmdW5jdGlvbiBfbChVLEcsWCxRKXtVPUdjW1VdLEc9ZXMoRyksWD1CcyhYKSxVKEcsWCxudWxsLFEpfWZ1bmN0aW9uIHRmKCl7cmV0dXJuIHR5cGVvZiBnbG9iYWxUaGlzPT0ib2JqZWN0Ij9nbG9iYWxUaGlzOmZ1bmN0aW9uKCl7cmV0dXJuIEZ1bmN0aW9ufSgpKCJyZXR1cm4gdGhpcyIpKCl9ZnVuY3Rpb24geWwoVSl7cmV0dXJuIFU9PT0wP3VyKHRmKCkpOihVPUJzKFUpLHVyKHRmKClbVV0pKX1mdW5jdGlvbiBnbChVKXt2YXIgRz1HYy5sZW5ndGg7cmV0dXJuIEdjLnB1c2goVSksR31mdW5jdGlvbiBBbChVLEcpe2Zvcih2YXIgWD1uZXcgQXJyYXkoVSksUT0wO1E8VTsrK1EpWFtRXT1EcyhzZVsoRz4+MikrUV0sInBhcmFtZXRlciAiK1EpO3JldHVybiBYfWZ1bmN0aW9uIGJsKFUsRyl7Zm9yKHZhciBYPUFsKFUsRyksUT1YWzBdLHV0PVEubmFtZSsiXyQiK1guc2xpY2UoMSkubWFwKGZ1bmN0aW9uKGJuKXtyZXR1cm4gYm4ubmFtZX0pLmpvaW4oIl8iKSsiJCIsd3Q9WyJyZXRUeXBlIl0sRXQ9W1FdLG10PSIiLGh0PTA7aHQ8VS0xOysraHQpbXQrPShodCE9PTA/IiwgIjoiIikrImFyZyIraHQsd3QucHVzaCgiYXJnVHlwZSIraHQpLEV0LnB1c2goWFsxK2h0XSk7Zm9yKHZhciBxdD1ZaSgibWV0aG9kQ2FsbGVyXyIrdXQpLEp0PSJyZXR1cm4gZnVuY3Rpb24gIitxdCtgKGhhbmRsZSwgbmFtZSwgZGVzdHJ1Y3RvcnMsIGFyZ3MpIHsKYCx3ZT0wLGh0PTA7aHQ8VS0xOysraHQpSnQrPSIgICAgdmFyIGFyZyIraHQrIiA9IGFyZ1R5cGUiK2h0KyIucmVhZFZhbHVlRnJvbVBvaW50ZXIoYXJncyIrKHdlPyIrIit3ZToiIikrYCk7CmAsd2UrPVhbaHQrMV0uYXJnUGFja0FkdmFuY2U7SnQrPSIgICAgdmFyIHJ2ID0gaGFuZGxlW25hbWVdKCIrbXQrYCk7CmA7Zm9yKHZhciBodD0wO2h0PFUtMTsrK2h0KVhbaHQrMV0uZGVsZXRlT2JqZWN0JiYoSnQrPSIgICAgYXJnVHlwZSIraHQrIi5kZWxldGVPYmplY3QoYXJnIitodCtgKTsKYCk7US5pc1ZvaWR8fChKdCs9YCAgICByZXR1cm4gcmV0VHlwZS50b1dpcmVUeXBlKGRlc3RydWN0b3JzLCBydik7CmApLEp0Kz1gfTsKYCx3dC5wdXNoKEp0KTt2YXIgSmU9UWEoRnVuY3Rpb24sd3QpLmFwcGx5KG51bGwsRXQpO3JldHVybiBnbChKZSl9ZnVuY3Rpb24gVGwoVSl7cmV0dXJuIFU9QnMoVSksdXIobltVXSl9ZnVuY3Rpb24gd2woVSxHKXtyZXR1cm4gVT1lcyhVKSxHPWVzKEcpLHVyKFVbR10pfWZ1bmN0aW9uIE9sKFUpe1U+NCYmKEFvW1VdLnJlZmNvdW50Kz0xKX1mdW5jdGlvbiBFbChVKXtmb3IodmFyIEc9IiIsWD0wO1g8VTsrK1gpRys9KFghPT0wPyIsICI6IiIpKyJhcmciK1g7Zm9yKHZhciBRPSJyZXR1cm4gZnVuY3Rpb24gZW12YWxfYWxsb2NhdG9yXyIrVStgKGNvbnN0cnVjdG9yLCBhcmdUeXBlcywgYXJncykgewpgLFg9MDtYPFU7KytYKVErPSJ2YXIgYXJnVHlwZSIrWCsiID0gcmVxdWlyZVJlZ2lzdGVyZWRUeXBlKE1vZHVsZVsnSEVBUDMyJ11bKGFyZ1R5cGVzID4+PiAyKSArICIrWCsnXSwgInBhcmFtZXRlciAnK1grYCIpOwp2YXIgYXJnYCtYKyIgPSBhcmdUeXBlIitYK2AucmVhZFZhbHVlRnJvbVBvaW50ZXIoYXJncyk7CmFyZ3MgKz0gYXJnVHlwZWArWCtgWydhcmdQYWNrQWR2YW5jZSddOwpgO3JldHVybiBRKz0idmFyIG9iaiA9IG5ldyBjb25zdHJ1Y3RvcigiK0crYCk7CnJldHVybiBfX2VtdmFsX3JlZ2lzdGVyKG9iaik7Cn0KYCxuZXcgRnVuY3Rpb24oInJlcXVpcmVSZWdpc3RlcmVkVHlwZSIsIk1vZHVsZSIsIl9fZW12YWxfcmVnaXN0ZXIiLFEpKERzLG4sdXIpfXZhciBlZj17fTtmdW5jdGlvbiBSbChVLEcsWCxRKXtVPWVzKFUpO3ZhciB1dD1lZltHXTtyZXR1cm4gdXR8fCh1dD1FbChHKSxlZltHXT11dCksdXQoVSxYLFEpfWZ1bmN0aW9uIFNsKFUpe3JldHVybiB1cihCcyhVKSl9ZnVuY3Rpb24gQ2woVSl7dmFyIEc9QW9bVV0udmFsdWU7Um4oRyksa2MoVSl9ZnVuY3Rpb24geGwoKXtLZSgpfWZ1bmN0aW9uIFBsKFUsRyxYKXtJdC5jb3B5V2l0aGluKFUsRyxHK1gpfWZ1bmN0aW9uIE1sKFUpe3RyeXtyZXR1cm4gQS5ncm93KFUtZHQuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KSxRdChBLmJ1ZmZlciksMX1jYXRjaHt9fWZ1bmN0aW9uIE5sKFUpe3ZhciBHPUl0Lmxlbmd0aDtVPVU+Pj4wO3ZhciBYPTIxNDc0ODM2NDg7aWYoVT5YKXJldHVybiExO2Zvcih2YXIgUT0xO1E8PTQ7USo9Mil7dmFyIHV0PUcqKDErLjIvUSk7dXQ9TWF0aC5taW4odXQsVSsxMDA2NjMyOTYpO3ZhciB3dD1NYXRoLm1pbihYLFN0KE1hdGgubWF4KFUsdXQpLDY1NTM2KSksRXQ9TWwod3QpO2lmKEV0KXJldHVybiEwfXJldHVybiExfXZhciBVcz17bWFwcGluZ3M6e30sYnVmZmVyczpbbnVsbCxbXSxbXV0scHJpbnRDaGFyOmZ1bmN0aW9uKFUsRyl7dmFyIFg9VXMuYnVmZmVyc1tVXTtHPT09MHx8Rz09PTEwPygoVT09PTE/TTpOKShqKFgsMCkpLFgubGVuZ3RoPTApOlgucHVzaChHKX0sdmFyYXJnczp2b2lkIDAsZ2V0OmZ1bmN0aW9uKCl7VXMudmFyYXJncys9NDt2YXIgVT1zZVtVcy52YXJhcmdzLTQ+PjJdO3JldHVybiBVfSxnZXRTdHI6ZnVuY3Rpb24oVSl7dmFyIEc9ayhVKTtyZXR1cm4gR30sZ2V0NjQ6ZnVuY3Rpb24oVSxHKXtyZXR1cm4gVX19O2Z1bmN0aW9uIElsKFUpe3JldHVybiAwfWZ1bmN0aW9uIHZsKFUsRyxYLFEsdXQpe31mdW5jdGlvbiBGbChVLEcsWCxRKXtmb3IodmFyIHV0PTAsd3Q9MDt3dDxYO3d0Kyspe2Zvcih2YXIgRXQ9c2VbRyt3dCo4Pj4yXSxtdD1zZVtHKyh3dCo4KzQpPj4yXSxodD0wO2h0PG10O2h0KyspVXMucHJpbnRDaGFyKFUsSXRbRXQraHRdKTt1dCs9bXR9cmV0dXJuIHNlW1E+PjJdPXV0LDB9ZnVuY3Rpb24gTGwoVSl7SShVfDApfXZzPW4uSW50ZXJuYWxFcnJvcj0kaShFcnJvciwiSW50ZXJuYWxFcnJvciIpLE1jKCksVGk9bi5CaW5kaW5nRXJyb3I9JGkoRXJyb3IsIkJpbmRpbmdFcnJvciIpLEN1KCksenUoKSxVdSgpLCRhPW4uVW5ib3VuZFR5cGVFcnJvcj0kaShFcnJvciwiVW5ib3VuZFR5cGVFcnJvciIpLFF1KCk7dmFyIERsPXt0OnBvLEk6QXUseDpLdSx3Old1LGQ6WHUsazpZdSxIOkp1LG46ZWwsYTpubCxBOnJsLGk6aWwsajpjbCxoOmFsLEI6Zmwsdjp1bCx1OmxsLGM6cGwsSjpkbCxtOm1sLHM6X2wsYjprYyx5OnlsLHA6YmwscjpUbCxlOndsLGc6T2wscTpSbCxmOlNsLGw6Q2wsbzp4bCxFOlBsLEY6TmwsRzpJbCxDOnZsLHo6RmwsRDpMbH0sbmY9V24oKSxDZT1uLl9fX3dhc21fY2FsbF9jdG9ycz1mdW5jdGlvbigpe3JldHVybihDZT1uLl9fX3dhc21fY2FsbF9jdG9ycz1uLmFzbS5MKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFY9bi5fbWFsbG9jPWZ1bmN0aW9uKCl7cmV0dXJuKFY9bi5fbWFsbG9jPW4uYXNtLk0pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSz1uLl9mcmVlPWZ1bmN0aW9uKCl7cmV0dXJuKEs9bi5fZnJlZT1uLmFzbS5OKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHR0PW4uX19fZ2V0VHlwZU5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4odHQ9bi5fX19nZXRUeXBlTmFtZT1uLmFzbS5QKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFB0PW4uX19fZW1iaW5kX3JlZ2lzdGVyX25hdGl2ZV9hbmRfYnVpbHRpbl90eXBlcz1mdW5jdGlvbigpe3JldHVybihQdD1uLl9fX2VtYmluZF9yZWdpc3Rlcl9uYXRpdmVfYW5kX2J1aWx0aW5fdHlwZXM9bi5hc20uUSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx1ZT1uLmR5bkNhbGxfamlqaT1mdW5jdGlvbigpe3JldHVybih1ZT1uLmR5bkNhbGxfamlqaT1uLmFzbS5SKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFRlO2Z1bmN0aW9uIE9pKFUpe3RoaXMubmFtZT0iRXhpdFN0YXR1cyIsdGhpcy5tZXNzYWdlPSJQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCIrVSsiKSIsdGhpcy5zdGF0dXM9VX1Ibj1mdW5jdGlvbiBVKCl7VGV8fFZjKCksVGV8fChIbj1VKX07ZnVuY3Rpb24gVmMoVSl7aWYoVT1VfHxmLG1uPjB8fChwbigpLG1uPjApKXJldHVybjtmdW5jdGlvbiBHKCl7VGV8fChUZT0hMCxuLmNhbGxlZFJ1bj0hMCwhUyYmKEVuKCksb2UoKSxvKG4pLG4ub25SdW50aW1lSW5pdGlhbGl6ZWQmJm4ub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxZdCgpKSl9bi5zZXRTdGF0dXM/KG4uc2V0U3RhdHVzKCJSdW5uaW5nLi4uIiksc2V0VGltZW91dChmdW5jdGlvbigpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtuLnNldFN0YXR1cygiIil9LDEpLEcoKX0sMSkpOkcoKX1pZihuLnJ1bj1WYyxuLnByZUluaXQpZm9yKHR5cGVvZiBuLnByZUluaXQ9PSJmdW5jdGlvbiImJihuLnByZUluaXQ9W24ucHJlSW5pdF0pO24ucHJlSW5pdC5sZW5ndGg+MDspbi5wcmVJbml0LnBvcCgpKCk7cmV0dXJuIFZjKCksZS5yZWFkeX19KCk7dHlwZW9mIF9tPT0ib2JqZWN0IiYmdHlwZW9mIHQxPT0ib2JqZWN0Ij90MS5leHBvcnRzPUpnOnR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIEpnfSk6dHlwZW9mIF9tPT0ib2JqZWN0IiYmKF9tLkJBU0lTPUpnKX0pO3ZhciBlMT17fTtwZShlMSx7ZGVmYXVsdDooKT0+VDh9KTtmdW5jdGlvbiBfOCh0LGUpe3kudHlwZU9mLm9iamVjdCgidHJhbnNjb2Rlck1vZHVsZSIsZ3UpO2xldCBuPXQua3R4MkJ1ZmZlcixvPXQuc3VwcG9ydGVkVGFyZ2V0Rm9ybWF0cyxyO3RyeXtyPUxTKG4pfWNhdGNoe3Rocm93IG5ldyBBZSgiSW52YWxpZCBLVFgyIGZpbGUuIil9aWYoci5sYXllckNvdW50IT09MCl0aHJvdyBuZXcgQWUoIktUWDIgdGV4dHVyZSBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQuIik7aWYoci5waXhlbERlcHRoIT09MCl0aHJvdyBuZXcgQWUoIktUWDIgM0QgdGV4dHVyZXMgYXJlIHVuc3VwcG9ydGVkLiIpO2xldCBpPXIuZGF0YUZvcm1hdERlc2NyaXB0b3JbMF0scz1uZXcgQXJyYXkoci5sZXZlbENvdW50KTtyZXR1cm4gci52a0Zvcm1hdD09PTAmJihpLmNvbG9yTW9kZWw9PT1HU3x8aS5jb2xvck1vZGVsPT09VlMpP2c4KG4scixvLGd1LGUscyk6KGUucHVzaChuLmJ1ZmZlcikseTgocixzKSksc31mdW5jdGlvbiB5OCh0LGUpe2xldCBuPXQudmtGb3JtYXQ9PT15dS5WS19GT1JNQVRfUjhHOEI4X1NSR0I/a24uUkdCOmtuLlJHQkEsbzt0LnZrRm9ybWF0PT09eXUuVktfRk9STUFUX1I4RzhCOEE4X1VOT1JNP289bnIuVU5TSUdORURfQllURTp0LnZrRm9ybWF0PT09eXUuVktfRk9STUFUX1IxNkcxNkIxNkExNl9TRkxPQVQ/bz1uci5IQUxGX0ZMT0FUOnQudmtGb3JtYXQ9PT15dS5WS19GT1JNQVRfUjMyRzMyQjMyQTMyX1NGTE9BVCYmKG89bnIuRkxPQVQpO2ZvcihsZXQgcj0wO3I8dC5sZXZlbHMubGVuZ3RoOysrcil7bGV0IGk9e307ZVtyXT1pO2xldCBzPXQubGV2ZWxzW3JdLmxldmVsRGF0YSxmPXQucGl4ZWxXaWR0aD4+cix1PXQucGl4ZWxIZWlnaHQ+PnIsYz1mKnUqa24uY29tcG9uZW50c0xlbmd0aChuKTtmb3IobGV0IGw9MDtsPHQuZmFjZUNvdW50OysrbCl7bGV0IHA9cy5ieXRlT2Zmc2V0K2MqdC50eXBlU2l6ZSpsLGQ7IWgobyl8fG5yLnNpemVJbkJ5dGVzKG8pPT09MT9kPW5ldyBVaW50OEFycmF5KHMuYnVmZmVyLHAsYyk6bnIuc2l6ZUluQnl0ZXMobyk9PT0yP2Q9bmV3IFVpbnQxNkFycmF5KHMuYnVmZmVyLHAsYyk6ZD1uZXcgRmxvYXQzMkFycmF5KHMuYnVmZmVyLHAsYyksaVtrU1tsXV09e2ludGVybmFsRm9ybWF0Om4sZGF0YXR5cGU6byx3aWR0aDpmLGhlaWdodDp1LGxldmVsQnVmZmVyOmR9fX19ZnVuY3Rpb24gZzgodCxlLG4sbyxyLGkpe2xldCBzPW5ldyBvLktUWDJGaWxlKHQpLGY9cy5nZXRXaWR0aCgpLHU9cy5nZXRIZWlnaHQoKSxjPXMuZ2V0TGV2ZWxzKCksbD1zLmdldEhhc0FscGhhKCk7aWYoIShmPjApfHwhKHU+MCl8fCEoYz4wKSl0aHJvdyBzLmNsb3NlKCkscy5kZWxldGUoKSxuZXcgQWUoIkludmFsaWQgS1RYMiBmaWxlIik7bGV0IHAsZCxtPWUuZGF0YUZvcm1hdERlc2NyaXB0b3JbMF0sXz1vLnRyYW5zY29kZXJfdGV4dHVyZV9mb3JtYXQ7aWYobS5jb2xvck1vZGVsPT09R1MpaWYobi5ldGMpcD1sP2tuLlJHQkE4X0VUQzJfRUFDOmtuLlJHQjhfRVRDMixkPWw/Xy5jVEZFVEMyX1JHQkE6Xy5jVEZFVEMxX1JHQjtlbHNlIGlmKG4uZXRjMSYmIWwpcD1rbi5SR0JfRVRDMSxkPV8uY1RGRVRDMV9SR0I7ZWxzZSBpZihuLnMzdGMpcD1sP2tuLlJHQkFfRFhUNTprbi5SR0JfRFhUMSxkPWw/Xy5jVEZCQzNfUkdCQTpfLmNURkJDMV9SR0I7ZWxzZSBpZihuLnB2cnRjKXA9bD9rbi5SR0JBX1BWUlRDXzRCUFBWMTprbi5SR0JfUFZSVENfNEJQUFYxLGQ9bD9fLmNURlBWUlRDMV80X1JHQkE6Xy5jVEZQVlJUQzFfNF9SR0I7ZWxzZSBpZihuLmFzdGMpcD1rbi5SR0JBX0FTVEMsZD1fLmNURkFTVENfNHg0X1JHQkE7ZWxzZSBpZihuLmJjNylwPWtuLlJHQkFfQkM3LGQ9Xy5jVEZCQzdfUkdCQTtlbHNlIHRocm93IG5ldyBBZSgiTm8gdHJhbnNjb2RpbmcgZm9ybWF0IHRhcmdldCBhdmFpbGFibGUgZm9yIEVUQzFTIGNvbXByZXNzZWQga3R4Mi4iKTtlbHNlIGlmKG0uY29sb3JNb2RlbD09PVZTKWlmKG4uYXN0YylwPWtuLlJHQkFfQVNUQyxkPV8uY1RGQVNUQ180eDRfUkdCQTtlbHNlIGlmKG4uYmM3KXA9a24uUkdCQV9CQzcsZD1fLmNURkJDN19SR0JBO2Vsc2UgaWYobi5zM3RjKXA9bD9rbi5SR0JBX0RYVDU6a24uUkdCX0RYVDEsZD1sP18uY1RGQkMzX1JHQkE6Xy5jVEZCQzFfUkdCO2Vsc2UgaWYobi5ldGMpcD1sP2tuLlJHQkE4X0VUQzJfRUFDOmtuLlJHQjhfRVRDMixkPWw/Xy5jVEZFVEMyX1JHQkE6Xy5jVEZFVEMxX1JHQjtlbHNlIGlmKG4uZXRjMSYmIWwpcD1rbi5SR0JfRVRDMSxkPV8uY1RGRVRDMV9SR0I7ZWxzZSBpZihuLnB2cnRjKXA9bD9rbi5SR0JBX1BWUlRDXzRCUFBWMTprbi5SR0JfUFZSVENfNEJQUFYxLGQ9bD9fLmNURlBWUlRDMV80X1JHQkE6Xy5jVEZQVlJUQzFfNF9SR0I7ZWxzZSB0aHJvdyBuZXcgQWUoIk5vIHRyYW5zY29kaW5nIGZvcm1hdCB0YXJnZXQgYXZhaWxhYmxlIGZvciBVQVNUQyBjb21wcmVzc2VkIGt0eDIuIik7aWYoIXMuc3RhcnRUcmFuc2NvZGluZygpKXRocm93IHMuY2xvc2UoKSxzLmRlbGV0ZSgpLG5ldyBBZSgic3RhcnRUcmFuc2NvZGluZygpIGZhaWxlZCIpO2ZvcihsZXQgZz0wO2c8ZS5sZXZlbHMubGVuZ3RoOysrZyl7bGV0IGI9e307aVtnXT1iLGY9ZS5waXhlbFdpZHRoPj5nLHU9ZS5waXhlbEhlaWdodD4+ZztsZXQgVD1zLmdldEltYWdlVHJhbnNjb2RlZFNpemVJbkJ5dGVzKGcsMCwwLGQudmFsdWUpLE89bmV3IFVpbnQ4QXJyYXkoVCksRT1zLnRyYW5zY29kZUltYWdlKE8sZywwLDAsZC52YWx1ZSwwLC0xLC0xKTtpZighaChFKSl0aHJvdyBuZXcgQWUoInRyYW5zY29kZUltYWdlKCkgZmFpbGVkLiIpO3IucHVzaChPLmJ1ZmZlciksYltrU1swXV09e2ludGVybmFsRm9ybWF0OnAsd2lkdGg6ZixoZWlnaHQ6dSxsZXZlbEJ1ZmZlcjpPfX1yZXR1cm4gcy5jbG9zZSgpLHMuZGVsZXRlKCksaX1hc3luYyBmdW5jdGlvbiBBOCh0LGUpe2xldCBuPXQud2ViQXNzZW1ibHlDb25maWcsbz1VUy5kZWZhdWx0Pz9zZWxmLkJBU0lTO3JldHVybiBoKG4ud2FzbUJpbmFyeUZpbGUpP2d1PWF3YWl0IG8obik6Z3U9YXdhaXQgbygpLGd1LmluaXRpYWxpemVCYXNpcygpLCEwfWZ1bmN0aW9uIGI4KHQsZSl7bGV0IG49dC53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gaChuKT9BOCh0LGUpOl84KHQsZSl9dmFyIFVTLGtTLEdTLFZTLGd1LFQ4LG4xPSQoKCk9PnthdCgpO1d0KCk7SVMoKTtKcigpO3ZTKCk7WmcoKTtzbygpO0RTKCk7VVM9ZHIoQlMoKSwxKSxrUz1bInBvc2l0aXZlWCIsIm5lZ2F0aXZlWCIsInBvc2l0aXZlWSIsIm5lZ2F0aXZlWSIsInBvc2l0aXZlWiIsIm5lZ2F0aXZlWiJdLEdTPTE2MyxWUz0xNjY7VDg9UWUoYjgpfSk7dmFyIHpTPXt9O3ZhciBvMT0kKCgpPT57c2VsZi5vbm1lc3NhZ2U9ZnVuY3Rpb24odCl7bGV0IGU9dC5kYXRhLmFycmF5LG49c2VsZi53ZWJraXRQb3N0TWVzc2FnZXx8c2VsZi5wb3N0TWVzc2FnZTt0cnl7bih7YXJyYXk6ZX0sW2UuYnVmZmVyXSl9Y2F0Y2h7bih7fSl9fX0pO3ZhciB5bSxnbSxqUz0kKCgpPT57VWUoKTtMdCgpO1d0KCk7YXQoKTtqdCgpO3ltPXt9O3ltLmNsaXBUcmlhbmdsZUF0QXhpc0FsaWduZWRUaHJlc2hvbGQ9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJ0aHJlc2hvbGQgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEwoImtlZXBBYm92ZSBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgTCgidTAgaXMgcmVxdWlyZWQuIik7aWYoIWgobykpdGhyb3cgbmV3IEwoInUxIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHIpKXRocm93IG5ldyBMKCJ1MiBpcyByZXF1aXJlZC4iKTtoKGkpP2kubGVuZ3RoPTA6aT1bXTtsZXQgcyxmLHU7ZT8ocz1uPHQsZj1vPHQsdT1yPHQpOihzPW4+dCxmPW8+dCx1PXI+dCk7bGV0IGM9cytmK3UsbCxwLGQsbSxfLGc7cmV0dXJuIGM9PT0xP3M/KGw9KHQtbikvKG8tbikscD0odC1uKS8oci1uKSxpLnB1c2goMSksaS5wdXNoKDIpLHAhPT0xJiYoaS5wdXNoKC0xKSxpLnB1c2goMCksaS5wdXNoKDIpLGkucHVzaChwKSksbCE9PTEmJihpLnB1c2goLTEpLGkucHVzaCgwKSxpLnB1c2goMSksaS5wdXNoKGwpKSk6Zj8oZD0odC1vKS8oci1vKSxtPSh0LW8pLyhuLW8pLGkucHVzaCgyKSxpLnB1c2goMCksbSE9PTEmJihpLnB1c2goLTEpLGkucHVzaCgxKSxpLnB1c2goMCksaS5wdXNoKG0pKSxkIT09MSYmKGkucHVzaCgtMSksaS5wdXNoKDEpLGkucHVzaCgyKSxpLnB1c2goZCkpKTp1JiYoXz0odC1yKS8obi1yKSxnPSh0LXIpLyhvLXIpLGkucHVzaCgwKSxpLnB1c2goMSksZyE9PTEmJihpLnB1c2goLTEpLGkucHVzaCgyKSxpLnB1c2goMSksaS5wdXNoKGcpKSxfIT09MSYmKGkucHVzaCgtMSksaS5wdXNoKDIpLGkucHVzaCgwKSxpLnB1c2goXykpKTpjPT09Mj8hcyYmbiE9PXQ/KG09KHQtbykvKG4tbyksXz0odC1yKS8obi1yKSxpLnB1c2goMCksaS5wdXNoKC0xKSxpLnB1c2goMSksaS5wdXNoKDApLGkucHVzaChtKSxpLnB1c2goLTEpLGkucHVzaCgyKSxpLnB1c2goMCksaS5wdXNoKF8pKTohZiYmbyE9PXQ/KGc9KHQtcikvKG8tciksbD0odC1uKS8oby1uKSxpLnB1c2goMSksaS5wdXNoKC0xKSxpLnB1c2goMiksaS5wdXNoKDEpLGkucHVzaChnKSxpLnB1c2goLTEpLGkucHVzaCgwKSxpLnB1c2goMSksaS5wdXNoKGwpKTohdSYmciE9PXQmJihwPSh0LW4pLyhyLW4pLGQ9KHQtbykvKHItbyksaS5wdXNoKDIpLGkucHVzaCgtMSksaS5wdXNoKDApLGkucHVzaCgyKSxpLnB1c2gocCksaS5wdXNoKC0xKSxpLnB1c2goMSksaS5wdXNoKDIpLGkucHVzaChkKSk6YyE9PTMmJihpLnB1c2goMCksaS5wdXNoKDEpLGkucHVzaCgyKSksaX07eW0uY29tcHV0ZUJhcnljZW50cmljQ29vcmRpbmF0ZXM9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyxmLHUpe2lmKCFoKHQpKXRocm93IG5ldyBMKCJ4IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBMKCJ5IGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBMKCJ4MSBpcyByZXF1aXJlZC4iKTtpZighaChvKSl0aHJvdyBuZXcgTCgieTEgaXMgcmVxdWlyZWQuIik7aWYoIWgocikpdGhyb3cgbmV3IEwoIngyIGlzIHJlcXVpcmVkLiIpO2lmKCFoKGkpKXRocm93IG5ldyBMKCJ5MiBpcyByZXF1aXJlZC4iKTtpZighaChzKSl0aHJvdyBuZXcgTCgieDMgaXMgcmVxdWlyZWQuIik7aWYoIWgoZikpdGhyb3cgbmV3IEwoInkzIGlzIHJlcXVpcmVkLiIpO2xldCBjPW4tcyxsPXMtcixwPWktZixkPW8tZixtPTEvKHAqYytsKmQpLF89ZS1mLGc9dC1zLGI9KHAqZytsKl8pKm0sVD0oLWQqZytjKl8pKm0sTz0xLWItVDtyZXR1cm4gaCh1KT8odS54PWIsdS55PVQsdS56PU8sdSk6bmV3IGEoYixULE8pfTt5bS5jb21wdXRlTGluZVNlZ21lbnRMaW5lU2VnbWVudEludGVyc2VjdGlvbj1mdW5jdGlvbih0LGUsbixvLHIsaSxzLGYsdSl7eS50eXBlT2YubnVtYmVyKCJ4MDAiLHQpLHkudHlwZU9mLm51bWJlcigieTAwIixlKSx5LnR5cGVPZi5udW1iZXIoIngwMSIsbikseS50eXBlT2YubnVtYmVyKCJ5MDEiLG8pLHkudHlwZU9mLm51bWJlcigieDEwIixyKSx5LnR5cGVPZi5udW1iZXIoInkxMCIsaSkseS50eXBlT2YubnVtYmVyKCJ4MTEiLHMpLHkudHlwZU9mLm51bWJlcigieTExIixmKTtsZXQgYz0ocy1yKSooZS1pKS0oZi1pKSoodC1yKSxsPShuLXQpKihlLWkpLShvLWUpKih0LXIpLHA9KGYtaSkqKG4tdCktKHMtcikqKG8tZSk7aWYocD09PTApcmV0dXJuO2xldCBkPWMvcCxtPWwvcDtpZihkPj0wJiZkPD0xJiZtPj0wJiZtPD0xKXJldHVybiBoKHUpfHwodT1uZXcgSiksdS54PXQrZCoobi10KSx1Lnk9ZStkKihvLWUpLHV9O2dtPXltfSk7dmFyIHIxPXt9O3BlKHIxLHtkZWZhdWx0OigpPT5COH0pO2Z1bmN0aW9uIEY4KHQsZSl7bGV0IG49dC5pc0Vhc3RDaGlsZCxvPXQuaXNOb3J0aENoaWxkLHI9bj8kcjowLGk9bj96bjokcixzPW8/JHI6MCxmPW8/em46JHIsdT1FOCxjPVI4LGw9UzgscD14ODt1Lmxlbmd0aD0wLGMubGVuZ3RoPTAsbC5sZW5ndGg9MCxwLmxlbmd0aD0wO2xldCBkPUM4O2QubGVuZ3RoPTA7bGV0IG09e30sXz10LnZlcnRpY2VzLGc9dC5pbmRpY2VzO2c9Zy5zdWJhcnJheSgwLHQuaW5kZXhDb3VudFdpdGhvdXRTa2lydHMpO2xldCBiPVBzLmNsb25lKHQuZW5jb2RpbmcpLFQ9Yi5oYXNWZXJ0ZXhOb3JtYWxzLE89MCxFPXQudmVydGV4Q291bnRXaXRob3V0U2tpcnRzLHc9dC5taW5pbXVtSGVpZ2h0LEM9dC5tYXhpbXVtSGVpZ2h0LE09bmV3IEFycmF5KEUpLE49bmV3IEFycmF5KEUpLEY9bmV3IEFycmF5KEUpLEk9VD9uZXcgQXJyYXkoRSoyKTp2b2lkIDAsdj0yMCxCLEEsUyx4LEQ7Zm9yKEE9MCxTPTA7QTxFOysrQSxTKz0yKXtsZXQgR2U9Yi5kZWNvZGVUZXh0dXJlQ29vcmRpbmF0ZXMoXyxBLEk4KTtpZihCPWIuZGVjb2RlSGVpZ2h0KF8sQSkseD1QLmNsYW1wKEdlLngqem58MCwwLHpuKSxEPVAuY2xhbXAoR2UueSp6bnwwLDAsem4pLEZbQV09UC5jbGFtcCgoQi13KS8oQy13KSp6bnwwLDAsem4pLHg8diYmKHg9MCksRDx2JiYoRD0wKSx6bi14PHYmJih4PXpuKSx6bi1EPHYmJihEPXpuKSxNW0FdPXgsTltBXT1ELFQpe2xldCBiZT1iLmdldE9jdEVuY29kZWROb3JtYWwoXyxBLHY4KTtJW1NdPWJlLngsSVtTKzFdPWJlLnl9KG4mJng+PSRyfHwhbiYmeDw9JHIpJiYobyYmRD49JHJ8fCFvJiZEPD0kcikmJihtW0FdPU8sdS5wdXNoKHgpLGMucHVzaChEKSxsLnB1c2goRltBXSksVCYmKHAucHVzaChJW1NdKSxwLnB1c2goSVtTKzFdKSksKytPKX1sZXQgej1bXTt6LnB1c2gobmV3IGpuKSx6LnB1c2gobmV3IGpuKSx6LnB1c2gobmV3IGpuKTtsZXQgaj1bXTtqLnB1c2gobmV3IGpuKSxqLnB1c2gobmV3IGpuKSxqLnB1c2gobmV3IGpuKTtsZXQgayxxO2ZvcihBPTA7QTxnLmxlbmd0aDtBKz0zKXtsZXQgR2U9Z1tBXSxiZT1nW0ErMV0sbG49Z1tBKzJdLHBuPU1bR2VdLEVuPU1bYmVdLG9lPU1bbG5dO3pbMF0uaW5pdGlhbGl6ZUluZGV4ZWQoTSxOLEYsSSxHZSkselsxXS5pbml0aWFsaXplSW5kZXhlZChNLE4sRixJLGJlKSx6WzJdLmluaXRpYWxpemVJbmRleGVkKE0sTixGLEksbG4pO2xldCBZdD1nbS5jbGlwVHJpYW5nbGVBdEF4aXNBbGlnbmVkVGhyZXNob2xkKCRyLG4scG4sRW4sb2UsdzgpO2s9MCwhKGs+PVl0Lmxlbmd0aCkmJihrPWpbMF0uaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0KFl0LGsseiksIShrPj1ZdC5sZW5ndGgpJiYoaz1qWzFdLmluaXRpYWxpemVGcm9tQ2xpcFJlc3VsdChZdCxrLHopLCEoaz49WXQubGVuZ3RoKSYmKGs9alsyXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQoWXQsayx6KSxxPWdtLmNsaXBUcmlhbmdsZUF0QXhpc0FsaWduZWRUaHJlc2hvbGQoJHIsbyxqWzBdLmdldFYoKSxqWzFdLmdldFYoKSxqWzJdLmdldFYoKSxIUykscVModSxjLGwscCxkLG0scSxqLFQpLGs8WXQubGVuZ3RoJiYoalsyXS5jbG9uZShqWzFdKSxqWzJdLmluaXRpYWxpemVGcm9tQ2xpcFJlc3VsdChZdCxrLHopLHE9Z20uY2xpcFRyaWFuZ2xlQXRBeGlzQWxpZ25lZFRocmVzaG9sZCgkcixvLGpbMF0uZ2V0VigpLGpbMV0uZ2V0VigpLGpbMl0uZ2V0VigpLEhTKSxxUyh1LGMsbCxwLGQsbSxxLGosVCkpKSkpfWxldCBXPW4/LXpuOjAsUj1vPy16bjowLG50PVtdLGN0PVtdLGx0PVtdLF90PVtdLG90PU51bWJlci5NQVhfVkFMVUUseHQ9LW90LHl0PU84O3l0Lmxlbmd0aD0wO2xldCBTdD1ZLmNsb25lKHQuZWxsaXBzb2lkKSxkdD1NdC5jbG9uZSh0LmNoaWxkUmVjdGFuZ2xlKSxmdD1kdC5ub3J0aCxJdD1kdC5zb3V0aCxWdD1kdC5lYXN0LGRlPWR0Lndlc3Q7Zm9yKFZ0PGRlJiYoVnQrPVAuVFdPX1BJKSxBPTA7QTx1Lmxlbmd0aDsrK0EpeD1NYXRoLnJvdW5kKHVbQV0pLHg8PXI/KG50LnB1c2goQSkseD0wKTp4Pj1pPyhsdC5wdXNoKEEpLHg9em4pOng9eCoyK1csdVtBXT14LEQ9TWF0aC5yb3VuZChjW0FdKSxEPD1zPyhjdC5wdXNoKEEpLEQ9MCk6RD49Zj8oX3QucHVzaChBKSxEPXpuKTpEPUQqMitSLGNbQV09RCxCPVAubGVycCh3LEMsbFtBXS96biksQjxvdCYmKG90PUIpLEI+eHQmJih4dD1CKSxsW0FdPUIsQW0ubG9uZ2l0dWRlPVAubGVycChkZSxWdCx4L3puKSxBbS5sYXRpdHVkZT1QLmxlcnAoSXQsZnQsRC96biksQW0uaGVpZ2h0PUIsU3QuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oQW0sWGkpLHl0LnB1c2goWGkueCkseXQucHVzaChYaS55KSx5dC5wdXNoKFhpLnopO2xldCBzZT1ndC5mcm9tVmVydGljZXMoeXQsYS5aRVJPLDMsTTgpLGxlPVNvLmZyb21SZWN0YW5nbGUoZHQsb3QseHQsU3QsTjgpLFp0PW5ldyB4cyhTdCkuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRGcm9tVmVydGljZXNQb3NzaWJseVVuZGVyRWxsaXBzb2lkKHNlLmNlbnRlcix5dCwzLHNlLmNlbnRlcixvdCxQOCksUXQ9eHQtb3QsTmU9bmV3IFVpbnQxNkFycmF5KHUubGVuZ3RoK2MubGVuZ3RoK2wubGVuZ3RoKTtmb3IoQT0wO0E8dS5sZW5ndGg7KytBKU5lW0FdPXVbQV07bGV0IGdlPXUubGVuZ3RoO2ZvcihBPTA7QTxjLmxlbmd0aDsrK0EpTmVbZ2UrQV09Y1tBXTtmb3IoZ2UrPWMubGVuZ3RoLEE9MDtBPGwubGVuZ3RoOysrQSlOZVtnZStBXT16bioobFtBXS1vdCkvUXQ7bGV0IEVlPUZ0LmNyZWF0ZVR5cGVkQXJyYXkodS5sZW5ndGgsZCksdW47aWYoVCl7bGV0IEdlPW5ldyBVaW50OEFycmF5KHApO2UucHVzaChOZS5idWZmZXIsRWUuYnVmZmVyLEdlLmJ1ZmZlciksdW49R2UuYnVmZmVyfWVsc2UgZS5wdXNoKE5lLmJ1ZmZlcixFZS5idWZmZXIpO3JldHVybnt2ZXJ0aWNlczpOZS5idWZmZXIsZW5jb2RlZE5vcm1hbHM6dW4saW5kaWNlczpFZS5idWZmZXIsbWluaW11bUhlaWdodDpvdCxtYXhpbXVtSGVpZ2h0Onh0LHdlc3RJbmRpY2VzOm50LHNvdXRoSW5kaWNlczpjdCxlYXN0SW5kaWNlczpsdCxub3J0aEluZGljZXM6X3QsYm91bmRpbmdTcGhlcmU6c2Usb3JpZW50ZWRCb3VuZGluZ0JveDpsZSxob3Jpem9uT2NjbHVzaW9uUG9pbnQ6WnR9fWZ1bmN0aW9uIGpuKCl7dGhpcy52ZXJ0ZXhCdWZmZXI9dm9pZCAwLHRoaXMuaW5kZXg9dm9pZCAwLHRoaXMuZmlyc3Q9dm9pZCAwLHRoaXMuc2Vjb25kPXZvaWQgMCx0aGlzLnJhdGlvPXZvaWQgMH1mdW5jdGlvbiBLUyh0LGUpeysrYm07bGV0IG49TDhbYm1dLG89RDhbYm1dO3JldHVybiBuPW5uLm9jdERlY29kZSh0LmZpcnN0LmdldE5vcm1hbFgoKSx0LmZpcnN0LmdldE5vcm1hbFkoKSxuKSxvPW5uLm9jdERlY29kZSh0LnNlY29uZC5nZXROb3JtYWxYKCksdC5zZWNvbmQuZ2V0Tm9ybWFsWSgpLG8pLFhpPWEubGVycChuLG8sdC5yYXRpbyxYaSksYS5ub3JtYWxpemUoWGksWGkpLG5uLm9jdEVuY29kZShYaSxlKSwtLWJtLGV9ZnVuY3Rpb24gcVModCxlLG4sbyxyLGkscyxmLHUpe2lmKHMubGVuZ3RoPT09MClyZXR1cm47bGV0IGM9MCxsPTA7Zm9yKDtsPHMubGVuZ3RoOylsPVZvW2MrK10uaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0KHMsbCxmKTtmb3IobGV0IHA9MDtwPGM7KytwKXtsZXQgZD1Wb1twXTtpZihkLmlzSW5kZXhlZCgpKWQubmV3SW5kZXg9aVtkLmluZGV4XSxkLnVCdWZmZXI9dCxkLnZCdWZmZXI9ZSxkLmhlaWdodEJ1ZmZlcj1uLHUmJihkLm5vcm1hbEJ1ZmZlcj1vKTtlbHNle2xldCBtPWQuZ2V0S2V5KCk7aWYoaChpW21dKSlkLm5ld0luZGV4PWlbbV07ZWxzZXtsZXQgXz10Lmxlbmd0aDt0LnB1c2goZC5nZXRVKCkpLGUucHVzaChkLmdldFYoKSksbi5wdXNoKGQuZ2V0SCgpKSx1JiYoby5wdXNoKGQuZ2V0Tm9ybWFsWCgpKSxvLnB1c2goZC5nZXROb3JtYWxZKCkpKSxkLm5ld0luZGV4PV8saVttXT1ffX19Yz09PTM/KHIucHVzaChWb1swXS5uZXdJbmRleCksci5wdXNoKFZvWzFdLm5ld0luZGV4KSxyLnB1c2goVm9bMl0ubmV3SW5kZXgpKTpjPT09NCYmKHIucHVzaChWb1swXS5uZXdJbmRleCksci5wdXNoKFZvWzFdLm5ld0luZGV4KSxyLnB1c2goVm9bMl0ubmV3SW5kZXgpLHIucHVzaChWb1swXS5uZXdJbmRleCksci5wdXNoKFZvWzJdLm5ld0luZGV4KSxyLnB1c2goVm9bM10ubmV3SW5kZXgpKX12YXIgem4sJHIsdzgsSFMsTzgsQW0sWGksRTgsUjgsUzgsQzgseDgsUDgsTTgsTjgsSTgsdjgsamEsYm0sTDgsRDgsVm8sQjgsaTE9JCgoKT0+e2FzKCk7dmUoKTtVZSgpO0x0KCk7SWUoKTthdCgpOyR0KCk7c3UoKTskZSgpO2pTKCk7S3QoKTtwYSgpO3duKCk7Y3UoKTtzbygpO3puPTMyNzY3LCRyPXpuLzJ8MCx3OD1bXSxIUz1bXSxPOD1bXSxBbT1uZXcgc3QsWGk9bmV3IGEsRTg9W10sUjg9W10sUzg9W10sQzg9W10seDg9W10sUDg9bmV3IGEsTTg9bmV3IGd0LE44PW5ldyBTbyxJOD1uZXcgSix2OD1uZXcgYTtqbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGgodCl8fCh0PW5ldyBqbiksdC51QnVmZmVyPXRoaXMudUJ1ZmZlcix0LnZCdWZmZXI9dGhpcy52QnVmZmVyLHQuaGVpZ2h0QnVmZmVyPXRoaXMuaGVpZ2h0QnVmZmVyLHQubm9ybWFsQnVmZmVyPXRoaXMubm9ybWFsQnVmZmVyLHQuaW5kZXg9dGhpcy5pbmRleCx0LmZpcnN0PXRoaXMuZmlyc3QsdC5zZWNvbmQ9dGhpcy5zZWNvbmQsdC5yYXRpbz10aGlzLnJhdGlvLHR9O2puLnByb3RvdHlwZS5pbml0aWFsaXplSW5kZXhlZD1mdW5jdGlvbih0LGUsbixvLHIpe3RoaXMudUJ1ZmZlcj10LHRoaXMudkJ1ZmZlcj1lLHRoaXMuaGVpZ2h0QnVmZmVyPW4sdGhpcy5ub3JtYWxCdWZmZXI9byx0aGlzLmluZGV4PXIsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5zZWNvbmQ9dm9pZCAwLHRoaXMucmF0aW89dm9pZCAwfTtqbi5wcm90b3R5cGUuaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0PWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1lKzE7cmV0dXJuIHRbZV0hPT0tMT9uW3RbZV1dLmNsb25lKHRoaXMpOih0aGlzLnZlcnRleEJ1ZmZlcj12b2lkIDAsdGhpcy5pbmRleD12b2lkIDAsdGhpcy5maXJzdD1uW3Rbb11dLCsrbyx0aGlzLnNlY29uZD1uW3Rbb11dLCsrbyx0aGlzLnJhdGlvPXRbb10sKytvKSxvfTtqbi5wcm90b3R5cGUuZ2V0S2V5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmRleGVkKCk/dGhpcy5pbmRleDpKU09OLnN0cmluZ2lmeSh7Zmlyc3Q6dGhpcy5maXJzdC5nZXRLZXkoKSxzZWNvbmQ6dGhpcy5zZWNvbmQuZ2V0S2V5KCkscmF0aW86dGhpcy5yYXRpb30pfTtqbi5wcm90b3R5cGUuaXNJbmRleGVkPWZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5pbmRleCl9O2puLnByb3RvdHlwZS5nZXRIPWZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5pbmRleCk/dGhpcy5oZWlnaHRCdWZmZXJbdGhpcy5pbmRleF06UC5sZXJwKHRoaXMuZmlyc3QuZ2V0SCgpLHRoaXMuc2Vjb25kLmdldEgoKSx0aGlzLnJhdGlvKX07am4ucHJvdG90eXBlLmdldFU9ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLmluZGV4KT90aGlzLnVCdWZmZXJbdGhpcy5pbmRleF06UC5sZXJwKHRoaXMuZmlyc3QuZ2V0VSgpLHRoaXMuc2Vjb25kLmdldFUoKSx0aGlzLnJhdGlvKX07am4ucHJvdG90eXBlLmdldFY9ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLmluZGV4KT90aGlzLnZCdWZmZXJbdGhpcy5pbmRleF06UC5sZXJwKHRoaXMuZmlyc3QuZ2V0VigpLHRoaXMuc2Vjb25kLmdldFYoKSx0aGlzLnJhdGlvKX07amE9bmV3IEosYm09LTEsTDg9W25ldyBhLG5ldyBhXSxEOD1bbmV3IGEsbmV3IGFdO2puLnByb3RvdHlwZS5nZXROb3JtYWxYPWZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5pbmRleCk/dGhpcy5ub3JtYWxCdWZmZXJbdGhpcy5pbmRleCoyXTooamE9S1ModGhpcyxqYSksamEueCl9O2puLnByb3RvdHlwZS5nZXROb3JtYWxZPWZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5pbmRleCk/dGhpcy5ub3JtYWxCdWZmZXJbdGhpcy5pbmRleCoyKzFdOihqYT1LUyh0aGlzLGphKSxqYS55KX07Vm89W107Vm8ucHVzaChuZXcgam4pO1ZvLnB1c2gobmV3IGpuKTtWby5wdXNoKG5ldyBqbik7Vm8ucHVzaChuZXcgam4pO0I4PVFlKEY4KX0pO3ZhciBVOCxzMT0kKCgpPT57VTg9cDEoeyIuL2NvbWJpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihpMCgpLHIwKSksIi4vY3JlYXRlQm94R2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZjAoKSxhMCkpLCIuL2NyZWF0ZUJveE91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihwMCgpLGwwKSksIi4vY3JlYXRlQ2lyY2xlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4odzAoKSxUMCkpLCIuL2NyZWF0ZUNpcmNsZU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihTMCgpLFIwKSksIi4vY3JlYXRlQ29wbGFuYXJQb2x5Z29uR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oVTAoKSxCMCkpLCIuL2NyZWF0ZUNvcGxhbmFyUG9seWdvbk91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihWMCgpLEcwKSksIi4vY3JlYXRlQ29ycmlkb3JHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihyXygpLG9fKSksIi4vY3JlYXRlQ29ycmlkb3JPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oY18oKSxzXykpLCIuL2NyZWF0ZUN5bGluZGVyR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZF8oKSxwXykpLCIuL2NyZWF0ZUN5bGluZGVyT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHlfKCksX18pKSwiLi9jcmVhdGVFbGxpcHNlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQV8oKSxnXykpLCIuL2NyZWF0ZUVsbGlwc2VPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oVF8oKSxiXykpLCIuL2NyZWF0ZUVsbGlwc29pZEdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEVfKCksT18pKSwiLi9jcmVhdGVFbGxpcHNvaWRPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQ18oKSxTXykpLCIuL2NyZWF0ZUZydXN0dW1HZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihEXygpLExfKSksIi4vY3JlYXRlRnJ1c3R1bU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihHXygpLGtfKSksIi4vY3JlYXRlR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oYTEoKSxjMSkpLCIuL2NyZWF0ZUdyb3VuZFBvbHlsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oSl8oKSxRXykpLCIuL2NyZWF0ZVBsYW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obnkoKSxleSkpLCIuL2NyZWF0ZVBsYW5lT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGl5KCkscnkpKSwiLi9jcmVhdGVQb2x5Z29uR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZnkoKSxheSkpLCIuL2NyZWF0ZVBvbHlnb25PdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocHkoKSxseSkpLCIuL2NyZWF0ZVBvbHlsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oZ3koKSx5eSkpLCIuL2NyZWF0ZVBvbHlsaW5lVm9sdW1lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oVHkoKSxieSkpLCIuL2NyZWF0ZVBvbHlsaW5lVm9sdW1lT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEV5KCksT3kpKSwiLi9jcmVhdGVSZWN0YW5nbGVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih2eSgpLEl5KSksIi4vY3JlYXRlUmVjdGFuZ2xlT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KER5KCksTHkpKSwiLi9jcmVhdGVTaW1wbGVQb2x5bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGt5KCksVXkpKSwiLi9jcmVhdGVTcGhlcmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih6eSgpLFZ5KSksIi4vY3JlYXRlU3BoZXJlT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHF5KCksSHkpKSwiLi9jcmVhdGVUYXNrUHJvY2Vzc29yV29ya2VyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHNvKCksbzApKSwiLi9jcmVhdGVWZWN0b3JUaWxlQ2xhbXBlZFBvbHlsaW5lcy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihXeSgpLEt5KSksIi4vY3JlYXRlVmVjdG9yVGlsZUdlb21ldHJpZXMuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oWXkoKSxYeSkpLCIuL2NyZWF0ZVZlY3RvclRpbGVQb2ludHMuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oUXkoKSxaeSkpLCIuL2NyZWF0ZVZlY3RvclRpbGVQb2x5Z29ucy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih0ZygpLEp5KSksIi4vY3JlYXRlVmVjdG9yVGlsZVBvbHlsaW5lcy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihvZygpLG5nKSksIi4vY3JlYXRlVmVydGljZXNGcm9tR29vZ2xlRWFydGhFbnRlcnByaXNlQnVmZmVyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGFnKCksY2cpKSwiLi9jcmVhdGVWZXJ0aWNlc0Zyb21IZWlnaHRtYXAuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obGcoKSx1ZykpLCIuL2NyZWF0ZVZlcnRpY2VzRnJvbVF1YW50aXplZFRlcnJhaW5NZXNoLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KG1nKCksZGcpKSwiLi9jcmVhdGVXYWxsR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oQWcoKSxnZykpLCIuL2NyZWF0ZVdhbGxPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4od2coKSxUZykpLCIuL2RlY29kZURyYWNvLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHhnKCksQ2cpKSwiLi9kZWNvZGVHb29nbGVFYXJ0aEVudGVycHJpc2VQYWNrZXQuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocWcoKSxIZykpLCIuL2RlY29kZUkzUy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PigkZygpLFlnKSksIi4vdHJhbnNjb2RlS1RYMi5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihuMSgpLGUxKSksIi4vdHJhbnNmZXJUeXBlZEFycmF5VGVzdC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihvMSgpLHpTKSksIi4vdXBzYW1wbGVRdWFudGl6ZWRUZXJyYWluTWVzaC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihpMSgpLHIxKSl9KX0pO3ZhciBjMT17fTtwZShjMSx7ZGVmYXVsdDooKT0+Vjh9KTthc3luYyBmdW5jdGlvbiBrOCh0LGUpe2xldCBuPVRtW2VdPz9UbVt0XTtyZXR1cm4gaChuKT9uOmgoZSk/KHR5cGVvZiBleHBvcnRzPT0ib2JqZWN0Ij9uPXByKGUpOm49KGF3YWl0IGltcG9ydChlKSkuZGVmYXVsdCxUbVtlXT1uLG4pOih0eXBlb2YgZXhwb3J0cz09Im9iamVjdCI/bj1wcihgV29ya2Vycy8ke3R9YCk6bj0oaChlKT9hd2FpdCBpbXBvcnQoZSk6YXdhaXQgVTgoYC4vJHt0fS5qc2ApKS5kZWZhdWx0LFRtW3RdPW4sbil9YXN5bmMgZnVuY3Rpb24gRzgodCxlKXtsZXQgbj10LnN1YlRhc2tzLG89bi5sZW5ndGgscj1uZXcgQXJyYXkobyk7Zm9yKGxldCBpPTA7aTxvO2krKyl7bGV0IHM9bltpXSxmPXMuZ2VvbWV0cnksdT1zLm1vZHVsZU5hbWUsYz1zLm1vZHVsZVBhdGg7aWYoaCh1KSYmaChjKSl0aHJvdyBuZXcgTCgiTXVzdCBvbmx5IHNldCBtb2R1bGVOYW1lIG9yIG1vZHVsZVBhdGgiKTtoKHUpfHxoKGMpP3JbaV09azgodSxjKS50aGVuKGw9PmwoZixzLm9mZnNldCkpOnJbaV09Zn1yZXR1cm4gUHJvbWlzZS5hbGwocikudGhlbihmdW5jdGlvbihpKXtyZXR1cm4gc2EucGFja0NyZWF0ZUdlb21ldHJ5UmVzdWx0cyhpLGUpfSl9dmFyIFRtLFY4LGExPSQoKCk9PntqdCgpO2F0KCk7bjAoKTtzbygpO3MxKCk7VG09e307Vjg9UWUoRzgpfSk7dmFyIERrPXt9O3BlKERrLHtjb21iaW5lR2VvbWV0cnk6KCk9Pno4LGNyZWF0ZUJveEdlb21ldHJ5OigpPT5qOCxjcmVhdGVCb3hPdXRsaW5lR2VvbWV0cnk6KCk9Pkg4LGNyZWF0ZUNpcmNsZUdlb21ldHJ5OigpPT5xOCxjcmVhdGVDaXJjbGVPdXRsaW5lR2VvbWV0cnk6KCk9Pks4LGNyZWF0ZUNvcGxhbmFyUG9seWdvbkdlb21ldHJ5OigpPT5XOCxjcmVhdGVDb3BsYW5hclBvbHlnb25PdXRsaW5lR2VvbWV0cnk6KCk9Plg4LGNyZWF0ZUNvcnJpZG9yR2VvbWV0cnk6KCk9Plk4LGNyZWF0ZUNvcnJpZG9yT3V0bGluZUdlb21ldHJ5OigpPT4kOCxjcmVhdGVDeWxpbmRlckdlb21ldHJ5OigpPT5aOCxjcmVhdGVDeWxpbmRlck91dGxpbmVHZW9tZXRyeTooKT0+UTgsY3JlYXRlRWxsaXBzZUdlb21ldHJ5OigpPT5KOCxjcmVhdGVFbGxpcHNlT3V0bGluZUdlb21ldHJ5OigpPT50ayxjcmVhdGVFbGxpcHNvaWRHZW9tZXRyeTooKT0+ZWssY3JlYXRlRWxsaXBzb2lkT3V0bGluZUdlb21ldHJ5OigpPT5uayxjcmVhdGVGcnVzdHVtR2VvbWV0cnk6KCk9Pm9rLGNyZWF0ZUZydXN0dW1PdXRsaW5lR2VvbWV0cnk6KCk9PnJrLGNyZWF0ZUdlb21ldHJ5OigpPT5payxjcmVhdGVHcm91bmRQb2x5bGluZUdlb21ldHJ5OigpPT5zayxjcmVhdGVQbGFuZUdlb21ldHJ5OigpPT5jayxjcmVhdGVQbGFuZU91dGxpbmVHZW9tZXRyeTooKT0+YWssY3JlYXRlUG9seWdvbkdlb21ldHJ5OigpPT5mayxjcmVhdGVQb2x5Z29uT3V0bGluZUdlb21ldHJ5OigpPT51ayxjcmVhdGVQb2x5bGluZUdlb21ldHJ5OigpPT5sayxjcmVhdGVQb2x5bGluZVZvbHVtZUdlb21ldHJ5OigpPT5wayxjcmVhdGVQb2x5bGluZVZvbHVtZU91dGxpbmVHZW9tZXRyeTooKT0+ZGssY3JlYXRlUmVjdGFuZ2xlR2VvbWV0cnk6KCk9Pm1rLGNyZWF0ZVJlY3RhbmdsZU91dGxpbmVHZW9tZXRyeTooKT0+aGssY3JlYXRlU2ltcGxlUG9seWxpbmVHZW9tZXRyeTooKT0+X2ssY3JlYXRlU3BoZXJlR2VvbWV0cnk6KCk9PnlrLGNyZWF0ZVNwaGVyZU91dGxpbmVHZW9tZXRyeTooKT0+Z2ssY3JlYXRlVGFza1Byb2Nlc3NvcldvcmtlcjooKT0+QWssY3JlYXRlVmVjdG9yVGlsZUNsYW1wZWRQb2x5bGluZXM6KCk9PmJrLGNyZWF0ZVZlY3RvclRpbGVHZW9tZXRyaWVzOigpPT5UayxjcmVhdGVWZWN0b3JUaWxlUG9pbnRzOigpPT53ayxjcmVhdGVWZWN0b3JUaWxlUG9seWdvbnM6KCk9Pk9rLGNyZWF0ZVZlY3RvclRpbGVQb2x5bGluZXM6KCk9PkVrLGNyZWF0ZVZlcnRpY2VzRnJvbUdvb2dsZUVhcnRoRW50ZXJwcmlzZUJ1ZmZlcjooKT0+UmssY3JlYXRlVmVydGljZXNGcm9tSGVpZ2h0bWFwOigpPT5TayxjcmVhdGVWZXJ0aWNlc0Zyb21RdWFudGl6ZWRUZXJyYWluTWVzaDooKT0+Q2ssY3JlYXRlV2FsbEdlb21ldHJ5OigpPT54ayxjcmVhdGVXYWxsT3V0bGluZUdlb21ldHJ5OigpPT5QayxkZWNvZGVEcmFjbzooKT0+TWssZGVjb2RlR29vZ2xlRWFydGhFbnRlcnByaXNlUGFja2V0OigpPT5OayxkZWNvZGVJM1M6KCk9PklrLHRyYW5zY29kZUtUWDI6KCk9PnZrLHRyYW5zZmVyVHlwZWRBcnJheVRlc3Q6KCk9PkZrLHVwc2FtcGxlUXVhbnRpemVkVGVycmFpbk1lc2g6KCk9PkxrfSk7dmFyIHo4PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+aTAoKSl9LGo4PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+ZjAoKSl9LEg4PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+cDAoKSl9LHE4PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dzAoKSl9LEs4PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+UzAoKSl9LFc4PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+VTAoKSl9LFg4PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+VjAoKSl9LFk4PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+cl8oKSl9LCQ4PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+Y18oKSl9LFo4PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+ZF8oKSl9LFE4PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+eV8oKSl9LEo4PSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+QV8oKSl9LHRrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+VF8oKSl9LGVrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RV8oKSl9LG5rPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+Q18oKSl9LG9rPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RF8oKSl9LHJrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+R18oKSl9LGlrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+YTEoKSl9LHNrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+Sl8oKSl9LGNrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bnkoKSl9LGFrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+aXkoKSl9LGZrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+ZnkoKSl9LHVrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+cHkoKSl9LGxrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+Z3koKSl9LHBrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+VHkoKSl9LGRrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RXkoKSl9LG1rPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dnkoKSl9LGhrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+RHkoKSl9LF9rPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+a3koKSl9LHlrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+enkoKSl9LGdrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+cXkoKSl9LEFrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+c28oKSl9LGJrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+V3koKSl9LFRrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+WXkoKSl9LHdrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+UXkoKSl9LE9rPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGcoKSl9LEVrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+b2coKSl9LFJrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+YWcoKSl9LFNrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bGcoKSl9LENrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bWcoKSl9LHhrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+QWcoKSl9LFBrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+d2coKSl9LE1rPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+eGcoKSl9LE5rPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+cWcoKSl9LElrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+JGcoKSl9LHZrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bjEoKSl9LEZrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+bzEoKSl9LExrPSgpPT57UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+aTEoKSl9O3JldHVybiBKUyhEayk7fSkoKTsK")});var oN=ad((oLt,Sq)=>{var rLt=_(T()),xp=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)};xp.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}};xp.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};xp.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};xp.prototype.random_int31=function(){return this.random_int()>>>1};xp.prototype.random_incl=function(){return this.random_int()*(1/4294967295)};xp.prototype.random=function(){return this.random_int()*(1/4294967296)};xp.prototype.random_excl=function(){return(this.random_int()+.5)*(1/4294967296)};xp.prototype.random_long=function(){var e=this.random_int()>>>5,t=this.random_int()>>>6;return(e*67108864+t)*(1/9007199254740992)};Sq.exports=xp});var zq=ad((YS,HS)=>{var lGt=_(T());/*! https://mths.be/punycode v1.4.0 by @mathias */(function(e){var t=typeof YS=="object"&&YS&&!YS.nodeType&&YS,n=typeof HS=="object"&&HS&&!HS.nodeType&&HS,i=typeof global=="object"&&global;(i.global===i||i.window===i||i.self===i)&&(e=i);var o,r=2147483647,s=36,a=1,l=26,d=38,u=700,f=72,p=128,y="-",h=/^xn--/,g=/[^\x20-\x7E]/,x=/[\x2E\u3002\uFF0E\uFF61]/g,S={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},V=s-a,Z=Math.floor,R=String.fromCharCode,E;function I(O){throw new RangeError(S[O])}function v(O,H){for(var U=O.length,K=[];U--;)K[U]=H(O[U]);return K}function P(O,H){var U=O.split("@"),K="";U.length>1&&(K=U[0]+"@",O=U[1]),O=O.replace(x,".");var Q=O.split("."),ie=v(Q,H).join(".");return K+ie}function F(O){for(var H=[],U=0,K=O.length,Q,ie;U=55296&&Q<=56319&&U65535&&(H-=65536,U+=R(H>>>10&1023|55296),H=56320|H&1023),U+=R(H),U}).join("")}function b(O){return O-48<10?O-22:O-65<26?O-65:O-97<26?O-97:s}function G(O,H){return O+22+75*(O<26)-((H!=0)<<5)}function X(O,H,U){var K=0;for(O=U?Z(O/u):O>>1,O+=Z(O/H);O>V*l>>1;K+=s)O=Z(O/V);return Z(K+(V+1)*O/(O+d))}function W(O){var H=[],U=O.length,K,Q=0,ie=p,j=f,$,ne,be,Ce,me,_e,Ve,Ie,Ze;for($=O.lastIndexOf(y),$<0&&($=0),ne=0;ne<$;++ne)O.charCodeAt(ne)>=128&&I("not-basic"),H.push(O.charCodeAt(ne));for(be=$>0?$+1:0;be=U&&I("invalid-input"),Ve=b(O.charCodeAt(be++)),(Ve>=s||Ve>Z((r-Q)/me))&&I("overflow"),Q+=Ve*me,Ie=_e<=j?a:_e>=j+l?l:_e-j,!(VeZ(r/Ze)&&I("overflow"),me*=Ze;K=H.length+1,j=X(Q-Ce,K,Ce==0),Z(Q/K)>r-ie&&I("overflow"),ie+=Z(Q/K),Q%=K,H.splice(Q++,0,ie)}return N(H)}function A(O){var H,U,K,Q,ie,j,$,ne,be,Ce,me,_e=[],Ve,Ie,Ze,De;for(O=F(O),Ve=O.length,H=p,U=0,ie=f,j=0;j=H&&me<$&&($=me);for(Ie=K+1,$-H>Z((r-U)/Ie)&&I("overflow"),U+=($-H)*Ie,H=$,j=0;jr&&I("overflow"),me==H){for(ne=U,be=s;Ce=be<=ie?a:be>=ie+l?l:be-ie,!(ne{var dGt=_(T());/*! * URI.js - Mutating URLs * IPv6 Support * * Version: 1.19.11 * * Author: Rodney Rehm * Web: http://medialize.github.io/URI.js/ * * Licensed under * MIT License http://www.opensource.org/licenses/mit-license * */(function(e,t){"use strict";typeof ZN=="object"&&ZN.exports?ZN.exports=t():typeof define=="function"&&define.amd?define(t):e.IPv6=t(e)})(Kq,function(e){"use strict";var t=e&&e.IPv6;function n(o){var r=o.toLowerCase(),s=r.split(":"),a=s.length,l=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&&(l=7);var d;for(d=0;d1);p++)u.splice(0,1);s[f]=u.join("")}var y=-1,h=0,g=0,x=-1,S=!1;for(f=0;fh&&(y=x,h=g)):s[f]==="0"&&(S=!0,x=f,g=1);g>h&&(y=x,h=g),h>1&&s.splice(y,h,""),a=s.length;var V="";for(s[0]===""&&(V=":"),f=0;f{var uGt=_(T());/*! * URI.js - Mutating URLs * Second Level Domain (SLD) Support * * Version: 1.19.11 * * Author: Rodney Rehm * Web: http://medialize.github.io/URI.js/ * * Licensed under * MIT License http://www.opensource.org/licenses/mit-license * */(function(e,t){"use strict";typeof RN=="object"&&RN.exports?RN.exports=t():typeof define=="function"&&define.amd?define(t):e.SecondLevelDomains=t(e)})(Qq,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 cd=ad((qq,GN)=>{var mGt=_(T());/*! * URI.js - Mutating URLs * * Version: 1.19.11 * * Author: Rodney Rehm * Web: http://medialize.github.io/URI.js/ * * Licensed under * MIT License http://www.opensource.org/licenses/mit-license * */(function(e,t){"use strict";typeof GN=="object"&&GN.exports?GN.exports=t(zq(),Jq(),jq()):typeof define=="function"&&define.amd?define(["./punycode","./IPv6","./SecondLevelDomains"],t):e.URI=t(e.punycode,e.IPv6,e.SecondLevelDomains,e)})(qq,function(e,t,n,i){"use strict";var o=i&&i.URI;function r(G,X){var W=arguments.length>=1,A=arguments.length>=2;if(!(this instanceof r))return W?A?new r(G,X):new r(G):new r;if(G===void 0){if(W)throw new TypeError("undefined is not a valid argument for URI");typeof location<"u"?G=location.href+"":G=""}if(G===null&&W)throw new TypeError("null is not a valid argument for URI");return this.href(G),X!==void 0?this.absoluteTo(X):this}function s(G){return/^[0-9]+$/.test(G)}r.version="1.19.11";var a=r.prototype,l=Object.prototype.hasOwnProperty;function d(G){return G.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function u(G){return G===void 0?"Undefined":String(Object.prototype.toString.call(G)).slice(8,-1)}function f(G){return u(G)==="Array"}function p(G,X){var W={},A,k;if(u(X)==="RegExp")W=null;else if(f(X))for(A=0,k=X.length;A]+|\(([^\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(G){if(!(!G||!G.nodeName)){var X=G.nodeName.toLowerCase();if(!(X==="input"&&G.type!=="image"))return r.domAttributes[X]}};function x(G){return escape(G)}function S(G){return encodeURIComponent(G).replace(/[!'()*]/g,x).replace(/\*/g,"%2A")}r.encode=S,r.decode=decodeURIComponent,r.iso8859=function(){r.encode=escape,r.decode=unescape},r.unicode=function(){r.encode=S,r.decode=decodeURIComponent},r.characters={pathname:{encode:{expression:/%(24|26|2B|2C|3B|3D|3A|40)/ig,map:{"%24":"$","%26":"&","%2B":"+","%2C":",","%3B":";","%3D":"=","%3A":":","%40":"@"}},decode:{expression:/[\/\?#]/g,map:{"/":"%2F","?":"%3F","#":"%23"}}},reserved:{encode:{expression:/%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,map:{"%3A":":","%2F":"/","%3F":"?","%23":"#","%5B":"[","%5D":"]","%40":"@","%21":"!","%24":"$","%26":"&","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"="}}},urnpath:{encode:{expression:/%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,map:{"%21":"!","%24":"$","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"=","%40":"@"}},decode:{expression:/[\/\?#:]/g,map:{"/":"%2F","?":"%3F","#":"%23",":":"%3A"}}}},r.encodeQuery=function(G,X){var W=r.encode(G+"");return X===void 0&&(X=r.escapeQuerySpace),X?W.replace(/%20/g,"+"):W},r.decodeQuery=function(G,X){G+="",X===void 0&&(X=r.escapeQuerySpace);try{return r.decode(X?G.replace(/\+/g,"%20"):G)}catch{return G}};var V={encode:"encode",decode:"decode"},Z,R=function(G,X){return function(W){try{return r[X](W+"").replace(r.characters[G][X].expression,function(A){return r.characters[G][X].map[A]})}catch{return W}}};for(Z in V)r[Z+"PathSegment"]=R("pathname",V[Z]),r[Z+"UrnPathSegment"]=R("urnpath",V[Z]);var E=function(G,X,W){return function(A){var k;W?k=function(U){return r[X](r[W](U))}:k=r[X];for(var B=(A+"").split(G),O=0,H=B.length;O-1&&(X.fragment=G.substring(W+1)||null,G=G.substring(0,W)),W=G.indexOf("?"),W>-1&&(X.query=G.substring(W+1)||null,G=G.substring(0,W)),G=G.replace(/^(https?|ftp|wss?)?:+[/\\]*/i,"$1://"),G=G.replace(/^[/\\]{2,}/i,"//"),G.substring(0,2)==="//"?(X.protocol=null,G=G.substring(2),G=r.parseAuthority(G,X)):(W=G.indexOf(":"),W>-1&&(X.protocol=G.substring(0,W)||null,X.protocol&&!X.protocol.match(r.protocol_expression)?X.protocol=void 0:G.substring(W+1,W+3).replace(/\\/g,"/")==="//"?(G=G.substring(W+3),G=r.parseAuthority(G,X)):(G=G.substring(W+1),X.urn=!0))),X.path=G,X},r.parseHost=function(G,X){G||(G=""),G=G.replace(/\\/g,"/");var W=G.indexOf("/"),A,k;if(W===-1&&(W=G.length),G.charAt(0)==="[")A=G.indexOf("]"),X.hostname=G.substring(1,A)||null,X.port=G.substring(A+2,W)||null,X.port==="/"&&(X.port=null);else{var B=G.indexOf(":"),O=G.indexOf("/"),H=G.indexOf(":",B+1);H!==-1&&(O===-1||H-1?k:G.length-1),O;return B>-1&&(k===-1||B-1?j=j.slice(0,$)+j.slice($).replace(B,""):j=j.replace(B,""),!(j.length<=U[0].length)&&!(W.ignore&&W.ignore.test(j))){ie=K+j.length;var Ce=X(j,K,ie,G);if(Ce===void 0){A.lastIndex=ie;continue}Ce=String(Ce),G=G.slice(0,K)+Ce+G.slice(ie),A.lastIndex=K+Ce.length}}return A.lastIndex=0,G},r.ensureValidHostname=function(G,X){var W=!!G,A=!!X,k=!1;if(A&&(k=y(r.hostProtocols,X)),k&&!W)throw new TypeError("Hostname cannot be empty, if protocol is "+X);if(G&&G.match(r.invalid_hostname_characters)){if(!e)throw new TypeError('Hostname "'+G+'" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');if(e.toASCII(G).match(r.invalid_hostname_characters))throw new TypeError('Hostname "'+G+'" contains characters other than [A-Z0-9.-:_]')}},r.ensureValidPort=function(G){if(G){var X=Number(G);if(!(s(X)&&X>0&&X<65536))throw new TypeError('Port "'+G+'" is not a valid port')}},r.noConflict=function(G){if(G){var X={URI:this.noConflict()};return i.URITemplate&&typeof i.URITemplate.noConflict=="function"&&(X.URITemplate=i.URITemplate.noConflict()),i.IPv6&&typeof i.IPv6.noConflict=="function"&&(X.IPv6=i.IPv6.noConflict()),i.SecondLevelDomains&&typeof i.SecondLevelDomains.noConflict=="function"&&(X.SecondLevelDomains=i.SecondLevelDomains.noConflict()),X}else i.URI===this&&(i.URI=o);return this},a.build=function(G){return G===!0?this._deferred_build=!0:(G===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 I(G){return function(X,W){return X===void 0?this._parts[G]||"":(this._parts[G]=X||null,this.build(!W),this)}}function v(G,X){return function(W,A){return W===void 0?this._parts[G]||"":(W!==null&&(W=W+"",W.charAt(0)===X&&(W=W.substring(1))),this._parts[G]=W,this.build(!A),this)}}a.protocol=I("protocol"),a.username=I("username"),a.password=I("password"),a.hostname=I("hostname"),a.port=I("port"),a.query=v("query","?"),a.fragment=v("fragment","#"),a.search=function(G,X){var W=this.query(G,X);return typeof W=="string"&&W.length?"?"+W:W},a.hash=function(G,X){var W=this.fragment(G,X);return typeof W=="string"&&W.length?"#"+W:W},a.pathname=function(G,X){if(G===void 0||G===!0){var W=this._parts.path||(this._parts.hostname?"/":"");return G?(this._parts.urn?r.decodeUrnPath:r.decodePath)(W):W}else return this._parts.urn?this._parts.path=G?r.recodeUrnPath(G):"":this._parts.path=G?r.recodePath(G):"/",this.build(!X),this},a.path=a.pathname,a.href=function(G,X){var W;if(G===void 0)return this.toString();this._string="",this._parts=r._parts();var A=G instanceof r,k=typeof G=="object"&&(G.hostname||G.path||G.pathname);if(G.nodeName){var B=r.getDomAttribute(G);G=G[B]||"",k=!1}if(!A&&k&&G.pathname!==void 0&&(G=G.toString()),typeof G=="string"||G instanceof String)this._parts=r.parse(String(G),this._parts);else if(A||k){var O=A?G._parts:G;for(W in O)W!=="query"&&l.call(this._parts,W)&&(this._parts[W]=O[W]);O.query&&this.query(O.query,!1)}else throw new TypeError("invalid input");return this.build(!X),this},a.is=function(G){var X=!1,W=!1,A=!1,k=!1,B=!1,O=!1,H=!1,U=!this._parts.urn;switch(this._parts.hostname&&(U=!1,W=r.ip4_expression.test(this._parts.hostname),A=r.ip6_expression.test(this._parts.hostname),X=W||A,k=!X,B=k&&n&&n.has(this._parts.hostname),O=k&&r.idn_expression.test(this._parts.hostname),H=k&&r.punycode_expression.test(this._parts.hostname)),G.toLowerCase()){case"relative":return U;case"absolute":return!U;case"domain":case"name":return k;case"sld":return B;case"ip":return X;case"ip4":case"ipv4":case"inet4":return W;case"ip6":case"ipv6":case"inet6":return A;case"idn":return O;case"url":return!this._parts.urn;case"urn":return!!this._parts.urn;case"punycode":return H}return null};var P=a.protocol,F=a.port,N=a.hostname;a.protocol=function(G,X){if(G&&(G=G.replace(/:(\/\/)?$/,""),!G.match(r.protocol_expression)))throw new TypeError('Protocol "'+G+`" contains characters other than [A-Z0-9.+-] or doesn't start with [A-Z]`);return P.call(this,G,X)},a.scheme=a.protocol,a.port=function(G,X){return this._parts.urn?G===void 0?"":this:(G!==void 0&&(G===0&&(G=null),G&&(G+="",G.charAt(0)===":"&&(G=G.substring(1)),r.ensureValidPort(G))),F.call(this,G,X))},a.hostname=function(G,X){if(this._parts.urn)return G===void 0?"":this;if(G!==void 0){var W={preventInvalidHostname:this._parts.preventInvalidHostname},A=r.parseHost(G,W);if(A!=="/")throw new TypeError('Hostname "'+G+'" contains characters other than [A-Z0-9.-]');G=W.hostname,this._parts.preventInvalidHostname&&r.ensureValidHostname(G,this._parts.protocol)}return N.call(this,G,X)},a.origin=function(G,X){if(this._parts.urn)return G===void 0?"":this;if(G===void 0){var W=this.protocol(),A=this.authority();return A?(W?W+"://":"")+this.authority():""}else{var k=r(G);return this.protocol(k.protocol()).authority(k.authority()).build(!X),this}},a.host=function(G,X){if(this._parts.urn)return G===void 0?"":this;if(G===void 0)return this._parts.hostname?r.buildHost(this._parts):"";var W=r.parseHost(G,this._parts);if(W!=="/")throw new TypeError('Hostname "'+G+'" contains characters other than [A-Z0-9.-]');return this.build(!X),this},a.authority=function(G,X){if(this._parts.urn)return G===void 0?"":this;if(G===void 0)return this._parts.hostname?r.buildAuthority(this._parts):"";var W=r.parseAuthority(G,this._parts);if(W!=="/")throw new TypeError('Hostname "'+G+'" contains characters other than [A-Z0-9.-]');return this.build(!X),this},a.userinfo=function(G,X){if(this._parts.urn)return G===void 0?"":this;if(G===void 0){var W=r.buildUserinfo(this._parts);return W&&W.substring(0,W.length-1)}else return G[G.length-1]!=="@"&&(G+="@"),r.parseUserinfo(G,this._parts),this.build(!X),this},a.resource=function(G,X){var W;return G===void 0?this.path()+this.search()+this.hash():(W=r.parse(G),this._parts.path=W.path,this._parts.query=W.query,this._parts.fragment=W.fragment,this.build(!X),this)},a.subdomain=function(G,X){if(this._parts.urn)return G===void 0?"":this;if(G===void 0){if(!this._parts.hostname||this.is("IP"))return"";var W=this._parts.hostname.length-this.domain().length-1;return this._parts.hostname.substring(0,W)||""}else{var A=this._parts.hostname.length-this.domain().length,k=this._parts.hostname.substring(0,A),B=new RegExp("^"+d(k));if(G&&G.charAt(G.length-1)!=="."&&(G+="."),G.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");return G&&r.ensureValidHostname(G,this._parts.protocol),this._parts.hostname=this._parts.hostname.replace(B,G),this.build(!X),this}},a.domain=function(G,X){if(this._parts.urn)return G===void 0?"":this;if(typeof G=="boolean"&&(X=G,G=void 0),G===void 0){if(!this._parts.hostname||this.is("IP"))return"";var W=this._parts.hostname.match(/\./g);if(W&&W.length<2)return this._parts.hostname;var A=this._parts.hostname.length-this.tld(X).length-1;return A=this._parts.hostname.lastIndexOf(".",A-1)+1,this._parts.hostname.substring(A)||""}else{if(!G)throw new TypeError("cannot set domain empty");if(G.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");if(r.ensureValidHostname(G,this._parts.protocol),!this._parts.hostname||this.is("IP"))this._parts.hostname=G;else{var k=new RegExp(d(this.domain())+"$");this._parts.hostname=this._parts.hostname.replace(k,G)}return this.build(!X),this}},a.tld=function(G,X){if(this._parts.urn)return G===void 0?"":this;if(typeof G=="boolean"&&(X=G,G=void 0),G===void 0){if(!this._parts.hostname||this.is("IP"))return"";var W=this._parts.hostname.lastIndexOf("."),A=this._parts.hostname.substring(W+1);return X!==!0&&n&&n.list[A.toLowerCase()]&&n.get(this._parts.hostname)||A}else{var k;if(G)if(G.match(/[^a-zA-Z0-9-]/))if(n&&n.is(G))k=new RegExp(d(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(k,G);else throw new TypeError('TLD "'+G+'" 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");k=new RegExp(d(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(k,G)}else throw new TypeError("cannot set TLD empty");return this.build(!X),this}},a.directory=function(G,X){if(this._parts.urn)return G===void 0?"":this;if(G===void 0||G===!0){if(!this._parts.path&&!this._parts.hostname)return"";if(this._parts.path==="/")return"/";var W=this._parts.path.length-this.filename().length-1,A=this._parts.path.substring(0,W)||(this._parts.hostname?"/":"");return G?r.decodePath(A):A}else{var k=this._parts.path.length-this.filename().length,B=this._parts.path.substring(0,k),O=new RegExp("^"+d(B));return this.is("relative")||(G||(G="/"),G.charAt(0)!=="/"&&(G="/"+G)),G&&G.charAt(G.length-1)!=="/"&&(G+="/"),G=r.recodePath(G),this._parts.path=this._parts.path.replace(O,G),this.build(!X),this}},a.filename=function(G,X){if(this._parts.urn)return G===void 0?"":this;if(typeof G!="string"){if(!this._parts.path||this._parts.path==="/")return"";var W=this._parts.path.lastIndexOf("/"),A=this._parts.path.substring(W+1);return G?r.decodePathSegment(A):A}else{var k=!1;G.charAt(0)==="/"&&(G=G.substring(1)),G.match(/\.?\//)&&(k=!0);var B=new RegExp(d(this.filename())+"$");return G=r.recodePath(G),this._parts.path=this._parts.path.replace(B,G),k?this.normalizePath(X):this.build(!X),this}},a.suffix=function(G,X){if(this._parts.urn)return G===void 0?"":this;if(G===void 0||G===!0){if(!this._parts.path||this._parts.path==="/")return"";var W=this.filename(),A=W.lastIndexOf("."),k,B;return A===-1?"":(k=W.substring(A+1),B=/^[a-z0-9%]+$/i.test(k)?k:"",G?r.decodePathSegment(B):B)}else{G.charAt(0)==="."&&(G=G.substring(1));var O=this.suffix(),H;if(O)G?H=new RegExp(d(O)+"$"):H=new RegExp(d("."+O)+"$");else{if(!G)return this;this._parts.path+="."+r.recodePath(G)}return H&&(G=r.recodePath(G),this._parts.path=this._parts.path.replace(H,G)),this.build(!X),this}},a.segment=function(G,X,W){var A=this._parts.urn?":":"/",k=this.path(),B=k.substring(0,1)==="/",O=k.split(A);if(G!==void 0&&typeof G!="number"&&(W=X,X=G,G=void 0),G!==void 0&&typeof G!="number")throw new Error('Bad segment "'+G+'", must be 0-based integer');if(B&&O.shift(),G<0&&(G=Math.max(O.length+G,0)),X===void 0)return G===void 0?O:O[G];if(G===null||O[G]===void 0)if(f(X)){O=[];for(var H=0,U=X.length;H{"use strict";var Kkn=_(T());mle.exports=mKe;var Dw=1e20;function mKe(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,l,d,u,f,p,y,h,g;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,l=e,t.stride?u=t.stride:u=Math.floor(e.length/r/s)}else window.HTMLCanvasElement&&e instanceof window.HTMLCanvasElement?(p=e,f=p.getContext("2d"),r=p.width,s=p.height,y=f.getImageData(0,0,r,s),l=y.data,u=4):window.CanvasRenderingContext2D&&e instanceof window.CanvasRenderingContext2D?(p=e.canvas,f=e,r=p.width,s=p.height,y=f.getImageData(0,0,r,s),l=y.data,u=4):window.ImageData&&e instanceof window.ImageData&&(y=e,r=e.width,s=e.height,l=y.data,u=4);if(a=Math.max(r,s),window.Uint8ClampedArray&&l instanceof window.Uint8ClampedArray||window.Uint8Array&&l instanceof window.Uint8Array)for(d=l,l=Array(r*s),h=0,g=Math.floor(d.length/u);h{var pUn=_(T());function CKe(){var e=0,t=1,n=2,i=3,o=4,r=5,s=6,a=7,l=8,d=9,u=10,f=11,p=12,y=13,h=14,g=15,x=16,S=17,V=0,Z=1,R=2,E=3,I=4;function v(b,G){return 55296<=b.charCodeAt(G)&&b.charCodeAt(G)<=56319&&56320<=b.charCodeAt(G+1)&&b.charCodeAt(G+1)<=57343}function P(b,G){G===void 0&&(G=0);var X=b.charCodeAt(G);if(55296<=X&&X<=56319&&G=1){var W=b.charCodeAt(G-1),A=X;return 55296<=W&&W<=56319?(W-55296)*1024+(A-56320)+65536:A}return X}function F(b,G,X){var W=[b].concat(G).concat([X]),A=W[W.length-2],k=X,B=W.lastIndexOf(h);if(B>1&&W.slice(1,B).every(function(U){return U==i})&&[i,y,S].indexOf(b)==-1)return R;var O=W.lastIndexOf(o);if(O>0&&W.slice(1,O).every(function(U){return U==o})&&[p,o].indexOf(A)==-1)return W.filter(function(U){return U==o}).length%2==1?E:I;if(A==e&&k==t)return V;if(A==n||A==e||A==t)return k==h&&G.every(function(U){return U==i})?R:Z;if(k==n||k==e||k==t)return Z;if(A==s&&(k==s||k==a||k==d||k==u))return V;if((A==d||A==a)&&(k==a||k==l))return V;if((A==u||A==l)&&k==l)return V;if(k==i||k==g)return V;if(k==r)return V;if(A==p)return V;var H=W.indexOf(i)!=-1?W.lastIndexOf(i)-1:W.length-2;return[y,S].indexOf(W[H])!=-1&&W.slice(H+1,-1).every(function(U){return U==i})&&k==h||A==g&&[x,S].indexOf(k)!=-1?V:G.indexOf(o)!=-1?R:A==o&&k==o?V:Z}this.nextBreak=function(b,G){if(G===void 0&&(G=0),G<0)return 0;if(G>=b.length-1)return b.length;for(var X=N(P(b,G)),W=[],A=G+1;A{var Jhi=_(T());(function(e,t){typeof NJ=="object"&&typeof kJ<"u"?kJ.exports=t():typeof define=="function"&&define.amd?define(t):(e=e||self).RBush=t()})(NJ,function(){"use strict";function e(x,S,V,Z,R){(function E(I,v,P,F,N){for(;F>P;){if(F-P>600){var b=F-P+1,G=v-P+1,X=Math.log(b),W=.5*Math.exp(2*X/3),A=.5*Math.sqrt(X*W*(b-W)/b)*(G-b/2<0?-1:1),k=Math.max(P,Math.floor(v-G*W/b+A)),B=Math.min(F,Math.floor(v+(b-G)*W/b+A));E(I,v,k,B,N)}var O=I[v],H=P,U=F;for(t(I,P,v),N(I[F],O)>0&&t(I,P,F);H0;)U--}N(I[P],O)===0?t(I,P,U):t(I,++U,F),U<=v&&(P=U+1),v<=U&&(F=U-1)}})(x,S,V||0,Z||x.length-1,R||n)}function t(x,S,V){var Z=x[S];x[S]=x[V],x[V]=Z}function n(x,S){return xS?1:0}var i=function(x){x===void 0&&(x=9),this._maxEntries=Math.max(4,x),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function o(x,S,V){if(!V)return S.indexOf(x);for(var Z=0;Z=x.minX&&S.maxY>=x.minY}function h(x){return{children:x,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(x,S,V,Z,R){for(var E=[S,V];E.length;)if(!((V=E.pop())-(S=E.pop())<=Z)){var I=S+Math.ceil((V-S)/Z/2)*Z;e(x,I,S,V,R),E.push(S,I,I,V)}}return i.prototype.all=function(){return this._all(this.data,[])},i.prototype.search=function(x){var S=this.data,V=[];if(!y(x,S))return V;for(var Z=this.toBBox,R=[];S;){for(var E=0;E=0&&R[S].children.length>this._maxEntries;)this._split(R,S),S--;this._adjustParentBBoxes(Z,R,S)},i.prototype._split=function(x,S){var V=x[S],Z=V.children.length,R=this._minEntries;this._chooseSplitAxis(V,R,Z);var E=this._chooseSplitIndex(V,R,Z),I=h(V.children.splice(E,V.children.length-E));I.height=V.height,I.leaf=V.leaf,r(V,this.toBBox),r(I,this.toBBox),S?x[S-1].children.push(I):this._splitRoot(V,I)},i.prototype._splitRoot=function(x,S){this.data=h([x,S]),this.data.height=x.height+1,this.data.leaf=!1,r(this.data,this.toBBox)},i.prototype._chooseSplitIndex=function(x,S,V){for(var Z,R,E,I,v,P,F,N=1/0,b=1/0,G=S;G<=V-S;G++){var X=s(x,0,G,this.toBBox),W=s(x,G,V,this.toBBox),A=(R=X,E=W,I=void 0,v=void 0,P=void 0,F=void 0,I=Math.max(R.minX,E.minX),v=Math.max(R.minY,E.minY),P=Math.min(R.maxX,E.maxX),F=Math.min(R.maxY,E.maxY),Math.max(0,P-I)*Math.max(0,F-v)),k=u(X)+u(W);A=S;N--){var b=x.children[N];a(I,x.leaf?R(b):b),v+=f(I)}return v},i.prototype._adjustParentBBoxes=function(x,S,V){for(var Z=V;Z>=0;Z--)a(S[Z],x)},i.prototype._condense=function(x){for(var S=x.length-1,V=void 0;S>=0;S--)x[S].children.length===0?S>0?(V=x[S-1].children).splice(V.indexOf(x[S]),1):this.clear():r(x[S],this.toBBox)},i})});var _7=ad((exports,module)=>{var _io=_(T());/*! * protobuf.js v7.4.0 (c) 2016, daniel wirtz * compiled thu, 22 aug 2024 20:30:39 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,l=2,d=!0;l1&&d.charAt(u)==="=";)++f;return Math.ceil(d.length*3)/4-f};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,f){for(var p=null,y=[],h=0,g=0,x;u>2],x=(S&3)<<4,g=1;break;case 1:y[h++]=o[x|S>>4],x=(S&15)<<2,g=2;break;case 2:y[h++]=o[x|S>>6],y[h++]=o[S&63],g=0;break}h>8191&&((p||(p=[])).push(String.fromCharCode.apply(String,y)),h=0)}return g&&(y[h++]=o[x],y[h++]=61,g===1&&(y[h++]=61)),p?(h&&p.push(String.fromCharCode.apply(String,y.slice(0,h))),p.join("")):String.fromCharCode.apply(String,y.slice(0,h))};var a="invalid encoding";i.decode=function(d,u,f){for(var p=f,y=0,h,g=0;g1)break;if((x=r[x])===undefined)throw Error(a);switch(y){case 0:h=x,y=1;break;case 1:u[f++]=h<<2|(x&48)>>4,h=x,y=2;break;case 2:u[f++]=(h&15)<<4|(x&60)>>2,h=x,y=3;break;case 3:u[f++]=(h&3)<<6|x,y=0;break}}if(y===1)throw Error(a);return f-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],l=0;l0?0:2147483648,y,h);else if(isNaN(p))f(2143289344,y,h);else if(p>34028234663852886e22)f((g<<31|2139095040)>>>0,y,h);else if(p<11754943508222875e-54)f((g<<31|Math.round(p/1401298464324817e-60))>>>0,y,h);else{var x=Math.floor(Math.log(p)/Math.LN2),S=Math.round(p*Math.pow(2,-x)*8388608)&8388607;f((g<<31|x+127<<23|S)>>>0,y,h)}}l.writeFloatLE=d.bind(null,o),l.writeFloatBE=d.bind(null,r);function u(f,p,y){var h=f(p,y),g=(h>>31)*2+1,x=h>>>23&255,S=h&8388607;return x===255?S?NaN:g*(1/0):x===0?g*1401298464324817e-60*S:g*Math.pow(2,x-150)*(S+8388608)}l.readFloatLE=u.bind(null,s),l.readFloatBE=u.bind(null,a)}(),typeof Float64Array<"u"?function(){var d=new Float64Array([-0]),u=new Uint8Array(d.buffer),f=u[7]===128;function p(x,S,V){d[0]=x,S[V]=u[0],S[V+1]=u[1],S[V+2]=u[2],S[V+3]=u[3],S[V+4]=u[4],S[V+5]=u[5],S[V+6]=u[6],S[V+7]=u[7]}function y(x,S,V){d[0]=x,S[V]=u[7],S[V+1]=u[6],S[V+2]=u[5],S[V+3]=u[4],S[V+4]=u[3],S[V+5]=u[2],S[V+6]=u[1],S[V+7]=u[0]}l.writeDoubleLE=f?p:y,l.writeDoubleBE=f?y:p;function h(x,S){return u[0]=x[S],u[1]=x[S+1],u[2]=x[S+2],u[3]=x[S+3],u[4]=x[S+4],u[5]=x[S+5],u[6]=x[S+6],u[7]=x[S+7],d[0]}function g(x,S){return u[7]=x[S],u[6]=x[S+1],u[5]=x[S+2],u[4]=x[S+3],u[3]=x[S+4],u[2]=x[S+5],u[1]=x[S+6],u[0]=x[S+7],d[0]}l.readDoubleLE=f?h:g,l.readDoubleBE=f?g:h}():function(){function d(f,p,y,h,g,x){var S=h<0?1:0;if(S&&(h=-h),h===0)f(0,g,x+p),f(1/h>0?0:2147483648,g,x+y);else if(isNaN(h))f(0,g,x+p),f(2146959360,g,x+y);else if(h>17976931348623157e292)f(0,g,x+p),f((S<<31|2146435072)>>>0,g,x+y);else{var V;if(h<22250738585072014e-324)V=h/5e-324,f(V>>>0,g,x+p),f((S<<31|V/4294967296)>>>0,g,x+y);else{var Z=Math.floor(Math.log(h)/Math.LN2);Z===1024&&(Z=1023),V=h*Math.pow(2,-Z),f(V*4503599627370496>>>0,g,x+p),f((S<<31|Z+1023<<20|V*1048576&1048575)>>>0,g,x+y)}}}l.writeDoubleLE=d.bind(null,o,0,4),l.writeDoubleBE=d.bind(null,r,4,0);function u(f,p,y,h,g){var x=f(h,g+p),S=f(h,g+y),V=(S>>31)*2+1,Z=S>>>20&2047,R=4294967296*(S&1048575)+x;return Z===2047?R?NaN:V*(1/0):Z===0?V*5e-324*R:V*Math.pow(2,Z-1075)*(R+4503599627370496)}l.readDoubleLE=u.bind(null,s,0,4),l.readDoubleBE=u.bind(null,a,4,0)}(),l}function o(l,d,u){d[u]=l&255,d[u+1]=l>>>8&255,d[u+2]=l>>>16&255,d[u+3]=l>>>24}function r(l,d,u){d[u]=l>>>24,d[u+1]=l>>>16&255,d[u+2]=l>>>8&255,d[u+3]=l&255}function s(l,d){return(l[d]|l[d+1]<<8|l[d+2]<<16|l[d+3]<<24)>>>0}function a(l,d){return(l[d]<<24|l[d+1]<<16|l[d+2]<<8|l[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,l=a>>>1,d=null,u=a;return function(p){if(p<1||p>l)return o(p);u+p>a&&(d=o(a),u=0);var y=r.call(d,u,u+=p);return u&7&&(u=(u|7)+1),y}}},{}],7:[function(e,t,n){"use strict";var i=n;i.length=function(r){for(var s=0,a=0,l=0;l191&&p<224?u[f++]=(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[f++]=55296+(p>>10),u[f++]=56320+(p&1023)):u[f++]=(p&15)<<12|(r[s++]&63)<<6|r[s++]&63,f>8191&&((d||(d=[])).push(String.fromCharCode.apply(String,u)),f=0);return d?(f&&d.push(String.fromCharCode.apply(String,u.slice(0,f))),d.join("")):String.fromCharCode.apply(String,u.slice(0,f))},i.write=function(r,s,a){for(var l=a,d,u,f=0;f>6|192,s[a++]=d&63|128):(d&64512)===55296&&((u=r.charCodeAt(f+1))&64512)===56320?(d=65536+((d&1023)<<10)+(u&1023),++f,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-l}},{}],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=l;var i=e(15),o,r=i.LongBits,s=i.utf8;function a(h,g){return RangeError("index out of range: "+h.pos+" + "+(g||1)+" > "+h.len)}function l(h){this.buf=h,this.pos=0,this.len=h.length}var d=typeof Uint8Array<"u"?function(g){if(g instanceof Uint8Array||Array.isArray(g))return new l(g);throw Error("illegal buffer")}:function(g){if(Array.isArray(g))return new l(g);throw Error("illegal buffer")},u=function(){return i.Buffer?function(x){return(l.create=function(V){return i.Buffer.isBuffer(V)?new o(V):d(V)})(x)}:d};l.create=u(),l.prototype._slice=i.Array.prototype.subarray||i.Array.prototype.slice,l.prototype.uint32=function(){var g=4294967295;return function(){if(g=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(g=(g|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(g=(g|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(g=(g|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(g=(g|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return g;if((this.pos+=5)>this.len)throw this.pos=this.len,a(this,10);return g}}(),l.prototype.int32=function(){return this.uint32()|0},l.prototype.sint32=function(){var g=this.uint32();return g>>>1^-(g&1)|0};function f(){var h=new r(0,0),g=0;if(this.len-this.pos>4){for(;g<4;++g)if(h.lo=(h.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return h;if(h.lo=(h.lo|(this.buf[this.pos]&127)<<28)>>>0,h.hi=(h.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return h;g=0}else{for(;g<3;++g){if(this.pos>=this.len)throw a(this);if(h.lo=(h.lo|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return h}return h.lo=(h.lo|(this.buf[this.pos++]&127)<>>0,h}if(this.len-this.pos>4){for(;g<5;++g)if(h.hi=(h.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return h}else for(;g<5;++g){if(this.pos>=this.len)throw a(this);if(h.hi=(h.hi|(this.buf[this.pos]&127)<>>0,this.buf[this.pos++]<128)return h}throw Error("invalid varint encoding")}l.prototype.bool=function(){return this.uint32()!==0};function p(h,g){return(h[g-4]|h[g-3]<<8|h[g-2]<<16|h[g-1]<<24)>>>0}l.prototype.fixed32=function(){if(this.pos+4>this.len)throw a(this,4);return p(this.buf,this.pos+=4)},l.prototype.sfixed32=function(){if(this.pos+4>this.len)throw a(this,4);return p(this.buf,this.pos+=4)|0};function y(){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))}l.prototype.float=function(){if(this.pos+4>this.len)throw a(this,4);var g=i.float.readFloatLE(this.buf,this.pos);return this.pos+=4,g},l.prototype.double=function(){if(this.pos+8>this.len)throw a(this,4);var g=i.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,g},l.prototype.bytes=function(){var g=this.uint32(),x=this.pos,S=this.pos+g;if(S>this.len)throw a(this,g);if(this.pos+=g,Array.isArray(this.buf))return this.buf.slice(x,S);if(x===S){var V=i.Buffer;return V?V.alloc(0):new this.buf.constructor(0)}return this._slice.call(this.buf,x,S)},l.prototype.string=function(){var g=this.bytes();return s.read(g,0,g.length)},l.prototype.skip=function(g){if(typeof g=="number"){if(this.pos+g>this.len)throw a(this,g);this.pos+=g}else do if(this.pos>=this.len)throw a(this);while(this.buf[this.pos++]&128);return this},l.prototype.skipType=function(h){switch(h){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(h=this.uint32()&7)!==4;)this.skipType(h);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+h+" at offset "+this.pos)}return this},l._configure=function(h){o=h,l.create=u(),o._configure();var g=i.Long?"toLong":"toNumber";i.merge(l.prototype,{int64:function(){return f.call(this)[g](!1)},uint64:function(){return f.call(this)[g](!0)},sint64:function(){return f.call(this).zzDecode()[g](!1)},fixed64:function(){return y.call(this)[g](!0)},sfixed64:function(){return y.call(this)[g](!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,l,d,u){if(!d)throw TypeError("request must be specified");var f=this;if(!u)return i.asPromise(r,f,s,a,l,d);if(!f.rpcImpl)return setTimeout(function(){u(Error("already ended"))},0),undefined;try{return f.rpcImpl(s,a[f.requestDelimited?"encodeDelimited":"encode"](d).finish(),function(y,h){if(y)return f.emit("error",y,s),u(y);if(h===null)return f.end(!0),undefined;if(!(h instanceof l))try{h=l[f.responseDelimited?"decodeDelimited":"decode"](h)}catch(g){return f.emit("error",g,s),u(g)}return f.emit("data",h,s),u(null,h)})}catch(p){return f.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(l,d){this.lo=l>>>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 f=d>>>0,p=(d-f)/4294967296>>>0;return u&&(p=~p>>>0,f=~f>>>0,++f>4294967295&&(f=0,++p>4294967295&&(p=0))),new o(f,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,f=~this.hi>>>0;return u||(f=f+1>>>0),-(u+f*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,f=this.hi>>>24;return f===0?u===0?d<16384?d<128?1:2:d<2097152?3:4:u<16384?u<128?5:6:u<2097152?7:8:f<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,l){var d=a[l];return d!=null&&a.hasOwnProperty(l)?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,l){var d=i.LongBits.fromHash(a);return i.Long?i.Long.fromBits(d.lo,d.hi,l):d.toNumber(!!l)};function o(s,a,l){for(var d=Object.keys(a),u=0;u-1;--f)if(l[u[f]]===1&&this[u[f]]!==undefined&&this[u[f]]!==null)return u[f]}},i.oneOfSetter=function(a){return function(l){for(var d=0;d127;)R[E++]=Z&127|128,Z>>>=7;R[E]=Z}function g(Z,R){this.len=Z,this.next=undefined,this.val=R}g.prototype=Object.create(l.prototype),g.prototype.fn=h,f.prototype.uint32=function(R){return this.len+=(this.tail=this.tail.next=new g((R=R>>>0)<128?1:R<16384?2:R<2097152?3:R<268435456?4:5,R)).len,this},f.prototype.int32=function(R){return R<0?this._push(x,10,r.fromNumber(R)):this.uint32(R)},f.prototype.sint32=function(R){return this.uint32((R<<1^R>>31)>>>0)};function x(Z,R,E){for(;Z.hi;)R[E++]=Z.lo&127|128,Z.lo=(Z.lo>>>7|Z.hi<<25)>>>0,Z.hi>>>=7;for(;Z.lo>127;)R[E++]=Z.lo&127|128,Z.lo=Z.lo>>>7;R[E++]=Z.lo}f.prototype.uint64=function(R){var E=r.from(R);return this._push(x,E.length(),E)},f.prototype.int64=f.prototype.uint64,f.prototype.sint64=function(R){var E=r.from(R).zzEncode();return this._push(x,E.length(),E)},f.prototype.bool=function(R){return this._push(y,1,R?1:0)};function S(Z,R,E){R[E]=Z&255,R[E+1]=Z>>>8&255,R[E+2]=Z>>>16&255,R[E+3]=Z>>>24}f.prototype.fixed32=function(R){return this._push(S,4,R>>>0)},f.prototype.sfixed32=f.prototype.fixed32,f.prototype.fixed64=function(R){var E=r.from(R);return this._push(S,4,E.lo)._push(S,4,E.hi)},f.prototype.sfixed64=f.prototype.fixed64,f.prototype.float=function(R){return this._push(i.float.writeFloatLE,4,R)},f.prototype.double=function(R){return this._push(i.float.writeDoubleLE,8,R)};var V=i.Array.prototype.set?function(R,E,I){E.set(R,I)}:function(R,E,I){for(var v=0;v>>0;if(!E)return this._push(y,1,0);if(i.isString(R)){var I=f.alloc(E=s.length(R));s.decode(R,I,0),R=I}return this.uint32(E)._push(V,E,R)},f.prototype.string=function(R){var E=a.length(R);return E?this.uint32(E)._push(a.write,E,R):this._push(y,1,0)},f.prototype.fork=function(){return this.states=new u(this),this.head=this.tail=new l(d,0,0),this.len=0,this},f.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 l(d,0,0),this.len=0),this},f.prototype.ldelim=function(){var R=this.head,E=this.tail,I=this.len;return this.reset().uint32(I),I&&(this.tail.next=R.next,this.tail=E,this.len+=I),this},f.prototype.finish=function(){for(var R=this.head.next,E=this.constructor.alloc(this.len),I=0;R;)R.fn(R.val,E,I),I+=R.len,R=R.next;return E},f._configure=function(Z){o=Z,f.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(l,d,u){d.set(l,u)}:function(l,d,u){if(l.copy)l.copy(d,u,0,l.length);else for(var f=0;f>>0;return this.uint32(d),d&&this._push(r.writeBytesBuffer,d,l),this};function s(a,l,d){a.length<40?o.utf8.write(a,l,d):l.utf8Write?l.utf8Write(a,d):l.write(a,d)}r.prototype.string=function(l){var d=o.Buffer.byteLength(l);return this.uint32(d),d&&this._push(s,d,l),this},r._configure()},{15:15,16:16}]},{},[8])})()});var pCe=ad((Wmo,_B)=>{var wmo=_(T());/* Copyright 2015-2018 Esri. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @preserve */(function(){var e=function(){var o={};o.defaultNoDataValue=-34027999387901484e22,o.decode=function(u,f){f=f||{};var p=f.encodedMaskData||f.encodedMaskData===null,y=l(u,f.inputOffset||0,p),h=f.noDataValue!==null?f.noDataValue:o.defaultNoDataValue,g=r(y,f.pixelType||Float32Array,f.encodedMaskData,h,f.returnMask),x={width:y.width,height:y.height,pixelData:g.resultPixels,minValue:g.minValue,maxValue:y.pixels.maxValue,noDataValue:h};return g.resultMask&&(x.maskData=g.resultMask),f.returnEncodedMask&&y.mask&&(x.encodedMaskData=y.mask.bitset?y.mask.bitset:null),f.returnFileInfo&&(x.fileInfo=s(y),f.computeUsedBitDepths&&(x.fileInfo.bitDepths=a(y))),x};var r=function(u,f,p,y,h){var g=0,x=u.pixels.numBlocksX,S=u.pixels.numBlocksY,V=Math.floor(u.width/x),Z=Math.floor(u.height/S),R=2*u.maxZError,E=Number.MAX_VALUE,I;p=p||(u.mask?u.mask.bitset:null);var v,P;v=new f(u.width*u.height),h&&p&&(P=new Uint8Array(u.width*u.height));for(var F=new Float32Array(V*Z),N,b,G=0;G<=S;G++){var X=G!==S?Z:u.height%S;if(X!==0)for(var W=0;W<=x;W++){var A=W!==x?V:u.width%x;if(A!==0){var k=G*u.width*Z+W*V,B=u.width-A,O=u.pixels.blocks[g],H,U,K;O.encoding<2?(O.encoding===0?H=O.rawData:(d(O.stuffedData,O.bitsPerPixel,O.numValidPixels,O.offset,R,F,u.pixels.maxValue),H=F),U=0):O.encoding===2?K=0:K=O.offset;var Q;if(p)for(b=0;b>3],Q<<=k&7),N=0;N>3]),Q&128?(P&&(P[k]=1),I=O.encoding<2?H[U++]:K,E=E>I?I:E,v[k++]=I):(P&&(P[k]=0),v[k++]=y),Q<<=1;k+=B}else if(O.encoding<2)for(b=0;bI?I:E,v[k++]=I;k+=B}else for(E=E>K?K:E,b=0;b0){var x=new Uint8Array(Math.ceil(y.width*y.height/8));g=new DataView(u,f,y.mask.numBytes);var S=g.getInt16(0,!0),V=2,Z=0;do{if(S>0)for(;S--;)x[Z++]=g.getUint8(V++);else{var R=g.getUint8(V++);for(S=-S;S--;)x[Z++]=R}S=g.getInt16(V,!0),V+=2}while(V0?1:0),P=I+(y.height%I>0?1:0);y.pixels.blocks=new Array(v*P);for(var F=0,N=0;N3)throw"Invalid block encoding ("+W.encoding+")";if(W.encoding===2){f++;continue}if(A!==0&&A!==2){if(A>>=6,W.offsetType=A,A===2)W.offset=g.getInt8(1),G++;else if(A===1)W.offset=g.getInt16(1,!0),G+=2;else if(A===0)W.offset=g.getFloat32(1,!0),G+=4;else throw"Invalid block offset type";if(W.encoding===1)if(A=g.getUint8(G),G++,W.bitsPerPixel=A&63,A>>=6,W.numValidPixelsType=A,A===2)W.numValidPixels=g.getUint8(G),G++;else if(A===1)W.numValidPixels=g.getUint16(G,!0),G+=2;else if(A===0)W.numValidPixels=g.getUint32(G,!0),G+=4;else throw"Invalid valid pixel count type"}if(f+=G,W.encoding!==3){var k,B;if(W.encoding===0){var O=(y.pixels.numBytes-1)/4;if(O!==Math.floor(O))throw"uncompressed block has invalid length";k=new ArrayBuffer(O*4),B=new Uint8Array(k),B.set(new Uint8Array(u,f,O*4));var H=new Float32Array(k);W.rawData=H,f+=O*4}else if(W.encoding===1){var U=Math.ceil(W.numValidPixels*W.bitsPerPixel/8),K=Math.ceil(U/4);k=new ArrayBuffer(K*4),B=new Uint8Array(k),B.set(new Uint8Array(u,f,U)),W.stuffedData=new Uint32Array(k),f+=U}}}return y.eofOffset=f,y},d=function(u,f,p,y,h,g,x){var S=(1<=f)E=I>>>R-f&S,R-=f;else{var F=f-R;E=(I&S)<>>R}g[Z]=E=u?(R=E>>>Z-u&x,Z-=u):(I=u-Z,R=(E&x)<>>Z),d[V]=p[R];else for(v=Math.ceil((g-y)/h),V=0;V=u?(R=E>>>Z-u&x,Z-=u):(I=u-Z,R=(E&x)<>>Z),d[V]=R=d?(Z=R>>>V-d&h,V-=d):(S=d-V,Z=(R&h)<>>V),E[x]=Z=u?(E=I>>>R&x,Z-=u,R+=u):(v=u-Z,E=I>>>R&x,I=l[S++],Z=32-v,E|=(I&(1<=u?(E=I>>>R&x,Z-=u,R+=u):(v=u-Z,E=I>>>R&x,I=l[S++],Z=32-v,E|=(I&(1<=d?(Z=E>>>R&h,V-=d,R+=d):(S=d-V,Z=E>>>R&h,E=l[g++],V=32-S,Z|=(E&(1<=u?(x=S>>>g-u&p,g-=u):(V=u-g,x=(S&p)<>>g),d[h]=x;return d},originalUnstuff2:function(l,d,u,f){var p=(1<=u?(S=V>>>x&p,g-=u,x+=u):(Z=u-g,S=V>>>x&p,V=l[y++],g=32-Z,S|=(V&(1<=359?359:p;p-=h;do d+=l[y++]<<8,u+=d+=l[y++];while(--h);d=(d&65535)+(d>>>16),u=(u&65535)+(u>>>16)}return f&1&&(u+=d+=l[y]<<8),d=(d&65535)+(d>>>16),u=(u&65535)+(u>>>16),(u<<16|d)>>>0},readHeaderInfo:function(l,d){var u=d.ptr,f=new Uint8Array(l,u,6),p={};if(p.fileIdentifierString=String.fromCharCode.apply(null,f),p.fileIdentifierString.lastIndexOf("Lerc2",0)!==0)throw"Unexpected file identifier string (expect Lerc2 ): "+p.fileIdentifierString;u+=6;var y=new DataView(l,u,8),h=y.getInt32(0,!0);p.fileVersion=h,u+=4,h>=3&&(p.checksum=y.getUint32(4,!0),u+=4),y=new DataView(l,u,12),p.height=y.getUint32(0,!0),p.width=y.getUint32(4,!0),u+=8,h>=4?(p.numDims=y.getUint32(8,!0),u+=4):p.numDims=1,y=new DataView(l,u,40),p.numValidPixel=y.getUint32(0,!0),p.microBlockSize=y.getInt32(4,!0),p.blobSize=y.getInt32(8,!0),p.imageType=y.getInt32(12,!0),p.maxZError=y.getFloat64(16,!0),p.zMin=y.getFloat64(24,!0),p.zMax=y.getFloat64(32,!0),u+=40,d.headerInfo=p,d.ptr=u;var g,x;if(h>=3&&(x=h>=4?52:48,g=this.computeChecksumFletcher32(new Uint8Array(l,u-x,p.blobSize-14)),g!==p.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(l,d){var u=d.headerInfo,f=this.getDataTypeArray(u.imageType),p=u.numDims*this.getDataTypeSize(u.imageType),y=this.readSubArray(l,d.ptr,f,p),h=this.readSubArray(l,d.ptr+p,f,p);d.ptr+=2*p;var g,x=!0;for(g=0;g0){x=new Uint8Array(Math.ceil(p/8)),h=new DataView(l,u,g.numBytes);var V=h.getInt16(0,!0),Z=2,R=0,E=0;do{if(V>0)for(;V--;)x[R++]=h.getUint8(Z++);else for(E=h.getUint8(Z++),V=-V;V--;)x[R++]=E;V=h.getInt16(Z,!0),Z+=2}while(Z>3],I<<=v&7):I=x[v>>3],I&128&&(S[v]=1);d.pixels.resultMask=S,g.bitset=x,u+=g.numBytes}return d.ptr=u,d.mask=g,!0},readDataOneSweep:function(l,d,u){var f=d.ptr,p=d.headerInfo,y=p.numDims,h=p.width*p.height,g=p.imageType,x=p.numValidPixel*r.getDataTypeSize(g)*y,S,V=d.pixels.resultMask;if(u===Uint8Array)S=new Uint8Array(l,f,x);else{var Z=new ArrayBuffer(x),R=new Uint8Array(Z);R.set(new Uint8Array(l,f,x)),S=new u(Z)}if(S.length===h*y)d.pixels.resultPixels=S;else{d.pixels.resultPixels=new u(h*y);var E=0,I=0,v=0,P=0;if(y>1)for(v=0;v=g)return!1;var x=new Uint32Array(g-h);r.decodeBits(l,d,x);var S=[],V,Z,R,E;for(V=h;V0&&(S[Z].second=G<>>32-E,32-b>=E?(b+=E,b===32&&(b=0,X++,G=N[X])):(b+=E-32,X++,G=N[X],S[Z].second|=G>>>32-b));var W=0,A=0,k=new s;for(V=0;V=u?A=u:A=W,W>=30&&console.log("WARning, large NUM LUT BITS IS "+W);var B=[],O,H,U,K,Q,ie;for(V=h;V0)if(O=[E,Z],E<=A)for(H=S[Z].second<=0;K--)Q=H>>>K&1,Q?(ie.right||(ie.right=new s),ie=ie.right):(ie.left||(ie.left=new s),ie=ie.left),K===0&&!ie.val&&(ie.val=O[1]);return{decodeLut:B,numBitsLUTQick:A,numBitsLUT:W,tree:k,stuffedData:N,srcPtr:X,bitPos:b}},readHuffman:function(l,d,u){var f=d.headerInfo,p=f.numDims,y=d.headerInfo.height,h=d.headerInfo.width,g=h*y,x=this.readHuffmanTree(l,d),S=x.decodeLut,V=x.tree,Z=x.stuffedData,R=x.srcPtr,E=x.bitPos,I=x.numBitsLUTQick,v=x.numBitsLUT,P=d.headerInfo.imageType===0?128:0,F,N,b,G=d.pixels.resultMask,X,W,A,k,B,O,H,U=0;E>0&&(R++,E=0);var K=Z[R],Q=d.encodeMode===1,ie=new u(g*p),j=ie,$;for($=0;$1&&(j=new u(ie.buffer,g*$,g),U=0),d.headerInfo.numValidPixel===h*y)for(O=0,k=0;k>>32-I,W=X,32-E>>64-E-I,W=X),S[W])N=S[W][1],E+=S[W][0];else for(X=K<>>32-v,W=X,32-E>>64-E-v,W=X),F=V,H=0;H>>v-H-1&1,F=A?F.right:F.left,!(F.left||F.right)){N=F.val,E=E+H+1;break}E>=32&&(E-=32,R++,K=Z[R]),b=N-P,Q?(B>0?b+=U:k>0?b+=j[O-h]:b+=U,b&=255,j[O]=b,U=b):j[O]=b}else for(O=0,k=0;k>>32-I,W=X,32-E>>64-E-I,W=X),S[W])N=S[W][1],E+=S[W][0];else for(X=K<>>32-v,W=X,32-E>>64-E-v,W=X),F=V,H=0;H>>v-H-1&1,F=A?F.right:F.left,!(F.left||F.right)){N=F.val,E=E+H+1;break}E>=32&&(E-=32,R++,K=Z[R]),b=N-P,Q?(B>0&&G[O-1]?b+=U:k>0&&G[O-h]?b+=j[O-h]:b+=U,b&=255,j[O]=b,U=b):j[O]=b}d.ptr=d.ptr+(R+1)*4+(E>0?4:0)}d.pixels.resultPixels=ie},decodeBits:function(l,d,u,f,p){{var y=d.headerInfo,h=y.fileVersion,g=0,x=new DataView(l,d.ptr,5),S=x.getUint8(0);g++;var V=S>>6,Z=V===0?4:3-V,R=(S&32)>0,E=S&31,I=0;if(Z===1)I=x.getUint8(g),g++;else if(Z===2)I=x.getUint16(g,!0),g+=2;else if(Z===4)I=x.getUint32(g,!0),g+=4;else throw"Invalid valid pixel count type";var v=2*y.maxZError,P,F,N,b,G,X,W,A,k,B,O=y.numDims>1?y.maxValues[p]:y.zMax;if(R){for(d.counter.lut++,A=x.getUint8(g),k=E,g++,b=Math.ceil((A-1)*E/8),G=Math.ceil(b/4),F=new ArrayBuffer(G*4),N=new Uint8Array(F),d.ptr+=g,N.set(new Uint8Array(l,d.ptr,b)),W=new Uint32Array(F),d.ptr+=b,B=0;A-1>>>B;)B++;b=Math.ceil(I*B/8),G=Math.ceil(b/4),F=new ArrayBuffer(G*4),N=new Uint8Array(F),N.set(new Uint8Array(l,d.ptr,b)),P=new Uint32Array(F),d.ptr+=b,h>=3?X=o.unstuffLUT2(W,E,A-1,f,v,O):X=o.unstuffLUT(W,E,A-1,f,v,O),h>=3?o.unstuff2(P,u,B,I,X):o.unstuff(P,u,B,I,X)}else d.counter.bitstuffer++,B=E,d.ptr+=g,B>0&&(b=Math.ceil(I*B/8),G=Math.ceil(b/4),F=new ArrayBuffer(G*4),N=new Uint8Array(F),N.set(new Uint8Array(l,d.ptr,b)),P=new Uint32Array(F),d.ptr+=b,h>=3?f==null?o.originalUnstuff2(P,u,B,I):o.unstuff2(P,u,B,I,!1,f,v,O):f==null?o.originalUnstuff(P,u,B,I):o.unstuff(P,u,B,I,!1,f,v,O))}},readTiles:function(l,d,u){var f=d.headerInfo,p=f.width,y=f.height,h=f.microBlockSize,g=f.imageType,x=r.getDataTypeSize(g),S=Math.ceil(p/h),V=Math.ceil(y/h);d.pixels.numBlocksY=V,d.pixels.numBlocksX=S,d.pixels.ptr=0;var Z=0,R=0,E=0,I=0,v=0,P=0,F=0,N=0,b=0,G=0,X=0,W=0,A=0,k=0,B=0,O=0,H,U,K,Q,ie,j,$=new u(h*h),ne=y%h||h,be=p%h||h,Ce,me,_e=f.numDims,Ve,Ie=d.pixels.resultMask,Ze=d.pixels.resultPixels;for(E=0;E1&&(Ze=new u(d.pixels.resultPixels.buffer,p*y*Ve*x,p*y)),F=l.byteLength-d.ptr,H=new DataView(l,d.ptr,Math.min(10,F)),U={},O=0,N=H.getUint8(0),O++,b=N>>6&255,G=N>>2&15,G!==(I*h>>3&15))throw"integrity issue";if(j=N&3,j>3)throw d.ptr+=O,"Invalid block encoding ("+j+")";if(j===2){d.counter.constant++,d.ptr+=O;continue}else if(j===0){if(d.counter.uncompressed++,d.ptr+=O,A=v*P*x,k=l.byteLength-d.ptr,A=A1)for(y=0;y=-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(l){var d=0;switch(l){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=l}return d},getDataTypeUsed:function(l,d){var u=l;switch(l){case 2:case 4:u=l-d;break;case 3:case 5:u=l-2*d;break;case 6:d===0?u=l:d===1?u=2:u=1;break;case 7:d===0?u=l:u=l-2*d+1;break;default:u=l;break}return u},getOnePixel:function(l,d,u,f){var p=0;switch(u){case 0:p=f.getInt8(d);break;case 1:p=f.getUint8(d);break;case 2:p=f.getInt16(d,!0);break;case 3:p=f.getUint16(d,!0);break;case 4:p=f.getInt32(d,!0);break;case 5:p=f.getUInt32(d,!0);break;case 6:p=f.getFloat32(d,!0);break;case 7:p=f.getFloat64(d,!0);break;default:throw"the decoder does not understand this pixel type"}return p}},s=function(l,d,u){this.val=l,this.left=d,this.right=u},a={decode:function(l,d){d=d||{};var u=d.noDataValue,f=0,p={};if(p.ptr=d.inputOffset||0,p.pixels={},!!r.readHeaderInfo(l,p)){var y=p.headerInfo,h=y.fileVersion,g=r.getDataTypeArray(y.imageType);r.readMask(l,p),y.numValidPixel!==y.width*y.height&&!p.pixels.resultMask&&(p.pixels.resultMask=d.maskData);var x=y.width*y.height;if(p.pixels.resultPixels=new g(x*y.numDims),p.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0},y.numValidPixel!==0)if(y.zMax===y.zMin)r.constructConstantSurface(p);else if(h>=4&&r.checkMinMaxRanges(l,p))r.constructConstantSurface(p);else{var S=new DataView(l,p.ptr,2),V=S.getUint8(0);if(p.ptr++,V)r.readDataOneSweep(l,p,g);else if(h>1&&y.imageType<=1&&Math.abs(y.maxZError-.5)<1e-5){var Z=S.getUint8(1);if(p.ptr++,p.encodeMode=Z,Z>2||h<4&&Z>1)throw"Invalid Huffman flag "+Z;Z?r.readHuffman(l,p,g):r.readTiles(l,p,g)}else r.readTiles(l,p,g)}p.eofOffset=p.ptr;var R;d.inputOffset?(R=p.headerInfo.blobSize+d.inputOffset-p.ptr,Math.abs(R)>=1&&(p.eofOffset=d.inputOffset+p.headerInfo.blobSize)):(R=p.headerInfo.blobSize-p.ptr,Math.abs(R)>=1&&(p.eofOffset=p.headerInfo.blobSize));var E={width:y.width,height:y.height,pixelData:p.pixels.resultPixels,minValue:y.zMin,maxValue:y.zMax,validPixelCount:y.numValidPixel,dimCount:y.numDims,dimStats:{minValues:y.minValues,maxValues:y.maxValues},maskData:p.pixels.resultMask};if(p.pixels.resultMask&&r.isValidPixelValue(y.imageType,u)){var I=p.pixels.resultMask;for(f=0;f1&&V.fileInfo.mask&&V.fileInfo.mask.numBytes>0&&h.push(V.maskData),f++,S.pixels.push(V.pixelData),S.statistics.push({minValue:V.minValue,maxValue:V.maxValue,noDataValue:V.noDataValue,dimStats:V.dimStats})}var Z,R,E;if(u>1&&h.length>1){for(E=S.width*S.height,S.bandMasks=h,x=new Uint8Array(E),x.set(h[0]),Z=1;Z{var d9o=_(T());e1e.exports={webm:"data:video/webm;base64,GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4EEQoWBAhhTgGcBAAAAAAAVkhFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEwTbuMU6uEHFO7a1OsghV17AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEUq17GDD0JATYCNTGF2ZjU1LjMzLjEwMFdBjUxhdmY1NS4zMy4xMDBzpJBlrrXf3DCDVB8KcgbMpcr+RImIQJBgAAAAAAAWVK5rAQAAAAAAD++uAQAAAAAAADLXgQFzxYEBnIEAIrWcg3VuZIaFVl9WUDiDgQEj44OEAmJaAOABAAAAAAAABrCBsLqBkK4BAAAAAAAPq9eBAnPFgQKcgQAitZyDdW5khohBX1ZPUkJJU4OBAuEBAAAAAAAAEZ+BArWIQOdwAAAAAABiZIEgY6JPbwIeVgF2b3JiaXMAAAAAAoC7AAAAAAAAgLUBAAAAAAC4AQN2b3JiaXMtAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAxMDExMDEgKFNjaGF1ZmVudWdnZXQpAQAAABUAAABlbmNvZGVyPUxhdmM1NS41Mi4xMDIBBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAkBBTLS3GmgmLJGLSaqugYwxS7KWxSCpntbfKMYUYtV4ah5RREHupJGOKQcwtpNApJq3WVEKFFKSYYyoVUg5SIDRkhQAQmgHgcBxAsixAsiwAAAAAAAAAkDQN0DwPsDQPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8DwR8EQRAAAAAAAAACzPAzTRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAAsDwP8EQR0DwRAAAAAAAAACzPAzxRBDzRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAcEgSJAmSBM0DSJYFTYOmwTQBkmVB06BpME0AAAAAAAAAAAAAJE2DpkHTIIoASdOgadA0iCIAAAAAAAAAAAAAkqZB06BpEEWApGnQNGgaRBEAAAAAAAAAAAAAzzQhihBFmCbAM02IIkQRpgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sqLbQYY4zFCF9kbC2m2moNxggjWywt1VprMMYY3VuLpbaaizE++NpSLDHWXAAAd4MDAESCjTOsJJ0VjgYXGrISAAgJACAQUooxxhhzzjnnpFKMOeaccw5CCKFUijHGnHMOQgghlIwx5pxzEEIIIYRSSsaccxBCCCGEkFLqnHMQQgghhBBKKZ1zDkIIIYQQQimlgxBCCCGEEEoopaQUQgghhBBCCKmklEIIIYRSQighlZRSCCGEEEIpJaSUUgohhFJCCKGElFJKKYUQQgillJJSSimlEkoJJYQSUikppRRKCCGUUkpKKaVUSgmhhBJKKSWllFJKIYQQSikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAkKKUUiktRYIipRikGEtGFXNQWoqocgxSzalSziDmJJaIMYSUk1Qy5hRCDELqHHVMKQYtlRhCxhik2HJLoXMOAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABcAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBB9DtnUBAAAAAAAEPueBAKOFggAAgACjzoEAA4BwBwCdASqwAJAAAEcIhYWIhYSIAgIABhwJ7kPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99YAD+/6tQgKOFggADgAqjhYIAD4AOo4WCACSADqOZgQArADECAAEQEAAYABhYL/QACIBDmAYAAKOFggA6gA6jhYIAT4AOo5mBAFMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAGSADqOFggB6gA6jmYEAewAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAj4AOo5mBAKMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAKSADqOFggC6gA6jmYEAywAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAz4AOo4WCAOSADqOZgQDzADECAAEQEAAYABhYL/QACIBDmAYAAKOFggD6gA6jhYIBD4AOo5iBARsAEQIAARAQFGAAYWC/0AAiAQ5gGACjhYIBJIAOo4WCATqADqOZgQFDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggFPgA6jhYIBZIAOo5mBAWsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAXqADqOFggGPgA6jmYEBkwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIBpIAOo4WCAbqADqOZgQG7ADECAAEQEAAYABhYL/QACIBDmAYAAKOFggHPgA6jmYEB4wAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIB5IAOo4WCAfqADqOZgQILADECAAEQEAAYABhYL/QACIBDmAYAAKOFggIPgA6jhYICJIAOo5mBAjMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAjqADqOFggJPgA6jmYECWwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYICZIAOo4WCAnqADqOZgQKDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggKPgA6jhYICpIAOo5mBAqsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCArqADqOFggLPgA6jmIEC0wARAgABEBAUYABhYL/QACIBDmAYAKOFggLkgA6jhYIC+oAOo5mBAvsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAw+ADqOZgQMjADECAAEQEAAYABhYL/QACIBDmAYAAKOFggMkgA6jhYIDOoAOo5mBA0sAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA0+ADqOFggNkgA6jmYEDcwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIDeoAOo4WCA4+ADqOZgQObADECAAEQEAAYABhYL/QACIBDmAYAAKOFggOkgA6jhYIDuoAOo5mBA8MAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA8+ADqOFggPkgA6jhYID+oAOo4WCBA+ADhxTu2sBAAAAAAAAEbuPs4EDt4r3gQHxghEr8IEK",mp4:"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAGF21kYXTeBAAAbGliZmFhYyAxLjI4AABCAJMgBDIARwAAArEGBf//rdxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxNDIgcjIgOTU2YzhkOCAtIEguMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTQgLSBodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0wIHJlZj0zIGRlYmxvY2s9MTowOjAgYW5hbHlzZT0weDE6MHgxMTEgbWU9aGV4IHN1Ym1lPTcgcHN5PTEgcHN5X3JkPTEuMDA6MC4wMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTEgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV9xcF9vZmZzZXQ9LTIgdGhyZWFkcz02IGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCB2YnZfbWF4cmF0ZT03NjggdmJ2X2J1ZnNpemU9MzAwMCBjcmZfbWF4PTAuMCBuYWxfaHJkPW5vbmUgZmlsbGVyPTAgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAAFZliIQL8mKAAKvMnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiEASZACGQAjgCEASZACGQAjgAAAAAdBmjgX4GSAIQBJkAIZACOAAAAAB0GaVAX4GSAhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGagC/AySEASZACGQAjgAAAAAZBmqAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZrAL8DJIQBJkAIZACOAAAAABkGa4C/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmwAvwMkhAEmQAhkAI4AAAAAGQZsgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGbQC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm2AvwMkhAEmQAhkAI4AAAAAGQZuAL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGboC/AySEASZACGQAjgAAAAAZBm8AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZvgL8DJIQBJkAIZACOAAAAABkGaAC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmiAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpAL8DJIQBJkAIZACOAAAAABkGaYC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmoAvwMkhAEmQAhkAI4AAAAAGQZqgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGawC/AySEASZACGQAjgAAAAAZBmuAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZsAL8DJIQBJkAIZACOAAAAABkGbIC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm0AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZtgL8DJIQBJkAIZACOAAAAABkGbgCvAySEASZACGQAjgCEASZACGQAjgAAAAAZBm6AnwMkhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AAAAhubW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAABDcAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzB0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAA+kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAALAAAACQAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAPpAAAAAAABAAAAAAKobWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAB1MAAAdU5VxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACU21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAhNzdGJsAAAAr3N0c2QAAAAAAAAAAQAAAJ9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAALAAkABIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAALWF2Y0MBQsAN/+EAFWdCwA3ZAsTsBEAAAPpAADqYA8UKkgEABWjLg8sgAAAAHHV1aWRraEDyXyRPxbo5pRvPAyPzAAAAAAAAABhzdHRzAAAAAAAAAAEAAAAeAAAD6QAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAAIxzdHN6AAAAAAAAAAAAAAAeAAADDwAAAAsAAAALAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAAiHN0Y28AAAAAAAAAHgAAAEYAAANnAAADewAAA5gAAAO0AAADxwAAA+MAAAP2AAAEEgAABCUAAARBAAAEXQAABHAAAASMAAAEnwAABLsAAATOAAAE6gAABQYAAAUZAAAFNQAABUgAAAVkAAAFdwAABZMAAAWmAAAFwgAABd4AAAXxAAAGDQAABGh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAACAAAAAAAABDcAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAQkAAADcAABAAAAAAPgbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAC7gAAAykBVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAADi21pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAADT3N0YmwAAABnc3RzZAAAAAAAAAABAAAAV21wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAC7gAAAAAAAM2VzZHMAAAAAA4CAgCIAAgAEgICAFEAVBbjYAAu4AAAADcoFgICAAhGQBoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAADIAAAQAAAAAAQAAAkAAAAFUc3RzYwAAAAAAAAAbAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAwAAAAEAAAABAAAABAAAAAIAAAABAAAABgAAAAEAAAABAAAABwAAAAIAAAABAAAACAAAAAEAAAABAAAACQAAAAIAAAABAAAACgAAAAEAAAABAAAACwAAAAIAAAABAAAADQAAAAEAAAABAAAADgAAAAIAAAABAAAADwAAAAEAAAABAAAAEAAAAAIAAAABAAAAEQAAAAEAAAABAAAAEgAAAAIAAAABAAAAFAAAAAEAAAABAAAAFQAAAAIAAAABAAAAFgAAAAEAAAABAAAAFwAAAAIAAAABAAAAGAAAAAEAAAABAAAAGQAAAAIAAAABAAAAGgAAAAEAAAABAAAAGwAAAAIAAAABAAAAHQAAAAEAAAABAAAAHgAAAAIAAAABAAAAHwAAAAQAAAABAAAA4HN0c3oAAAAAAAAAAAAAADMAAAAaAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAACMc3RjbwAAAAAAAAAfAAAALAAAA1UAAANyAAADhgAAA6IAAAO+AAAD0QAAA+0AAAQAAAAEHAAABC8AAARLAAAEZwAABHoAAASWAAAEqQAABMUAAATYAAAE9AAABRAAAAUjAAAFPwAABVIAAAVuAAAFgQAABZ0AAAWwAAAFzAAABegAAAX7AAAGFwAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTUuMzMuMTAw"}});var i1e=ad((u9o,n1e)=>{var m9o=_(T()),{webm:LVt,mp4:ZVt}=t1e(),cq=()=>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,lq=()=>"wakeLock"in navigator,dq=class{constructor(){if(this.enabled=!1,lq()){this._wakeLock=null;let t=()=>{this._wakeLock!==null&&document.visibilityState==="visible"&&this.enable()};document.addEventListener("visibilitychange",t),document.addEventListener("fullscreenchange",t)}else cq()?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm",LVt),this._addSourceToVideo(this.noSleepVideo,"mp4",ZVt),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 lq()?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}):cq()?(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(){lq()?(this._wakeLock&&this._wakeLock.release(),this._wakeLock=null):cq()?this.noSleepTimer&&(console.warn(` NoSleep now disabled for older iOS devices. `),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}};n1e.exports=dq});var YVt={};b1e(YVt,{AlphaMode:()=>Th,AlphaPipelineStage:()=>XW,AnchorPointDirect:()=>PI,AnchorPointIndirect:()=>vI,Animation:()=>bM,AnimationViewModel:()=>yM,Appearance:()=>no,ApproximateTerrainHeights:()=>ui,ArcGISTiledElevationTerrainProvider:()=>n7,ArcGisBaseMapType:()=>Mf,ArcGisMapServerImageryProvider:()=>l0,ArcGisMapService:()=>Jd,ArcType:()=>Kt,ArticulationStageType:()=>yc,AssociativeArray:()=>Zt,Atmosphere:()=>C_,AtmospherePipelineStage:()=>dW,AttributeCompression:()=>Fn,AttributeType:()=>rn,AutoExposure:()=>RA,AutomaticUniforms:()=>_p,Axis:()=>Po,AxisAlignedBoundingBox:()=>J0,B3dmLoader:()=>KI,B3dmParser:()=>YI,BaseLayerPicker:()=>xM,BaseLayerPickerViewModel:()=>gM,BatchTable:()=>Ix,BatchTableHierarchy:()=>t_,BatchTexture:()=>Qc,BatchTexturePipelineStage:()=>IW,Billboard:()=>co,BillboardCollection:()=>Gd,BillboardGraphics:()=>cc,BillboardLoadState:()=>is,BillboardTexture:()=>xb,BillboardVisualizer:()=>yE,BingMapsGeocoderService:()=>o7,BingMapsImageryProvider:()=>tF,BingMapsStyle:()=>JV,BlendEquation:()=>Pa,BlendFunction:()=>Co,BlendOption:()=>Lo,BlendingState:()=>un,BoundingRectangle:()=>je,BoundingSphere:()=>ue,BoundingSphereState:()=>ut,BoundingVolumeSemantics:()=>g_,BoxEmitter:()=>J7,BoxGeometry:()=>Wa,BoxGeometryUpdater:()=>EX,BoxGraphics:()=>Nx,BoxOutlineGeometry:()=>Fm,BrdfLutGenerator:()=>IF,Buffer:()=>_t,BufferLoader:()=>s_,BufferUsage:()=>Ne,CPUStylingPipelineStage:()=>vW,CallbackPositionProperty:()=>XX,CallbackProperty:()=>Om,Camera:()=>oo,CameraEventAggregator:()=>PA,CameraEventType:()=>Ni,CameraFlightPath:()=>wF,Cartesian2:()=>D,Cartesian3:()=>m,Cartesian4:()=>ce,Cartographic:()=>pe,CartographicGeocoderService:()=>s7,CatmullRomSpline:()=>a7,Cesium3DContentGroup:()=>e_,Cesium3DTile:()=>Ku,Cesium3DTileBatchTable:()=>zp,Cesium3DTileColorBlendMode:()=>Wl,Cesium3DTileContent:()=>Q7,Cesium3DTileContentFactory:()=>M_,Cesium3DTileContentState:()=>Ho,Cesium3DTileContentType:()=>Zs,Cesium3DTileFeature:()=>Us,Cesium3DTileFeatureTable:()=>of,Cesium3DTileOptimizationHint:()=>Du,Cesium3DTileOptimizations:()=>gP,Cesium3DTilePass:()=>Fo,Cesium3DTilePassState:()=>hm,Cesium3DTilePointFeature:()=>_b,Cesium3DTileRefine:()=>Bo,Cesium3DTileStyle:()=>RS,Cesium3DTileStyleEngine:()=>VP,Cesium3DTilesInspector:()=>LM,Cesium3DTilesInspectorViewModel:()=>VM,Cesium3DTilesVoxelProvider:()=>j7,Cesium3DTileset:()=>bs,Cesium3DTilesetBaseTraversal:()=>XP,Cesium3DTilesetCache:()=>TP,Cesium3DTilesetGraphics:()=>Hx,Cesium3DTilesetHeatmap:()=>SP,Cesium3DTilesetMetadata:()=>K_,Cesium3DTilesetMostDetailedTraversal:()=>RP,Cesium3DTilesetSkipTraversal:()=>wP,Cesium3DTilesetStatistics:()=>pf,Cesium3DTilesetTraversal:()=>zs,Cesium3DTilesetVisualizer:()=>PP,CesiumInspector:()=>GM,CesiumInspectorViewModel:()=>RM,CesiumTerrainProvider:()=>_S,CesiumWidget:()=>G9,Check:()=>C,CheckerboardMaterialProperty:()=>X1,CircleEmitter:()=>O9,CircleGeometry:()=>f7,CircleOutlineGeometry:()=>h7,ClassificationModelDrawCommand:()=>Rw,ClassificationPipelineStage:()=>WW,ClassificationPrimitive:()=>bC,ClassificationType:()=>Un,ClearCommand:()=>ti,ClippingPlane:()=>x_,ClippingPlaneCollection:()=>hs,ClippingPolygon:()=>HC,ClippingPolygonCollection:()=>qm,Clock:()=>_f,ClockRange:()=>zr,ClockStep:()=>fo,ClockViewModel:()=>fM,CloudCollection:()=>i6,CloudType:()=>GS,Color:()=>Y,ColorBlendMode:()=>bc,ColorGeometryInstanceAttribute:()=>Yt,ColorMaterialProperty:()=>Ut,Command:()=>z6,ComponentDatatype:()=>q,Composite3DTileContent:()=>NX,CompositeEntityCollection:()=>AK,CompositeMaterialProperty:()=>W1,CompositePositionProperty:()=>ya,CompositeProperty:()=>Sc,CompressedTextureBuffer:()=>yZ,ComputeCommand:()=>vc,ComputeEngine:()=>bZ,ConditionsExpression:()=>M9,ConeEmitter:()=>r6,ConstantPositionProperty:()=>Oc,ConstantProperty:()=>Qn,ConstantSpline:()=>qI,ContentMetadata:()=>lP,Context:()=>lE,ContextLimits:()=>mt,CoplanarPolygonGeometry:()=>g2,CoplanarPolygonGeometryLibrary:()=>Eb,CoplanarPolygonOutlineGeometry:()=>zu,CornerType:()=>Fi,CorrelationGroup:()=>FI,CorridorGeometry:()=>eT,CorridorGeometryLibrary:()=>Bi,CorridorGeometryUpdater:()=>DP,CorridorGraphics:()=>Ux,CorridorOutlineGeometry:()=>OP,Credit:()=>Ct,CreditDisplay:()=>AF,CubeMap:()=>Uo,CubeMapFace:()=>RZ,CubicRealPolynomial:()=>bx,CullFace:()=>_i,CullingVolume:()=>fs,CumulusCloud:()=>au,CustomDataSource:()=>JP,CustomHeightmapTerrainProvider:()=>p7,CustomShader:()=>aS,CustomShaderMode:()=>bb,CustomShaderPipelineStage:()=>OW,CustomShaderTranslucencyMode:()=>Iy,CylinderGeometry:()=>QP,CylinderGeometryLibrary:()=>tT,CylinderGeometryUpdater:()=>qP,CylinderGraphics:()=>Ox,CylinderOutlineGeometry:()=>jP,CzmlDataSource:()=>c2,DataSource:()=>Hr,DataSourceClock:()=>Tf,DataSourceCollection:()=>l2,DataSourceDisplay:()=>z2,DebugAppearance:()=>d6,DebugCameraPrimitive:()=>op,DebugInspector:()=>OA,DebugModelMatrixPrimitive:()=>Y9,DefaultProxy:()=>y7,DepthFunction:()=>lc,DepthPlane:()=>DF,DequantizationPipelineStage:()=>BW,DerivedCommand:()=>rp,DeveloperError:()=>L,DeviceOrientationCameraController:()=>BF,DirectionalLight:()=>u6,DiscardEmptyTileImagePolicy:()=>QV,DiscardMissingTileImagePolicy:()=>$v,DistanceDisplayCondition:()=>vt,DistanceDisplayConditionGeometryInstanceAttribute:()=>kn,DoubleEndedPriorityQueue:()=>mS,DoublyLinkedList:()=>_P,DracoLoader:()=>eb,DrawCommand:()=>et,DynamicAtmosphereLightingType:()=>rb,DynamicEnvironmentMapManager:()=>sb,DynamicGeometryBatch:()=>aT,DynamicGeometryUpdater:()=>ii,EarthOrientationParameters:()=>aZ,EarthOrientationParametersSample:()=>P0,EasingFunction:()=>Jr,EllipseGeometry:()=>cl,EllipseGeometryLibrary:()=>Yl,EllipseGeometryUpdater:()=>u2,EllipseGraphics:()=>Dx,EllipseOutlineGeometry:()=>Md,Ellipsoid:()=>re,EllipsoidGeodesic:()=>Fp,EllipsoidGeometry:()=>Js,EllipsoidGeometryUpdater:()=>f2,EllipsoidGraphics:()=>Bx,EllipsoidOutlineGeometry:()=>Id,EllipsoidPrimitive:()=>ZF,EllipsoidRhumbLine:()=>va,EllipsoidSurfaceAppearance:()=>m6,EllipsoidTangentPlane:()=>$r,EllipsoidTerrainProvider:()=>ep,EllipsoidalOccluder:()=>kb,Empty3DTileContent:()=>y1,EncodedCartesian3:()=>Bn,Entity:()=>$o,EntityCluster:()=>wd,EntityCollection:()=>Ks,EntityView:()=>J2,Event:()=>ye,EventHelper:()=>hr,Expression:()=>Iu,ExpressionNodeType:()=>gt,ExtrapolationType:()=>ol,FeatureDetection:()=>Ot,FeatureIdPipelineStage:()=>Xy,Fog:()=>YF,ForEach:()=>we,FrameRateMonitor:()=>K9,FrameState:()=>HF,Framebuffer:()=>Fr,FramebufferManager:()=>hi,Frozen:()=>z,FrustumCommands:()=>jF,FrustumGeometry:()=>NT,FrustumOutlineGeometry:()=>kF,Fullscreen:()=>_r,FullscreenButton:()=>XM,FullscreenButtonViewModel:()=>EM,GeoJsonDataSource:()=>gg,GeoJsonLoader:()=>JI,GeocodeType:()=>Bg,Geocoder:()=>PM,GeocoderService:()=>PL,GeocoderViewModel:()=>wM,GeographicProjection:()=>Xi,GeographicTilingScheme:()=>Ki,Geometry:()=>dt,Geometry3DTileContent:()=>DX,GeometryAttribute:()=>Ee,GeometryAttributes:()=>fn,GeometryFactory:()=>x7,GeometryInstance:()=>Rt,GeometryInstanceAttribute:()=>dc,GeometryOffsetAttribute:()=>$t,GeometryPipeline:()=>An,GeometryPipelineStage:()=>KW,GeometryType:()=>yu,GeometryUpdater:()=>oi,GeometryUpdaterSet:()=>gT,GeometryVisualizer:()=>v2,GetFeatureInfoFormat:()=>vT,Globe:()=>SF,GlobeDepth:()=>qF,GlobeSurfaceShaderSet:()=>qv,GlobeSurfaceTile:()=>um,GlobeSurfaceTileProvider:()=>mF,GlobeTranslucency:()=>fF,GlobeTranslucencyFramebuffer:()=>$F,GlobeTranslucencyState:()=>zF,GltfBufferViewLoader:()=>XC,GltfDracoLoader:()=>IC,GltfGpmLoader:()=>MI,GltfGpmLocal:()=>KC,GltfImageLoader:()=>WC,GltfIndexBufferLoader:()=>wC,GltfJsonLoader:()=>vC,GltfLoader:()=>nf,GltfLoaderUtil:()=>vl,GltfMeshPrimitiveGpmLoader:()=>OI,GltfStructuralMetadataLoader:()=>WI,GltfTextureLoader:()=>FC,GltfVertexBufferLoader:()=>AC,GoogleEarthEnterpriseImageryProvider:()=>h6,GoogleEarthEnterpriseMapsProvider:()=>oF,GoogleEarthEnterpriseMetadata:()=>G0,GoogleEarthEnterpriseTerrainData:()=>vL,GoogleEarthEnterpriseTerrainProvider:()=>R7,GoogleEarthEnterpriseTileInformation:()=>w9,GoogleGeocoderService:()=>E7,GoogleMaps:()=>CS,GpxDataSource:()=>xv,GregorianDate:()=>eh,GridImageryProvider:()=>p6,GridMaterialProperty:()=>O1,GroundGeometryUpdater:()=>Yn,GroundPolylineGeometry:()=>vx,GroundPolylinePrimitive:()=>Am,GroundPrimitive:()=>kc,GroupMetadata:()=>R1,HeadingPitchRange:()=>rm,HeadingPitchRoll:()=>Ea,Heap:()=>iZ,HeightReference:()=>ze,HeightmapEncoding:()=>cm,HeightmapTerrainData:()=>Da,HeightmapTessellator:()=>YV,HermitePolynomialApproximation:()=>$P,HermiteSpline:()=>Ry,HilbertOrder:()=>ZC,HomeButton:()=>WM,HomeButtonViewModel:()=>IM,HorizontalOrigin:()=>xi,I3SBuildingSceneLayerExplorer:()=>nq,I3SBuildingSceneLayerExplorerViewModel:()=>vM,I3SDataProvider:()=>jf,I3SDecoder:()=>J9,I3SFeature:()=>Q9,I3SField:()=>j9,I3SGeometry:()=>NL,I3SLayer:()=>wS,I3SNode:()=>kL,I3SStatistics:()=>eM,I3SSublayer:()=>nM,I3SSymbology:()=>$9,I3dmLoader:()=>jI,I3dmParser:()=>QI,ITwinData:()=>x6,ITwinPlatform:()=>as,Iau2000Orientation:()=>VF,Iau2006XysData:()=>cZ,Iau2006XysSample:()=>mx,IauOrientationAxes:()=>LF,IauOrientationParameters:()=>CF,ImageBasedLighting:()=>$x,ImageBasedLightingPipelineStage:()=>mW,ImageMaterialProperty:()=>$0,Imagery:()=>nL,ImageryLayer:()=>Ya,ImageryLayerCollection:()=>hF,ImageryLayerFeatureInfo:()=>Af,ImageryProvider:()=>fl,ImageryState:()=>ci,Implicit3DTileContent:()=>kC,ImplicitAvailabilityBitstream:()=>GC,ImplicitMetadataView:()=>EC,ImplicitSubdivisionScheme:()=>tr,ImplicitSubtree:()=>b_,ImplicitSubtreeCache:()=>k9,ImplicitSubtreeMetadata:()=>BX,ImplicitTileCoordinates:()=>j_,ImplicitTileset:()=>Q_,IndexDatatype:()=>Me,InfoBox:()=>AM,InfoBoxViewModel:()=>FM,InspectorShared:()=>sd,InstanceAttributeSemantic:()=>ns,InstancingPipelineStage:()=>ZW,InterpolationAlgorithm:()=>X7,InterpolationType:()=>ef,Intersect:()=>zt,IntersectionTests:()=>qn,Intersections2D:()=>Z0,Interval:()=>Ia,InvertClassification:()=>fL,Ion:()=>Ym,IonGeocodeProviderType:()=>E0,IonGeocoderService:()=>VS,IonImageryProvider:()=>d0,IonResource:()=>xd,IonWorldImageryStyle:()=>u0,Iso8601:()=>Ye,JobScheduler:()=>KF,JobType:()=>fa,JsonMetadataTable:()=>ab,JulianDate:()=>ee,KTX2Transcoder:()=>gZ,KeyboardEventModifier:()=>ia,KeyframeNode:()=>bo,KmlCamera:()=>_v,KmlDataSource:()=>XT,KmlLookAt:()=>Tv,KmlTour:()=>Sv,KmlTourFlyTo:()=>Vv,KmlTourWait:()=>Lv,Label:()=>Fy,LabelCollection:()=>Gh,LabelGraphics:()=>Nm,LabelStyle:()=>Yo,LabelVisualizer:()=>F2,LagrangePolynomialApproximation:()=>e2,LeapSecond:()=>Hi,Light:()=>_6,LightingModel:()=>Lh,LightingPipelineStage:()=>QW,LinearApproximation:()=>Qy,LinearSpline:()=>Zy,ManagedArray:()=>Jc,MapMode2D:()=>ed,MapProjection:()=>w7,MapboxImageryProvider:()=>rF,MapboxStyleImageryProvider:()=>T6,Material:()=>zi,MaterialAppearance:()=>so,MaterialPipelineStage:()=>qW,MaterialProperty:()=>qo,Math:()=>w,Matrix2:()=>Ii,Matrix3:()=>te,Matrix4:()=>M,Megatexture:()=>TL,MeshPrimitiveGpmLocal:()=>UI,MetadataClass:()=>Jm,MetadataClassProperty:()=>gh,MetadataComponentType:()=>At,MetadataEntity:()=>Nn,MetadataEnum:()=>dI,MetadataEnumValue:()=>lI,MetadataPicking:()=>JF,MetadataPickingPipelineStage:()=>Ld,MetadataPipelineStage:()=>Fu,MetadataSchema:()=>Cd,MetadataSchemaLoader:()=>MC,MetadataSemantic:()=>y_,MetadataTable:()=>Wu,MetadataTableProperty:()=>HX,MetadataType:()=>lt,MipmapHint:()=>_u,Model:()=>af,Model3DTileContent:()=>Rd,ModelAlphaOptions:()=>bw,ModelAnimation:()=>nW,ModelAnimationChannel:()=>tW,ModelAnimationCollection:()=>iW,ModelAnimationLoop:()=>Al,ModelAnimationState:()=>rf,ModelArticulation:()=>hW,ModelArticulationStage:()=>fW,ModelClippingPlanesPipelineStage:()=>yW,ModelClippingPolygonsPipelineStage:()=>_W,ModelColorPipelineStage:()=>Ey,ModelComponents:()=>Cn,ModelDrawCommand:()=>Gw,ModelDrawCommands:()=>Iw,ModelFeature:()=>oW,ModelFeatureTable:()=>sW,ModelGraphics:()=>Up,ModelLightingOptions:()=>Vw,ModelMatrixUpdateStage:()=>RW,ModelNode:()=>TW,ModelRenderResources:()=>yw,ModelRuntimeNode:()=>EW,ModelRuntimePrimitive:()=>hw,ModelSceneGraph:()=>Ww,ModelSilhouettePipelineStage:()=>_w,ModelSkin:()=>pw,ModelSplitterPipelineStage:()=>Sw,ModelStatistics:()=>ww,ModelType:()=>mr,ModelUtility:()=>qt,ModelVisualizer:()=>A2,Moon:()=>GF,MorphTargetsPipelineStage:()=>ew,MorphWeightSpline:()=>P7,MortonOrder:()=>Oy,Multiple3DTileContent:()=>mP,MultisampleFramebuffer:()=>dE,NavigationHelpButton:()=>DM,NavigationHelpButtonViewModel:()=>OM,NearFarScalar:()=>Nt,NeverTileDiscardPolicy:()=>C6,NodeRenderResources:()=>Cw,NodeStatisticsPipelineStage:()=>GW,NodeTransformationProperty:()=>Yx,OIT:()=>eA,Occluder:()=>EF,OffsetGeometryInstanceAttribute:()=>$i,OpenCageGeocoderService:()=>F7,OpenStreetMapImageryProvider:()=>I0,OrderedGroundPrimitiveCollection:()=>d2,OrientedBoundingBox:()=>Xn,OrthographicFrustum:()=>sn,OrthographicOffCenterFrustum:()=>Oo,Packable:()=>A7,PackableForInterpolation:()=>M7,Particle:()=>DL,ParticleBurst:()=>L6,ParticleEmitter:()=>Z6,ParticleSystem:()=>R6,Pass:()=>Xe,PassState:()=>sc,PathGraphics:()=>Op,PathVisualizer:()=>N2,PeliasGeocoderService:()=>v9,PerInstanceColorAppearance:()=>an,PerformanceDisplay:()=>p0,PerformanceWatchdog:()=>UM,PerformanceWatchdogViewModel:()=>kM,PerspectiveFrustum:()=>Ci,PerspectiveOffCenterFrustum:()=>hl,PickDepth:()=>QF,PickDepthFramebuffer:()=>nA,PickFramebuffer:()=>oA,PickedMetadataInfo:()=>b9,Picking:()=>cA,PickingPipelineStage:()=>tw,PinBuilder:()=>r0,PixelDatatype:()=>Ue,PixelFormat:()=>ke,Plane:()=>cn,PlaneGeometry:()=>h2,PlaneGeometryUpdater:()=>b2,PlaneGraphics:()=>SX,PlaneOutlineGeometry:()=>p2,PntsLoader:()=>vw,PntsParser:()=>I_,PointCloud:()=>Z9,PointCloudEyeDomeLighting:()=>lb,PointCloudShading:()=>Vh,PointCloudStylingPipelineStage:()=>iw,PointGraphics:()=>zx,PointPrimitive:()=>Gs,PointPrimitiveCollection:()=>A1,PointVisualizer:()=>U2,PolygonGeometry:()=>ob,PolygonGeometryLibrary:()=>Dn,PolygonGeometryUpdater:()=>_2,PolygonGraphics:()=>km,PolygonHierarchy:()=>Fa,PolygonOutlineGeometry:()=>x2,PolygonPipeline:()=>ai,Polyline:()=>ku,PolylineArrowMaterialProperty:()=>B1,PolylineCollection:()=>df,PolylineColorAppearance:()=>es,PolylineDashMaterialProperty:()=>H1,PolylineGeometry:()=>e0,PolylineGeometryUpdater:()=>B2,PolylineGlowMaterialProperty:()=>K1,PolylineGraphics:()=>uc,PolylineMaterialAppearance:()=>ua,PolylineOutlineMaterialProperty:()=>jy,PolylinePipeline:()=>vi,PolylineVisualizer:()=>H2,PolylineVolumeGeometry:()=>C2,PolylineVolumeGeometryLibrary:()=>bf,PolylineVolumeGeometryUpdater:()=>R2,PolylineVolumeGraphics:()=>Kx,PolylineVolumeOutlineGeometry:()=>Z2,PositionProperty:()=>Mm,PositionPropertyArray:()=>Bb,PostProcessStage:()=>mo,PostProcessStageCollection:()=>XA,PostProcessStageComposite:()=>nd,PostProcessStageLibrary:()=>$d,PostProcessStageSampleMode:()=>qd,PostProcessStageTextureCache:()=>jT,PpeMetadata:()=>kI,PpeSource:()=>D6,PpeTexture:()=>NI,Primitive:()=>In,PrimitiveCollection:()=>al,PrimitiveLoadPlan:()=>Z_,PrimitiveOutlineGenerator:()=>L_,PrimitiveOutlinePipelineStage:()=>sw,PrimitivePipeline:()=>Wx,PrimitiveRenderResources:()=>Lw,PrimitiveState:()=>Zr,PrimitiveStatisticsPipelineStage:()=>aw,PrimitiveType:()=>ve,ProjectionPicker:()=>NM,ProjectionPickerViewModel:()=>MM,Property:()=>J,PropertyArray:()=>Q1,PropertyAttribute:()=>V_,PropertyAttributeProperty:()=>GI,PropertyBag:()=>Bc,PropertyTable:()=>qc,PropertyTexture:()=>cb,PropertyTextureProperty:()=>RI,ProviderViewModel:()=>ls,Proxy:()=>k7,QuadraticRealPolynomial:()=>Fc,QuadtreeOccluders:()=>pF,QuadtreePrimitive:()=>TF,QuadtreeTile:()=>bF,QuadtreeTileLoadState:()=>$s,QuadtreeTileProvider:()=>G6,QuantizedMeshTerrainData:()=>xS,QuarticRealPolynomial:()=>TZ,Quaternion:()=>Fe,QuaternionSpline:()=>eW,Queue:()=>_y,Ray:()=>bn,Rectangle:()=>de,RectangleCollisionChecker:()=>_T,RectangleGeometry:()=>mT,RectangleGeometryLibrary:()=>Rs,RectangleGeometryUpdater:()=>G2,RectangleGraphics:()=>Um,RectangleOutlineGeometry:()=>U_,ReferenceFrame:()=>Ui,ReferenceProperty:()=>Yb,RenderState:()=>Oe,Renderbuffer:()=>md,RenderbufferFormat:()=>ac,Request:()=>Jo,RequestErrorEvent:()=>ih,RequestScheduler:()=>ic,RequestState:()=>jn,RequestType:()=>us,Resource:()=>Ge,ResourceCache:()=>Ri,ResourceCacheKey:()=>Fl,ResourceCacheStatistics:()=>fI,ResourceLoader:()=>Ji,ResourceLoaderState:()=>xt,Rotation:()=>qu,RuntimeError:()=>le,S2Cell:()=>Qp,SDFSettings:()=>Ys,SampledPositionProperty:()=>xa,SampledProperty:()=>Fd,Sampler:()=>en,ScaledPositionProperty:()=>Mh,Scene:()=>g9,SceneFramebuffer:()=>BT,SceneMode:()=>se,SceneMode2DPipelineStage:()=>cw,SceneModePicker:()=>KM,SceneModePickerViewModel:()=>zM,SceneTransforms:()=>Oi,SceneTransitioner:()=>wA,ScreenSpaceCameraController:()=>AA,ScreenSpaceEventHandler:()=>tu,ScreenSpaceEventType:()=>Vn,SelectedFeatureIdPipelineStage:()=>Wy,SelectionIndicator:()=>HM,SelectionIndicatorViewModel:()=>YM,SensorVolumePortionToDisplay:()=>eV,ShaderBuilder:()=>Lx,ShaderCache:()=>oE,ShaderDestination:()=>xe,ShaderFunction:()=>hE,ShaderProgram:()=>tn,ShaderSource:()=>Be,ShaderStruct:()=>fE,ShadowMap:()=>g0,ShadowMapShader:()=>cp,ShadowMode:()=>Sn,ShadowVolumeAppearance:()=>pd,ShowGeometryInstanceAttribute:()=>Tn,Simon1994PlanetaryPositions:()=>Y0,SimplePolylineGeometry:()=>U7,SingleTileImageryProvider:()=>sF,SkinningPipelineStage:()=>dw,SkyAtmosphere:()=>x9,SkyBox:()=>_9,SpatialNode:()=>f9,Spdcf:()=>AI,SpecularEnvironmentCubeMap:()=>Bm,SphereEmitter:()=>X6,SphereGeometry:()=>O7,SphereOutlineGeometry:()=>Ib,Spherical:()=>t2,Spline:()=>Pi,SplitDirection:()=>Ar,Splitter:()=>LL,StaticGeometryColorBatch:()=>nm,StaticGeometryPerMaterialBatch:()=>im,StaticGroundGeometryColorBatch:()=>gV,StaticGroundGeometryPerMaterialBatch:()=>P2,StaticGroundPolylinePerMaterialBatch:()=>Y2,StaticOutlineGeometryBatch:()=>TV,StencilConstants:()=>kt,StencilFunction:()=>On,StencilOperation:()=>ft,SteppedSpline:()=>$I,Stereographic:()=>pc,StorageType:()=>Ch,StripeMaterialProperty:()=>q1,StripeOrientation:()=>Sf,StructuralMetadata:()=>Ds,StyleCommandsNeeded:()=>sf,StyleExpression:()=>I6,Sun:()=>C9,SunLight:()=>Xp,SunPostProcess:()=>kA,SupportedImageFormats:()=>wI,SvgPathBindingHandler:()=>uM,TaskProcessor:()=>gi,Terrain:()=>sM,TerrainData:()=>Ff,TerrainEncoding:()=>Rc,TerrainFillMesh:()=>sL,TerrainMesh:()=>dm,TerrainOffsetProperty:()=>Jx,TerrainProvider:()=>rs,TerrainQuantization:()=>qs,TerrainState:()=>uo,Texture:()=>Pt,TextureAtlas:()=>Zx,TextureCache:()=>rE,TextureMagnificationFilter:()=>di,TextureManager:()=>c9,TextureMinificationFilter:()=>Jt,TexturePacker:()=>cC,TextureUniform:()=>U6,TextureWrap:()=>xn,TileAvailability:()=>Hf,TileBoundingRegion:()=>Xd,TileBoundingS2Cell:()=>bP,TileBoundingSphere:()=>Wb,TileBoundingVolume:()=>W6,TileCoordinatesImageryProvider:()=>cM,TileDiscardPolicy:()=>P6,TileEdge:()=>_n,TileImagery:()=>iL,TileMapServiceImageryProvider:()=>Rg,TileMetadata:()=>dP,TileOrientedBoundingBox:()=>Ol,TileProviderError:()=>Ro,TileReplacementQueue:()=>yF,TileSelectionResult:()=>Jn,TileState:()=>v6,Tileset3DTileContent:()=>Mw,TilesetMetadata:()=>yP,TilesetPipelineStage:()=>aW,TilingScheme:()=>D7,TimeConstants:()=>Kn,TimeDynamicImagery:()=>FT,TimeDynamicPointCloud:()=>RL,TimeInterval:()=>Zn,TimeIntervalCollection:()=>Yr,TimeIntervalCollectionPositionProperty:()=>Hb,TimeIntervalCollectionProperty:()=>zb,TimeStandard:()=>zn,Timeline:()=>jM,TimelineHighlightRange:()=>JM,TimelineTrack:()=>QM,Tipsify:()=>SZ,ToggleButtonViewModel:()=>Qg,Tonemapper:()=>_0,TrackingReferenceFrame:()=>vp,Transforms:()=>wt,TranslationRotationScale:()=>ey,TranslucentTileClassification:()=>rA,TridiagonalSystemSolver:()=>t1,TrustedServers:()=>JS,TweenCollection:()=>tS,UniformState:()=>cE,UniformType:()=>rS,UrlTemplateImageryProvider:()=>Ba,VERSION:()=>BVt,VRButton:()=>tN,VRButtonViewModel:()=>eN,VRTheWorldTerrainProvider:()=>Y7,VaryingType:()=>O6,Vector3DTileBatch:()=>bh,Vector3DTileClampedPolylines:()=>sP,Vector3DTileContent:()=>cP,Vector3DTileGeometry:()=>Jp,Vector3DTilePoints:()=>$w,Vector3DTilePolygons:()=>eP,Vector3DTilePolylines:()=>A_,Vector3DTilePrimitive:()=>o_,VelocityOrientationProperty:()=>i2,VelocityVectorProperty:()=>Kb,VertexArray:()=>ni,VertexArrayFacade:()=>Ip,VertexAttributeSemantic:()=>pt,VertexFormat:()=>We,VerticalExaggeration:()=>Lr,VerticalExaggerationPipelineStage:()=>mw,VerticalOrigin:()=>Mn,VideoSynchronizer:()=>B7,View:()=>zT,Viewer:()=>mq,ViewportQuad:()=>F6,Visibility:()=>yr,Visualizer:()=>Oj,VoxelBoxShape:()=>lS,VoxelCell:()=>DA,VoxelContent:()=>cS,VoxelCylinderShape:()=>dS,VoxelEllipsoidShape:()=>uS,VoxelInspector:()=>$M,VoxelInspectorViewModel:()=>qM,VoxelMetadataOrder:()=>gm,VoxelPrimitive:()=>Ng,VoxelProvider:()=>M6,VoxelRenderResources:()=>o9,VoxelShape:()=>N6,VoxelShapeType:()=>La,VoxelTraversal:()=>h9,VulkanConstants:()=>H7,WallGeometry:()=>X2,WallGeometryLibrary:()=>fT,WallGeometryUpdater:()=>w2,WallGraphics:()=>Dp,WallOutlineGeometry:()=>W2,WebGLConstants:()=>oe,WebMapServiceImageryProvider:()=>cF,WebMapTileServiceImageryProvider:()=>dF,WebMercatorProjection:()=>Wi,WebMercatorTilingScheme:()=>ss,WindingOrder:()=>qr,WireframeIndexGenerator:()=>l1,WireframePipelineStage:()=>fw,_shadersAcesTonemappingStage:()=>lA,_shadersAdditiveBlend:()=>MA,_shadersAdjustTranslucentFS:()=>kV,_shadersAllMaterialAppearanceFS:()=>_E,_shadersAllMaterialAppearanceVS:()=>TE,_shadersAmbientOcclusionGenerate:()=>dA,_shadersAmbientOcclusionModulate:()=>uA,_shadersAspectRampMaterial:()=>ZE,_shadersAtmosphereCommon:()=>$m,_shadersAtmosphereStageFS:()=>cW,_shadersAtmosphereStageVS:()=>lW,_shadersBasicMaterialAppearanceFS:()=>SE,_shadersBasicMaterialAppearanceVS:()=>CE,_shadersBillboardCollectionFS:()=>Nw,_shadersBillboardCollectionVS:()=>kw,_shadersBlackAndWhite:()=>mA,_shadersBloomComposite:()=>fA,_shadersBrdfLutGeneratorFS:()=>Ev,_shadersBrightPass:()=>NA,_shadersBrightness:()=>hA,_shadersBumpMapMaterial:()=>RE,_shadersCPUStylingStageFS:()=>PW,_shadersCPUStylingStageVS:()=>wW,_shadersCheckerboardMaterial:()=>GE,_shadersCloudCollectionFS:()=>Xv,_shadersCloudCollectionVS:()=>Iv,_shadersCloudNoiseFS:()=>Wv,_shadersCloudNoiseVS:()=>wv,_shadersCompareAndPackTranslucentDepth:()=>Pv,_shadersCompositeOITFS:()=>vv,_shadersCompositeTranslucentClassification:()=>HT,_shadersComputeIrradianceFS:()=>_I,_shadersComputeRadianceMapFS:()=>TI,_shadersContrastBias:()=>pA,_shadersConvolveSpecularMapFS:()=>SI,_shadersConvolveSpecularMapVS:()=>CI,_shadersCustomShaderStageFS:()=>AW,_shadersCustomShaderStageVS:()=>FW,_shadersCzmBuiltins:()=>Sx,_shadersDepthOfField:()=>bA,_shadersDepthPlaneFS:()=>Fv,_shadersDepthPlaneVS:()=>Av,_shadersDepthView:()=>yA,_shadersDepthViewPacked:()=>k6,_shadersDotMaterial:()=>EE,_shadersEdgeDetection:()=>gA,_shadersElevationBandMaterial:()=>XE,_shadersElevationContourMaterial:()=>IE,_shadersElevationRampMaterial:()=>WE,_shadersEllipsoidFS:()=>UV,_shadersEllipsoidSurfaceAppearanceFS:()=>H9,_shadersEllipsoidSurfaceAppearanceVS:()=>z9,_shadersEllipsoidVS:()=>OV,_shadersFXAA:()=>TA,_shadersFXAA3_11:()=>Mv,_shadersFadeMaterial:()=>wE,_shadersFeatureIdStageFS:()=>MW,_shadersFeatureIdStageVS:()=>NW,_shadersFilmicTonemapping:()=>xA,_shadersGaussianBlur1D:()=>vg,_shadersGeometryStageFS:()=>YW,_shadersGeometryStageVS:()=>HW,_shadersGlobeFS:()=>Nv,_shadersGlobeVS:()=>kv,_shadersGridMaterial:()=>PE,_shadersGroundAtmosphere:()=>DV,_shadersHSBToRGB:()=>iG,_shadersHSLToRGB:()=>oG,_shadersImageBasedLightingStageFS:()=>uW,_shadersInstancingStageCommon:()=>SW,_shadersInstancingStageVS:()=>CW,_shadersIntersectBox:()=>QA,_shadersIntersectClippingPlanes:()=>JA,_shadersIntersectCylinder:()=>jA,_shadersIntersectDepth:()=>KA,_shadersIntersectEllipsoid:()=>qA,_shadersIntersectLongitude:()=>xL,_shadersIntersection:()=>oS,_shadersIntersectionUtils:()=>zA,_shadersLegacyInstancingStageVS:()=>VW,_shadersLensFlare:()=>SA,_shadersLightingStageFS:()=>JW,_shadersMaterialStageFS:()=>jW,_shadersMegatexture:()=>i9,_shadersMetadataStageFS:()=>kW,_shadersMetadataStageVS:()=>UW,_shadersModelClippingPlanesStageFS:()=>bW,_shadersModelClippingPolygonsStageFS:()=>xW,_shadersModelClippingPolygonsStageVS:()=>gW,_shadersModelColorStageFS:()=>pW,_shadersModelFS:()=>Xw,_shadersModelSilhouetteStageFS:()=>gw,_shadersModelSilhouetteStageVS:()=>xw,_shadersModelSplitterStageFS:()=>Tw,_shadersModelVS:()=>Ew,_shadersModifiedReinhardTonemapping:()=>CA,_shadersMorphTargetsStageVS:()=>$W,_shadersNightVision:()=>VA,_shadersNormalMapMaterial:()=>vE,_shadersOctree:()=>n9,_shadersPassThrough:()=>td,_shadersPassThroughDepth:()=>Wg,_shadersPbrNeutralTonemapping:()=>_A,_shadersPerInstanceColorAppearanceFS:()=>HE,_shadersPerInstanceColorAppearanceVS:()=>zE,_shadersPerInstanceFlatColorAppearanceFS:()=>Xx,_shadersPerInstanceFlatColorAppearanceVS:()=>KE,_shadersPointCloudEyeDomeLighting:()=>DI,_shadersPointCloudStylingStageVS:()=>nw,_shadersPointPrimitiveCollectionFS:()=>Jy,_shadersPointPrimitiveCollectionVS:()=>BP,_shadersPolygonSignedDistanceFS:()=>gI,_shadersPolylineArrowMaterial:()=>FE,_shadersPolylineColorAppearanceVS:()=>lX,_shadersPolylineCommon:()=>bd,_shadersPolylineDashMaterial:()=>AE,_shadersPolylineFS:()=>Ax,_shadersPolylineGlowMaterial:()=>ME,_shadersPolylineMaterialAppearanceVS:()=>dX,_shadersPolylineOutlineMaterial:()=>NE,_shadersPolylineShadowVolumeFS:()=>rX,_shadersPolylineShadowVolumeMorphFS:()=>sX,_shadersPolylineShadowVolumeMorphVS:()=>aX,_shadersPolylineShadowVolumeVS:()=>cX,_shadersPolylineVS:()=>zw,_shadersPrimitiveOutlineStageFS:()=>rw,_shadersPrimitiveOutlineStageVS:()=>ow,_shadersRGBToHSB:()=>XG,_shadersRGBToHSL:()=>IG,_shadersRGBToXYZ:()=>WG,_shadersReinhardTonemapping:()=>LA,_shadersReprojectWebMercatorFS:()=>Uv,_shadersReprojectWebMercatorVS:()=>Ov,_shadersRimLightingMaterial:()=>kE,_shadersSelectedFeatureIdStageCommon:()=>c1,_shadersShadowVolumeAppearanceFS:()=>hC,_shadersShadowVolumeAppearanceVS:()=>jE,_shadersShadowVolumeFS:()=>Q0,_shadersSilhouette:()=>ZA,_shadersSkinningStageVS:()=>lw,_shadersSkyAtmosphereCommon:()=>BV,_shadersSkyAtmosphereFS:()=>Dv,_shadersSkyAtmosphereVS:()=>Bv,_shadersSkyBoxFS:()=>Yv,_shadersSkyBoxVS:()=>Hv,_shadersSlopeRampMaterial:()=>UE,_shadersStripeMaterial:()=>OE,_shadersSunFS:()=>zv,_shadersSunTextureFS:()=>Kv,_shadersSunVS:()=>Jv,_shadersTexturedMaterialAppearanceFS:()=>VE,_shadersTexturedMaterialAppearanceVS:()=>LE,_shadersVector3DTileClampedPolylinesFS:()=>oP,_shadersVector3DTileClampedPolylinesVS:()=>iP,_shadersVector3DTilePolylinesVS:()=>tP,_shadersVectorTileVS:()=>LC,_shadersVerticalExaggerationStageVS:()=>uw,_shadersViewportQuadFS:()=>Qv,_shadersViewportQuadVS:()=>fx,_shadersVoxelFS:()=>YA,_shadersVoxelUtils:()=>BA,_shadersVoxelVS:()=>HA,_shadersWater:()=>BE,_shadersWaterMaskMaterial:()=>DE,_shadersXYZToRGB:()=>nE,_shadersacesTonemapping:()=>TR,_shadersalphaWeight:()=>SR,_shadersantialias:()=>CR,_shadersapplyHSBShift:()=>VR,_shadersapproximateSphericalCoordinates:()=>LR,_shadersapproximateTanh:()=>ZR,_shadersbackFacing:()=>RR,_shadersbranchFreeTernary:()=>GR,_shaderscascadeColor:()=>ER,_shaderscascadeDistance:()=>XR,_shaderscascadeMatrix:()=>IR,_shaderscascadeWeights:()=>WR,_shadersclipPolygons:()=>wR,_shaderscolumbusViewMorph:()=>PR,_shaderscomputeAtmosphereColor:()=>vR,_shaderscomputeGroundAtmosphereScattering:()=>FR,_shaderscomputePosition:()=>AR,_shaderscomputeScattering:()=>MR,_shadersconvertUvToBox:()=>$A,_shadersconvertUvToCylinder:()=>e9,_shadersconvertUvToEllipsoid:()=>t9,_shaderscosineAndSine:()=>NR,_shadersdecompressTextureCoordinates:()=>kR,_shadersdegreesPerRadian:()=>EZ,_shadersdepthClamp:()=>UR,_shadersdepthRange:()=>XZ,_shadersdepthRangeStruct:()=>fR,_shaderseastNorthUpToEyeCoordinates:()=>OR,_shadersellipsoidContainsPoint:()=>DR,_shadersellipsoidTextureCoordinates:()=>BR,_shadersepsilon1:()=>IZ,_shadersepsilon2:()=>WZ,_shadersepsilon3:()=>wZ,_shadersepsilon4:()=>PZ,_shadersepsilon5:()=>vZ,_shadersepsilon6:()=>FZ,_shadersepsilon7:()=>AZ,_shadersequalsEpsilon:()=>YR,_shaderseyeOffset:()=>HR,_shaderseyeToWindowCoordinates:()=>zR,_shadersfastApproximateAtan:()=>KR,_shadersfog:()=>JR,_shadersgammaCorrect:()=>QR,_shadersgeodeticSurfaceNormal:()=>jR,_shadersgetDefaultMaterial:()=>qR,_shadersgetDynamicAtmosphereLightDirection:()=>$R,_shadersgetLambertDiffuse:()=>eG,_shadersgetSpecular:()=>tG,_shadersgetWaterNoise:()=>nG,_shadershue:()=>rG,_shadersinfinity:()=>MZ,_shadersinverseGamma:()=>sG,_shadersisEmpty:()=>aG,_shadersisFull:()=>cG,_shaderslatitudeToWebMercatorFraction:()=>lG,_shaderslineDistance:()=>uG,_shaderslinearToSrgb:()=>dG,_shadersluminance:()=>mG,_shadersmaterial:()=>hR,_shadersmaterialInput:()=>pR,_shadersmaximumComponent:()=>fG,_shadersmetersPerPixel:()=>hG,_shadersmodelMaterial:()=>bR,_shadersmodelToWindowCoordinates:()=>pG,_shadersmodelVertexOutput:()=>yR,_shadersmultiplyWithColorBalance:()=>bG,_shadersnearFarScalar:()=>yG,_shadersoctDecode:()=>gG,_shadersoneOverPi:()=>NZ,_shadersoneOverTwoPi:()=>kZ,_shaderspackDepth:()=>xG,_shaderspassCesium3DTile:()=>UZ,_shaderspassCesium3DTileClassification:()=>OZ,_shaderspassCesium3DTileClassificationIgnoreShow:()=>DZ,_shaderspassClassification:()=>BZ,_shaderspassCompute:()=>YZ,_shaderspassEnvironment:()=>HZ,_shaderspassGlobe:()=>zZ,_shaderspassOpaque:()=>KZ,_shaderspassOverlay:()=>JZ,_shaderspassTerrainClassification:()=>QZ,_shaderspassTranslucent:()=>jZ,_shaderspassVoxels:()=>qZ,_shaderspbrLighting:()=>_G,_shaderspbrNeutralTonemapping:()=>TG,_shadersphong:()=>SG,_shaderspi:()=>$Z,_shaderspiOverFour:()=>eR,_shaderspiOverSix:()=>tR,_shaderspiOverThree:()=>nR,_shaderspiOverTwo:()=>iR,_shadersplaneDistance:()=>CG,_shaderspointAlongRay:()=>VG,_shadersradiansPerDegree:()=>oR,_shadersray:()=>gR,_shadersrayEllipsoidIntersectionInterval:()=>LG,_shadersraySegment:()=>xR,_shadersraySphereIntersectionInterval:()=>ZG,_shadersreadDepth:()=>RG,_shadersreadNonPerspective:()=>GG,_shadersreverseLogDepth:()=>EG,_shadersround:()=>wG,_shaderssaturation:()=>PG,_shaderssceneMode2D:()=>rR,_shaderssceneMode3D:()=>sR,_shaderssceneModeColumbusView:()=>aR,_shaderssceneModeMorphing:()=>cR,_shadersshadowDepthCompare:()=>vG,_shadersshadowParameters:()=>_R,_shadersshadowVisibility:()=>FG,_shaderssignNotZero:()=>AG,_shaderssolarRadius:()=>lR,_shaderssphericalHarmonics:()=>MG,_shaderssrgbToLinear:()=>NG,_shaderstangentToEyeSpaceMatrix:()=>kG,_shaderstextureCube:()=>UG,_shadersthreePiOver2:()=>dR,_shaderstransformPlane:()=>OG,_shaderstranslateRelativeToEye:()=>DG,_shaderstranslucentPhong:()=>BG,_shaderstranspose:()=>YG,_shaderstwoPi:()=>uR,_shadersunpackClippingExtents:()=>HG,_shadersunpackDepth:()=>zG,_shadersunpackFloat:()=>KG,_shadersunpackUint:()=>JG,_shadersvalueTransform:()=>QG,_shadersvertexLogDepth:()=>jG,_shaderswebMercatorMaxLatitude:()=>mR,_shaderswindowToEyeCoordinates:()=>qG,_shaderswriteDepthClamp:()=>$G,_shaderswriteLogDepth:()=>eE,_shaderswriteNonPerspective:()=>tE,addBuffer:()=>tI,addDefaults:()=>zX,addExtensionsRequired:()=>qX,addExtensionsUsed:()=>wu,addPipelineExtras:()=>my,addToArray:()=>Vs,appendForwardSlash:()=>$L,arrayRemoveDuplicates:()=>xo,barycentricCoordinates:()=>px,binarySearch:()=>Wo,buildModuleUrl:()=>on,buildVoxelDrawCommands:()=>s9,clone:()=>He,combine:()=>St,computeFlyToLocationForRectangle:()=>WT,createBillboardPointCallback:()=>w_,createCommand:()=>Rn,createDefaultImageryProviderViewModels:()=>_M,createDefaultTerrainProviderViewModels:()=>TM,createElevationBandMaterial:()=>s6,createGooglePhotorealistic3DTileset:()=>a6,createGuid:()=>Hn,createMaterialPropertyDescriptor:()=>wo,createOsmBuildingsAsync:()=>c6,createPropertyDescriptor:()=>fe,createRawPropertyDescriptor:()=>Dc,createTangentSpaceDebugPrimitive:()=>l6,createTaskProcessorWorker:()=>B6,createUniform:()=>fZ,createUniformArray:()=>hZ,createWorldBathymetryAsync:()=>I9,createWorldImageryAsync:()=>m0,createWorldTerrainAsync:()=>TS,decodeGoogleEarthEnterpriseData:()=>W9,decodeVectorPolylinePositions:()=>aP,defaultValue:()=>g7,defer:()=>Cl,defined:()=>c,demodernizeShader:()=>iE,deprecationWarning:()=>Cs,destroyObject:()=>he,exportKml:()=>jQ,findAccessorMinMax:()=>m_,findContentMetadata:()=>N_,findGroupMetadata:()=>k_,findTileMetadata:()=>uP,forEachTextureInMaterial:()=>PC,formatError:()=>qh,freezeRenderState:()=>mZ,getAbsoluteUri:()=>th,getAccessorByteStride:()=>Pl,getBaseUri:()=>eZ,getBinaryAccessor:()=>_d,getClipAndStyleCode:()=>V9,getClippingFunction:()=>c0,getComponentReader:()=>nb,getElement:()=>Wn,getExtensionFromUri:()=>ox,getFilenameFromUri:()=>Ob,getImageFromTypedArray:()=>a9,getImagePixels:()=>Rm,getJsonFromTypedArray:()=>er,getMagic:()=>Hm,getMetadataClassProperty:()=>p9,getMetadataProperty:()=>y9,getStringFromTypedArray:()=>Il,getTimestamp:()=>Ti,hasExtension:()=>ri,heightReferenceOnEntityPropertyChanged:()=>Bp,isBitSet:()=>Wc,isBlobUri:()=>rx,isCrossOriginUrl:()=>F0,isDataUri:()=>Sp,isLeapYear:()=>Lm,knockout:()=>Se,knockout_3_5_1:()=>vS,knockout_es5:()=>dM,loadAndExecuteScript:()=>sx,loadCubeMap:()=>mE,loadImageFromTypedArray:()=>l_,loadKTX2:()=>Ll,mergeSort:()=>h0,moveTechniqueRenderStates:()=>jX,moveTechniquesToExtension:()=>$X,numberOfComponentsForType:()=>Sd,objectToQuery:()=>ax,oneTimeWarning:()=>ht,parseBatchTable:()=>mb,parseFeatureMetadataLegacy:()=>II,parseGlb:()=>JX,parseResponseHeaders:()=>tZ,parseStructuralMetadata:()=>XI,pickModel:()=>m1,pointInsideTriangle:()=>N7,preprocess3DTileContent:()=>Gb,processVoxelProperties:()=>r9,queryToObject:()=>ld,readAccessorPacked:()=>nI,removeExtension:()=>f_,removeExtensionsRequired:()=>KX,removeExtensionsUsed:()=>u_,removePipelineExtras:()=>QX,removeUnusedElements:()=>eI,resizeImageToNextPowerOfTwo:()=>py,sampleTerrain:()=>jv,sampleTerrainMostDetailed:()=>IT,scaleToGeodeticSurface:()=>ix,srgbToLinear:()=>LS,subdivideArray:()=>qE,subscribeAndEvaluate:()=>Za,updateAccessorComponentTypes:()=>iI,updateVersion:()=>oI,usesExtension:()=>ur,viewerCesium3DTilesInspectorMixin:()=>fq,viewerCesiumInspectorMixin:()=>hq,viewerDragDropMixin:()=>bq,viewerPerformanceWatchdogMixin:()=>yq,viewerVoxelInspectorMixin:()=>gq,webGLConstantToGlslType:()=>z7,wrapFunction:()=>A9,writeTextToCanvas:()=>v_});var dNo=_(T(),1);var Spo=_(T(),1);var qLt=_(T(),1);var bLt=_(T(),1);var iLt=_(T(),1);var QVt=_(T(),1);function g1e(e){return e!=null}var c=g1e;var $Vt=_(T(),1);function tx(e){this.name="DeveloperError",this.message=e;let t;try{throw new Error}catch(n){t=n.stack}this.stack=t}c(Object.create)&&(tx.prototype=Object.create(Error.prototype),tx.prototype.constructor=tx);tx.prototype.toString=function(){let e=`${this.name}: ${this.message}`;return c(this.stack)&&(e+=` ${this.stack.toString()}`),e};tx.throwInstantiationError=function(){throw new tx("This function defines an interface and should not be called directly.")};var L=tx;var Ts={};Ts.typeOf={};function x1e(e){return`${e} is required, actual value was undefined`}function NS(e,t,n){return`Expected ${n} to be typeof ${t}, actual typeof was ${e}`}Ts.defined=function(e,t){if(!c(t))throw new L(x1e(e))};Ts.typeOf.func=function(e,t){if(typeof t!="function")throw new L(NS(typeof t,"function",e))};Ts.typeOf.string=function(e,t){if(typeof t!="string")throw new L(NS(typeof t,"string",e))};Ts.typeOf.number=function(e,t){if(typeof t!="number")throw new L(NS(typeof t,"number",e))};Ts.typeOf.number.lessThan=function(e,t,n){if(Ts.typeOf.number(e,t),t>=n)throw new L(`Expected ${e} to be less than ${n}, actual value was ${t}`)};Ts.typeOf.number.lessThanOrEquals=function(e,t,n){if(Ts.typeOf.number(e,t),t>n)throw new L(`Expected ${e} to be less than or equal to ${n}, actual value was ${t}`)};Ts.typeOf.number.greaterThan=function(e,t,n){if(Ts.typeOf.number(e,t),t<=n)throw new L(`Expected ${e} to be greater than ${n}, actual value was ${t}`)};Ts.typeOf.number.greaterThanOrEquals=function(e,t,n){if(Ts.typeOf.number(e,t),t0?1:-1};ct.signNotZero=function(e){return e<0?-1:1};ct.toSNorm=function(e,t){return t=t??255,Math.round((ct.clamp(e,-1,1)*.5+.5)*t)};ct.fromSNorm=function(e,t){return t=t??255,ct.clamp(e,0,t)/t*2-1};ct.normalize=function(e,t,n){return n=Math.max(n-t,0),n===0?0:ct.clamp((e-t)/n,0,1)};ct.sinh=Math.sinh??function(t){return(Math.exp(t)-Math.exp(-t))/2};ct.cosh=Math.cosh??function(t){return(Math.exp(t)+Math.exp(-t))/2};ct.lerp=function(e,t,n){return(1-n)*e+n*t};ct.PI=Math.PI;ct.ONE_OVER_PI=1/Math.PI;ct.PI_OVER_TWO=Math.PI/2;ct.PI_OVER_THREE=Math.PI/3;ct.PI_OVER_FOUR=Math.PI/4;ct.PI_OVER_SIX=Math.PI/6;ct.THREE_PI_OVER_TWO=3*Math.PI/2;ct.TWO_PI=2*Math.PI;ct.ONE_OVER_TWO_PI=1/(2*Math.PI);ct.RADIANS_PER_DEGREE=Math.PI/180;ct.DEGREES_PER_RADIAN=180/Math.PI;ct.RADIANS_PER_ARCSECOND=ct.RADIANS_PER_DEGREE/3600;ct.toRadians=function(e){if(!c(e))throw new L("degrees is required.");return e*ct.RADIANS_PER_DEGREE};ct.toDegrees=function(e){if(!c(e))throw new L("radians is required.");return e*ct.DEGREES_PER_RADIAN};ct.convertLongitudeRange=function(e){if(!c(e))throw new L("angle is required.");let t=ct.TWO_PI,n=e-Math.floor(e/t)*t;return n<-Math.PI?n+t:n>=Math.PI?n-t:n};ct.clampToLatitudeRange=function(e){if(!c(e))throw new L("angle is required.");return ct.clamp(e,-1*ct.PI_OVER_TWO,ct.PI_OVER_TWO)};ct.negativePiToPi=function(e){if(!c(e))throw new L("angle is required.");return e>=-ct.PI&&e<=ct.PI?e:ct.zeroToTwoPi(e+ct.PI)-ct.PI};ct.zeroToTwoPi=function(e){if(!c(e))throw new L("angle is required.");if(e>=0&&e<=ct.TWO_PI)return e;let t=ct.mod(e,ct.TWO_PI);return Math.abs(t)ct.EPSILON14?ct.TWO_PI:t};ct.mod=function(e,t){if(!c(e))throw new L("m is required.");if(!c(t))throw new L("n is required.");if(t===0)throw new L("divisor cannot be 0.");return ct.sign(e)===ct.sign(t)&&Math.abs(e)n};ct.greaterThanOrEquals=function(e,t,n){if(!c(e))throw new L("first is required.");if(!c(t))throw new L("second is required.");if(!c(n))throw new L("absoluteEpsilon is required.");return e-t>-n};var rN=[1];ct.factorial=function(e){if(typeof e!="number"||e<0)throw new L("A number greater than or equal to 0 is required.");let t=rN.length;if(e>=t){let n=rN[t-1];for(let i=t;i<=e;i++){let o=n*i;rN.push(o),n=o}}return rN[e]};ct.incrementWrap=function(e,t,n){if(n=n??0,!c(e))throw new L("n is required.");if(t<=n)throw new L("maximumValue must be greater than minimumValue.");return++e,e>t&&(e=n),e};ct.isPowerOfTwo=function(e){if(typeof e!="number"||e<0||e>4294967295)throw new L("A number between 0 and (2^32)-1 is required.");return e!==0&&(e&e-1)===0};ct.nextPowerOfTwo=function(e){if(typeof e!="number"||e<0||e>2147483648)throw new L("A number between 0 and 2^31 is required.");return--e,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e,e};ct.previousPowerOfTwo=function(e){if(typeof e!="number"||e<0||e>4294967295)throw new L("A number between 0 and (2^32)-1 is required.");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};ct.clamp=function(e,t,n){return C.typeOf.number("value",e),C.typeOf.number("min",t),C.typeOf.number("max",n),en?n:e};var Cq=new JB.default;ct.setRandomNumberSeed=function(e){if(!c(e))throw new L("seed is required.");Cq=new JB.default(e)};ct.nextRandomNumber=function(){return Cq.random()};ct.randomBetween=function(e,t){return ct.nextRandomNumber()*(t-e)+e};ct.acosClamped=function(e){if(!c(e))throw new L("value is required.");return Math.acos(ct.clamp(e,-1,1))};ct.asinClamped=function(e){if(!c(e))throw new L("value is required.");return Math.asin(ct.clamp(e,-1,1))};ct.chordLength=function(e,t){if(!c(e))throw new L("angle is required.");if(!c(t))throw new L("radius is required.");return 2*t*Math.sin(e*.5)};ct.logBase=function(e,t){if(!c(e))throw new L("number is required.");if(!c(t))throw new L("base is required.");return Math.log(e)/Math.log(t)};ct.cbrt=Math.cbrt??function(t){let n=Math.pow(Math.abs(t),.3333333333333333);return t<0?-n:n};ct.log2=Math.log2??function(t){return Math.log(t)*Math.LOG2E};ct.fog=function(e,t){let n=e*t;return 1-Math.exp(-(n*n))};ct.fastApproximateAtan=function(e){return C.typeOf.number("x",e),e*(-.1784*Math.abs(e)-.0663*e*e+1.0301)};ct.fastApproximateAtan2=function(e,t){C.typeOf.number("x",e),C.typeOf.number("y",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;if(isNaN(r))throw new L("either x or y must be nonzero");return i=ct.fastApproximateAtan(r),i=Math.abs(t)>Math.abs(e)?ct.PI_OVER_TWO-i:i,i=e<0?ct.PI-i:i,i=t<0?-i:i,i};var w=ct;function tt(e,t,n){this.x=e??0,this.y=t??0,this.z=n??0}tt.fromSpherical=function(e,t){C.typeOf.object("spherical",e),c(t)||(t=new tt);let n=e.clock,i=e.cone,o=e.magnitude??1,r=o*Math.sin(i);return t.x=r*Math.cos(n),t.y=r*Math.sin(n),t.z=o*Math.cos(i),t};tt.fromElements=function(e,t,n,i){return c(i)?(i.x=e,i.y=t,i.z=n,i):new tt(e,t,n)};tt.clone=function(e,t){if(c(e))return c(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t):new tt(e.x,e.y,e.z)};tt.fromCartesian4=tt.clone;tt.packedLength=3;tt.pack=function(e,t,n){return C.typeOf.object("value",e),C.defined("array",t),n=n??0,t[n++]=e.x,t[n++]=e.y,t[n]=e.z,t};tt.unpack=function(e,t,n){return C.defined("array",e),t=t??0,c(n)||(n=new tt),n.x=e[t++],n.y=e[t++],n.z=e[t],n};tt.packArray=function(e,t){C.defined("array",e);let n=e.length,i=n*3;if(!c(t))t=new Array(i);else{if(!Array.isArray(t)&&t.length!==i)throw new L("If result is a typed array, it must have exactly array.length * 3 elements");t.length!==i&&(t.length=i)}for(let o=0;oi&&(o=d,i=u)}let r=1,s=0,a=e3[o],l=t3[o];if(Math.abs(e[it.getElementIndex(l,a)])>n){let d=e[it.getElementIndex(l,l)],u=e[it.getElementIndex(a,a)],f=e[it.getElementIndex(l,a)],p=(d-u)/2/f,y;p<0?y=-1/(-p+Math.sqrt(1+p*p)):y=1/(p+Math.sqrt(1+p*p)),r=1/Math.sqrt(1+y*y),s=y*r}return t=it.clone(it.IDENTITY,t),t[it.getElementIndex(a,a)]=t[it.getElementIndex(l,l)]=r,t[it.getElementIndex(l,a)]=s,t[it.getElementIndex(a,l)]=-s,t}var lN=new it,Gq=new it;it.computeEigenDecomposition=function(e,t){C.typeOf.object("matrix",e);let n=w.EPSILON20,i=10,o=0,r=0;c(t)||(t={});let s=t.unitary=it.clone(it.IDENTITY,t.unitary),a=t.diagonal=it.clone(e,t.diagonal),l=n*G1e(a);for(;rl;)X1e(a,lN),it.transpose(lN,Gq),it.multiply(a,lN,a),it.multiply(Gq,a,a),it.multiply(s,lN,s),++o>2&&(++r,o=0);return t};it.abs=function(e,t){return C.typeOf.object("matrix",e),C.typeOf.object("result",t),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};it.determinant=function(e){C.typeOf.object("matrix",e);let t=e[0],n=e[3],i=e[6],o=e[1],r=e[4],s=e[7],a=e[2],l=e[5],d=e[8];return t*(r*d-l*s)+o*(l*i-n*d)+a*(n*s-r*i)};it.inverse=function(e,t){C.typeOf.object("matrix",e),C.typeOf.object("result",t);let n=e[0],i=e[1],o=e[2],r=e[3],s=e[4],a=e[5],l=e[6],d=e[7],u=e[8],f=it.determinant(e);if(Math.abs(f)<=w.EPSILON15)throw new L("matrix is not invertible");t[0]=s*u-d*a,t[1]=d*o-i*u,t[2]=i*a-s*o,t[3]=l*a-r*u,t[4]=n*u-l*o,t[5]=r*o-n*a,t[6]=r*d-l*s,t[7]=l*i-n*d,t[8]=n*s-r*i;let p=1/f;return it.multiplyByScalar(t,p,t)};var I1e=new it;it.inverseTranspose=function(e,t){return C.typeOf.object("matrix",e),C.typeOf.object("result",t),it.inverse(it.transpose(e,I1e),t)};it.equals=function(e,t){return e===t||c(e)&&c(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]};it.equalsEpsilon=function(e,t,n){return n=n??0,e===t||c(e)&&c(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};it.IDENTITY=Object.freeze(new it(1,0,0,0,1,0,0,0,1));it.ZERO=Object.freeze(new it(0,0,0,0,0,0,0,0,0));it.COLUMN0ROW0=0;it.COLUMN0ROW1=1;it.COLUMN0ROW2=2;it.COLUMN1ROW0=3;it.COLUMN1ROW1=4;it.COLUMN1ROW2=5;it.COLUMN2ROW0=6;it.COLUMN2ROW1=7;it.COLUMN2ROW2=8;Object.defineProperties(it.prototype,{length:{get:function(){return it.packedLength}}});it.prototype.clone=function(e){return it.clone(this,e)};it.prototype.equals=function(e){return it.equals(this,e)};it.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]};it.prototype.equalsEpsilon=function(e,t){return it.equalsEpsilon(this,e,t)};it.prototype.toString=function(){return`(${this[0]}, ${this[3]}, ${this[6]}) (${this[1]}, ${this[4]}, ${this[7]}) (${this[2]}, ${this[5]}, ${this[8]})`};var te=it;var PLt=_(T(),1);function QL(e){this.name="RuntimeError",this.message=e;let t;try{throw new Error}catch(n){t=n.stack}this.stack=t}c(Object.create)&&(QL.prototype=Object.create(Error.prototype),QL.prototype.constructor=QL);QL.prototype.toString=function(){let e=`${this.name}: ${this.message}`;return c(this.stack)&&(e+=` ${this.stack.toString()}`),e};var le=QL;function nt(e,t,n,i,o,r,s,a,l,d,u,f,p,y,h,g){this[0]=e??0,this[1]=o??0,this[2]=l??0,this[3]=p??0,this[4]=t??0,this[5]=r??0,this[6]=d??0,this[7]=y??0,this[8]=n??0,this[9]=s??0,this[10]=u??0,this[11]=h??0,this[12]=i??0,this[13]=a??0,this[14]=f??0,this[15]=g??0}nt.packedLength=16;nt.pack=function(e,t,n){return C.typeOf.object("value",e),C.defined("array",t),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};nt.unpack=function(e,t,n){return C.defined("array",e),t=t??0,c(n)||(n=new nt),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};nt.packArray=function(e,t){C.defined("array",e);let n=e.length,i=n*16;if(!c(t))t=new Array(i);else{if(!Array.isArray(t)&&t.length!==i)throw new L("If result is a typed array, it must have exactly array.length * 16 elements");t.length!==i&&(t.length=i)}for(let o=0;o=w.SIXTY_FOUR_KILOBYTES?new Uint32Array(t):new Uint16Array(t)};Fs.createTypedArrayFromArrayBuffer=function(e,t,n,i){if(!c(e))throw new L("numberOfVertices is required.");if(!c(t))throw new L("sourceArray is required.");if(!c(n))throw new L("byteOffset is required.");return e>=w.SIXTY_FOUR_KILOBYTES?new Uint32Array(t,n,i):new Uint16Array(t,n,i)};Fs.fromTypedArray=function(e){if(e instanceof Uint8Array)return Fs.UNSIGNED_BYTE;if(e instanceof Uint16Array)return Fs.UNSIGNED_SHORT;if(e instanceof Uint32Array)return Fs.UNSIGNED_INT;throw new L("array must be a Uint8Array, Uint16Array, or Uint32Array.")};var Me=Object.freeze(Fs);var mZt=_(T(),1);var dN={STREAM_DRAW:oe.STREAM_DRAW,STATIC_DRAW:oe.STATIC_DRAW,DYNAMIC_DRAW:oe.DYNAMIC_DRAW,validate:function(e){return e===dN.STREAM_DRAW||e===dN.STATIC_DRAW||e===dN.DYNAMIC_DRAW}},Ne=Object.freeze(dN);function pu(e){if(e=e??z.EMPTY_OBJECT,C.defined("options.context",e.context),!c(e.typedArray)&&!c(e.sizeInBytes))throw new L("Either options.sizeInBytes or options.typedArray is required.");if(c(e.typedArray)&&c(e.sizeInBytes))throw new L("Cannot pass in both options.sizeInBytes and options.typedArray.");if(c(e.typedArray)&&(C.typeOf.object("options.typedArray",e.typedArray),C.typeOf.number("options.typedArray.byteLength",e.typedArray.byteLength)),!Ne.validate(e.usage))throw new L("usage is invalid.");let t=e.context._gl,n=e.bufferTarget,i=e.typedArray,o=e.sizeInBytes,r=e.usage,s=c(i);s&&(o=i.byteLength),C.typeOf.number.greaterThan("sizeInBytes",o,0);let a=t.createBuffer();t.bindBuffer(n,a),t.bufferData(n,s?i:o,r),t.bindBuffer(n,null),this._id=Hn(),this._gl=t,this._webgl2=e.context._webgl2,this._bufferTarget=n,this._sizeInBytes=o,this._usage=r,this._buffer=a,this.vertexArrayDestroyable=!0}pu.createVertexBuffer=function(e){return C.defined("options.context",e.context),new pu({context:e.context,bufferTarget:oe.ARRAY_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage})};pu.createIndexBuffer=function(e){if(C.defined("options.context",e.context),!Me.validate(e.indexDatatype))throw new L("Invalid indexDatatype.");if(e.indexDatatype===Me.UNSIGNED_INT&&!e.context.elementIndexUint)throw new L("IndexDatatype.UNSIGNED_INT requires OES_element_index_uint, which is not supported on this system. Check context.elementIndexUint.");let t=e.context,n=e.indexDatatype,i=Me.getSizeInBytes(n),o=new pu({context:t,bufferTarget:oe.ELEMENT_ARRAY_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage}),r=o.sizeInBytes/i;return Object.defineProperties(o,{indexDatatype:{get:function(){return n}},bytesPerIndex:{get:function(){return i}},numberOfIndices:{get:function(){return r}}}),o};Object.defineProperties(pu.prototype,{sizeInBytes:{get:function(){return this._sizeInBytes}},usage:{get:function(){return this._usage}}});pu.prototype._getBuffer=function(){return this._buffer};pu.prototype.copyFromArrayView=function(e,t){t=t??0,C.defined("arrayView",e),C.typeOf.number.lessThanOrEquals("offsetInBytes + arrayView.byteLength",t+e.byteLength,this._sizeInBytes);let n=this._gl,i=this._bufferTarget;n.bindBuffer(i,this._buffer),n.bufferSubData(i,t,e),n.bindBuffer(i,null)};pu.prototype.copyFromBuffer=function(e,t,n,i){if(!this._webgl2)throw new L("A WebGL 2 context is required.");if(!c(e))throw new L("readBuffer must be defined.");if(!c(i)||i<=0)throw new L("sizeInBytes must be defined and be greater than zero.");if(!c(t)||t<0||t+i>e._sizeInBytes)throw new L("readOffset must be greater than or equal to zero and readOffset + sizeInBytes must be less than of equal to readBuffer.sizeInBytes.");if(!c(n)||n<0||n+i>this._sizeInBytes)throw new L("writeOffset must be greater than or equal to zero and writeOffset + sizeInBytes must be less than of equal to this.sizeInBytes.");if(this._buffer===e._buffer&&(n>=t&&nn&&ts)throw new L("destinationOffset must be greater than zero and less than the arrayView length.");if(n+o>s)throw new L("destinationOffset + length must be less than or equal to the arrayViewLength.");if(t<0||t>this._sizeInBytes)throw new L("sourceOffset must be greater than zero and less than the buffers size.");if(t+o*r>this._sizeInBytes)throw new L("sourceOffset + length must be less than the buffers size.");let a=this._gl,l=oe.COPY_READ_BUFFER;a.bindBuffer(l,this._buffer),a.getBufferSubData(l,t,e,n,i),a.bindBuffer(l,null)};pu.prototype.isDestroyed=function(){return!1};pu.prototype.destroy=function(){return this._gl.deleteBuffer(this._buffer),he(this)};var _t=pu;var DZt=_(T(),1);var NZt=_(T(),1);var WZt=_(T(),1);var ZZt=_(T(),1);var w0,Pr={requestFullscreen:void 0,exitFullscreen:void 0,fullscreenEnabled:void 0,fullscreenElement:void 0,fullscreenchange:void 0,fullscreenerror:void 0},Sl={};Object.defineProperties(Sl,{element:{get:function(){if(Sl.supportsFullscreen())return document[Pr.fullscreenElement]}},changeEventName:{get:function(){if(Sl.supportsFullscreen())return Pr.fullscreenchange}},errorEventName:{get:function(){if(Sl.supportsFullscreen())return Pr.fullscreenerror}},enabled:{get:function(){if(Sl.supportsFullscreen())return document[Pr.fullscreenEnabled]}},fullscreen:{get:function(){if(Sl.supportsFullscreen())return Sl.element!==null}}});Sl.supportsFullscreen=function(){if(c(w0))return w0;w0=!1;let e=document.body;if(typeof e.requestFullscreen=="function")return Pr.requestFullscreen="requestFullscreen",Pr.exitFullscreen="exitFullscreen",Pr.fullscreenEnabled="fullscreenEnabled",Pr.fullscreenElement="fullscreenElement",Pr.fullscreenchange="fullscreenchange",Pr.fullscreenerror="fullscreenerror",w0=!0,w0;let t=["webkit","moz","o","ms","khtml"],n;for(let i=0,o=t.length;i{let t=new Image;t.onload=function(){ec._result=t.width>0&&t.height>0,e(ec._result)},t.onerror=function(){ec._result=!1,e(ec._result)},t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"})),ec._promise};Object.defineProperties(ec,{initialized:{get:function(){return c(ec._result)}}});var DS=[];typeof ArrayBuffer<"u"&&(DS.push(Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array),typeof Uint8ClampedArray<"u"&&DS.push(Uint8ClampedArray),typeof Uint8ClampedArray<"u"&&DS.push(Uint8ClampedArray),typeof BigInt64Array<"u"&&DS.push(BigInt64Array),typeof BigUint64Array<"u"&&DS.push(BigUint64Array));var bu={isChrome:c3,chromeVersion:z1e,isSafari:Wq,safariVersion:K1e,isWebkit:wq,webkitVersion:J1e,isInternetExplorer:Pq,internetExplorerVersion:Q1e,isEdge:yN,edgeVersion:j1e,isFirefox:gN,firefoxVersion:eVe,isWindows:q1e,isIPadOrIOS:$1e,hardwareConcurrency:tc.hardwareConcurrency??3,supportsPointerEvents:tVe,supportsImageRenderingPixelated:Aq,supportsWebP:ec,imageRenderingValue:nVe,typedArrayTypes:DS};bu.supportsBasis=function(e){return bu.supportsWebAssembly()&&e.context.supportsBasis};bu.supportsFullscreen=function(){return _r.supportsFullscreen()};bu.supportsTypedArrays=function(){return typeof ArrayBuffer<"u"};bu.supportsBigInt64Array=function(){return typeof BigInt64Array<"u"};bu.supportsBigUint64Array=function(){return typeof BigUint64Array<"u"};bu.supportsBigInt=function(){return typeof BigInt<"u"};bu.supportsWebWorkers=function(){return typeof Worker<"u"};bu.supportsWebAssembly=function(){return typeof WebAssembly<"u"};bu.supportsWebgl2=function(e){return C.defined("scene",e),e.context.webgl2};bu.supportsEsmWebWorkers=function(){return!gN()||parseInt(l3)>=114};var Ot=bu;function d3(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 C.typeOf.object("cartesian",e),c(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),c(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 C.typeOf.object("color",e),C.typeOf.number("alpha",t),c(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 u3,m3,Tp;Ot.supportsTypedArrays()&&(u3=new ArrayBuffer(4),m3=new Uint32Array(u3),Tp=new Uint8Array(u3));ae.fromRgba=function(e,t){return m3[0]=e,ae.fromBytes(Tp[0],Tp[1],Tp[2],Tp[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 l;n<.5?l=n*(1+t):l=n+t-n*t;let d=2*n-l;r=d3(d,l,e+1/3),s=d3(d,l,e),a=d3(d,l,e-1/3)}return c(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??z.EMPTY_OBJECT;let n=e.red;if(!c(n)){let s=e.minimumRed??0,a=e.maximumRed??1;C.typeOf.number.lessThanOrEquals("minimumRed",s,a),n=s+w.nextRandomNumber()*(a-s)}let i=e.green;if(!c(i)){let s=e.minimumGreen??0,a=e.maximumGreen??1;C.typeOf.number.lessThanOrEquals("minimumGreen",s,a),i=s+w.nextRandomNumber()*(a-s)}let o=e.blue;if(!c(o)){let s=e.minimumBlue??0,a=e.maximumBlue??1;C.typeOf.number.lessThanOrEquals("minimumBlue",s,a),o=s+w.nextRandomNumber()*(a-s)}let r=e.alpha;if(!c(r)){let s=e.minimumAlpha??0,a=e.maximumAlpha??1;C.typeOf.number.lessThanOrEquals("minimumAlpha",s,a),r=s+w.nextRandomNumber()*(a-s)}return c(t)?(t.red=n,t.green=i,t.blue=o,t.alpha=r,t):new ae(n,i,o,r)};var iVe=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,oVe=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,rVe=/^rgba?\s*\(\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i,sVe=/^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){C.typeOf.string("color",e),c(t)||(t=new ae),e=e.trim();let n=ae[e.toUpperCase()];if(c(n))return ae.clone(n,t),t;let i=iVe.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=oVe.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=rVe.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=sVe.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 C.typeOf.object("value",e),C.defined("array",t),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 C.defined("array",e),t=t??0,c(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(c(e))return c(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||c(e)&&c(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||c(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 c(e)?(e[0]=t,e[1]=n,e[2]=i,e[3]=o,e):[t,n,i,o]};ae.prototype.toRgba=function(){return Tp[0]=ae.floatToByte(this.red),Tp[1]=ae.floatToByte(this.green),Tp[2]=ae.floatToByte(this.blue),Tp[3]=ae.floatToByte(this.alpha),m3[0]};ae.prototype.brighten=function(e,t){return C.typeOf.number("magnitude",e),C.typeOf.number.greaterThanOrEquals("magnitude",e,0),C.typeOf.object("result",t),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 C.typeOf.number("magnitude",e),C.typeOf.number.greaterThanOrEquals("magnitude",e,0),C.typeOf.object("result",t),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 C.typeOf.object("left",e),C.typeOf.object("right",t),C.typeOf.object("result",n),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 C.typeOf.object("left",e),C.typeOf.object("right",t),C.typeOf.object("result",n),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 C.typeOf.object("left",e),C.typeOf.object("right",t),C.typeOf.object("result",n),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 C.typeOf.object("left",e),C.typeOf.object("right",t),C.typeOf.object("result",n),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 C.typeOf.object("left",e),C.typeOf.object("right",t),C.typeOf.object("result",n),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 C.typeOf.object("start",e),C.typeOf.object("end",t),C.typeOf.number("t",n),C.typeOf.object("result",i),i.red=w.lerp(e.red,t.red,n),i.green=w.lerp(e.green,t.green,n),i.blue=w.lerp(e.blue,t.blue,n),i.alpha=w.lerp(e.alpha,t.alpha,n),i};ae.multiplyByScalar=function(e,t,n){return C.typeOf.object("color",e),C.typeOf.number("scalar",t),C.typeOf.object("result",n),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 C.typeOf.object("color",e),C.typeOf.number("scalar",t),C.typeOf.object("result",n),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 Y=ae;function xN(e){e=e??z.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}xN.ALL=Object.freeze(new xN({color:new Y(0,0,0,0),depth:1,stencil:0}));xN.prototype.execute=function(e,t){e.clear(this,t)};var ti=xN;var JZt=_(T(),1);var YZt=_(T(),1),aVe={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,OVERLAY:10,NUMBER_OF_PASSES:11},Xe=Object.freeze(aVe);function Mq(e){e=e??z.EMPTY_OBJECT,this.vertexArray=e.vertexArray,this.fragmentShaderSource=e.fragmentShaderSource,this.shaderProgram=e.shaderProgram,this.uniformMap=e.uniformMap,this.outputTexture=e.outputTexture,this.preExecute=e.preExecute,this.postExecute=e.postExecute,this.canceled=e.canceled,this.persists=e.persists??!1,this.pass=Xe.COMPUTE,this.owner=e.owner}Mq.prototype.execute=function(e){e.execute(this)};var vc=Mq;var Awt=_(T(),1);var DIt=_(T(),1);var tRt=_(T(),1);function Mt(e,t){this.x=e??0,this.y=t??0}Mt.fromElements=function(e,t,n){return c(n)?(n.x=e,n.y=t,n):new Mt(e,t)};Mt.clone=function(e,t){if(c(e))return c(t)?(t.x=e.x,t.y=e.y,t):new Mt(e.x,e.y)};Mt.fromCartesian3=Mt.clone;Mt.fromCartesian4=Mt.clone;Mt.packedLength=2;Mt.pack=function(e,t,n){return C.typeOf.object("value",e),C.defined("array",t),n=n??0,t[n++]=e.x,t[n]=e.y,t};Mt.unpack=function(e,t,n){return C.defined("array",e),t=t??0,c(n)||(n=new Mt),n.x=e[t++],n.y=e[t],n};Mt.packArray=function(e,t){C.defined("array",e);let n=e.length,i=n*2;if(!c(t))t=new Array(i);else{if(!Array.isArray(t)&&t.length!==i)throw new L("If result is a typed array, it must have exactly array.length * 2 elements");t.length!==i&&(t.length=i)}for(let o=0;ow.EPSILON12);return c(o)?(o.x=r*F,o.y=s*N,o.z=a*b,o):new m(r*F,s*N,a*b)}var ix=uVe;function Mo(e,t,n){this.longitude=e??0,this.latitude=t??0,this.height=n??0}Mo.fromRadians=function(e,t,n,i){return C.typeOf.number("longitude",e),C.typeOf.number("latitude",t),n=n??0,c(i)?(i.longitude=e,i.latitude=t,i.height=n,i):new Mo(e,t,n)};Mo.fromDegrees=function(e,t,n,i){return C.typeOf.number("longitude",e),C.typeOf.number("latitude",t),e=w.toRadians(e),t=w.toRadians(t),Mo.fromRadians(e,t,n,i)};var mVe=new m,fVe=new m,hVe=new m;Mo._ellipsoidOneOverRadii=new m(1/6378137,1/6378137,1/6356752314245179e-9);Mo._ellipsoidOneOverRadiiSquared=new m(1/(6378137*6378137),1/(6378137*6378137),1/(6356752314245179e-9*6356752314245179e-9));Mo._ellipsoidCenterToleranceSquared=w.EPSILON1;Mo.fromCartesian=function(e,t,n){let i=c(t)?t.oneOverRadii:Mo._ellipsoidOneOverRadii,o=c(t)?t.oneOverRadiiSquared:Mo._ellipsoidOneOverRadiiSquared,r=c(t)?t._centerToleranceSquared:Mo._ellipsoidCenterToleranceSquared,s=ix(e,i,o,r,fVe);if(!c(s))return;let a=m.multiplyComponents(s,o,mVe);a=m.normalize(a,a);let l=m.subtract(e,s,hVe),d=Math.atan2(a.y,a.x),u=Math.asin(a.z),f=w.sign(m.dot(l,e))*m.magnitude(l);return c(n)?(n.longitude=d,n.latitude=u,n.height=f,n):new Mo(d,u,f)};Mo.toCartesian=function(e,t,n){return C.defined("cartographic",e),m.fromRadians(e.longitude,e.latitude,e.height,t,n)};Mo.clone=function(e,t){if(c(e))return c(t)?(t.longitude=e.longitude,t.latitude=e.latitude,t.height=e.height,t):new Mo(e.longitude,e.latitude,e.height)};Mo.equals=function(e,t){return e===t||c(e)&&c(t)&&e.longitude===t.longitude&&e.latitude===t.latitude&&e.height===t.height};Mo.equalsEpsilon=function(e,t,n){return n=n??0,e===t||c(e)&&c(t)&&Math.abs(e.longitude-t.longitude)<=n&&Math.abs(e.latitude-t.latitude)<=n&&Math.abs(e.height-t.height)<=n};Mo.ZERO=Object.freeze(new Mo(0,0,0));Mo.prototype.clone=function(e){return Mo.clone(this,e)};Mo.prototype.equals=function(e){return Mo.equals(this,e)};Mo.prototype.equalsEpsilon=function(e,t){return Mo.equalsEpsilon(this,e,t)};Mo.prototype.toString=function(){return`(${this.longitude}, ${this.latitude}, ${this.height})`};var pe=Mo;var VRt=_(T(),1);function Dq(e,t,n,i){t=t??0,n=n??0,i=i??0,C.typeOf.number.greaterThanOrEquals("x",t,0),C.typeOf.number.greaterThanOrEquals("y",n,0),C.typeOf.number.greaterThanOrEquals("z",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=w.EPSILON1,e._radiiSquared.z!==0&&(e._squaredXOverSquaredZ=e._radiiSquared.x/e._radiiSquared.z)}function yi(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,Dq(this,e,t,n)}Object.defineProperties(yi.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}}});yi.clone=function(e,t){if(!c(e))return;let n=e._radii;return c(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 yi(n.x,n.y,n.z)};yi.fromCartesian3=function(e,t){return c(t)||(t=new yi),c(e)&&Dq(t,e.x,e.y,e.z),t};yi.WGS84=Object.freeze(new yi(6378137,6378137,6356752314245179e-9));yi.UNIT_SPHERE=Object.freeze(new yi(1,1,1));yi.MOON=Object.freeze(new yi(w.LUNAR_RADIUS,w.LUNAR_RADIUS,w.LUNAR_RADIUS));yi._default=yi.WGS84;Object.defineProperties(yi,{default:{get:function(){return yi._default},set:function(e){C.typeOf.object("value",e),yi._default=e,m._ellipsoidRadiiSquared=e.radiiSquared,pe._ellipsoidOneOverRadii=e.oneOverRadii,pe._ellipsoidOneOverRadiiSquared=e.oneOverRadiiSquared,pe._ellipsoidCenterToleranceSquared=e._centerToleranceSquared}}});yi.prototype.clone=function(e){return yi.clone(this,e)};yi.packedLength=m.packedLength;yi.pack=function(e,t,n){return C.typeOf.object("value",e),C.defined("array",t),n=n??0,m.pack(e._radii,t,n),t};yi.unpack=function(e,t,n){C.defined("array",e),t=t??0;let i=m.unpack(e,t);return yi.fromCartesian3(i,n)};yi.prototype.geocentricSurfaceNormal=m.normalize;yi.prototype.geodeticSurfaceNormalCartographic=function(e,t){C.typeOf.object("cartographic",e);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 c(t)||(t=new m),t.x=r,t.y=s,t.z=a,m.normalize(t,t)};yi.prototype.geodeticSurfaceNormal=function(e,t){if(C.typeOf.object("cartesian",e),isNaN(e.x)||isNaN(e.y)||isNaN(e.z))throw new L("cartesian has a NaN component");if(!m.equalsEpsilon(e,m.ZERO,w.EPSILON14))return c(t)||(t=new m),t=m.multiplyComponents(e,this._oneOverRadiiSquared,t),m.normalize(t,t)};var pVe=new m,bVe=new m;yi.prototype.cartographicToCartesian=function(e,t){let n=pVe,i=bVe;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),c(t)||(t=new m),m.add(i,n,t)};yi.prototype.cartographicArrayToCartesianArray=function(e,t){C.defined("cartographics",e);let n=e.length;c(t)?t.length=n:t=new Array(n);for(let i=0;i=this._radii.z-t))return n};var _Ve=new m;yi.prototype.getLocalCurvature=function(e,t){C.typeOf.object("surfacePosition",e),c(t)||(t=new D);let n=this.getSurfaceNormalIntersectionWithZAxis(e,0,_Ve),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 TVe=[.14887433898163,.43339539412925,.67940956829902,.86506336668898,.97390652851717,0],SVe=[.29552422471475,.26926671930999,.21908636251598,.14945134915058,.066671344308684,0];function Oq(e,t,n){C.typeOf.number("a",e),C.typeOf.number("b",t),C.typeOf.func("func",n);let i=.5*(t+e),o=.5*(t-e),r=0;for(let s=0;s<5;s++){let a=o*TVe[s];r+=SVe[s]*(n(i+a)+n(i-a))}return r*=o,r}yi.prototype.surfaceArea=function(e){C.typeOf.object("rectangle",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 Wo=VVe;var MRt=_(T(),1);function LVe(e,t,n,i,o){this.xPoleWander=e,this.yPoleWander=t,this.xPoleOffset=n,this.yPoleOffset=i,this.ut1MinusUtc=o}var P0=LVe;var cGt=_(T(),1);var HRt=_(T(),1);var URt=_(T(),1);function ZVe(e){if(e===null||isNaN(e))throw new L("year is required and must be a number.");return e%4===0&&e%100!==0||e%400===0}var Lm=ZVe;var Bq=[31,28,31,30,31,30,31,31,30,31,30,31];function RVe(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,g(),x(),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 g(){C.typeOf.number.greaterThanOrEquals("Year",e,1),C.typeOf.number.lessThanOrEquals("Year",e,9999),C.typeOf.number.greaterThanOrEquals("Month",t,1),C.typeOf.number.lessThanOrEquals("Month",t,12),C.typeOf.number.greaterThanOrEquals("Day",n,1),C.typeOf.number.lessThanOrEquals("Day",n,31),C.typeOf.number.greaterThanOrEquals("Hour",i,0),C.typeOf.number.lessThanOrEquals("Hour",i,23),C.typeOf.number.greaterThanOrEquals("Minute",o,0),C.typeOf.number.lessThanOrEquals("Minute",o,59),C.typeOf.bool("IsLeapSecond",a),C.typeOf.number.greaterThanOrEquals("Second",r,0),C.typeOf.number.lessThanOrEquals("Second",r,a?60:59),C.typeOf.number.greaterThanOrEquals("Millisecond",s,0),C.typeOf.number.lessThan("Millisecond",s,1e3)}function x(){let S=t===2&&Lm(e)?Bq[t-1]+1:Bq[t-1];if(n>S)throw new L("Month and Day represents invalid date")}}var eh=RVe;var KRt=_(T(),1);function GVe(e,t){this.julianDate=e,this.offset=t}var Hi=GVe;var QRt=_(T(),1),EVe={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},Kn=Object.freeze(EVe);var qRt=_(T(),1),XVe={UTC:0,TAI:1},zn=Object.freeze(XVe);var Hq=new eh,SN=[31,28,31,30,31,30,31,31,30,31,30,31],CN=29;function f3(e,t){return Wt.compare(e.julianDate,t.julianDate)}var BS=new Hi;function LN(e){BS.julianDate=e;let t=Wt.leapSeconds,n=Wo(t,BS,f3);n<0&&(n=~n),n>=t.length&&(n=t.length-1);let i=t[n].offset;n>0&&Wt.secondsDifference(t[n].julianDate,e)>i&&(n--,i=t[n].offset),Wt.addSeconds(e,i,e)}function Yq(e,t){BS.julianDate=e;let n=Wt.leapSeconds,i=Wo(n,BS,f3);if(i<0&&(i=~i),i===0)return Wt.addSeconds(e,-n[0].offset,t);if(i>=n.length)return Wt.addSeconds(e,-n[i-1].offset,t);let o=Wt.secondsDifference(n[i].julianDate,e);if(o===0)return Wt.addSeconds(e,-n[i].offset,t);if(!(o<=1))return Wt.addSeconds(e,-n[--i].offset,t)}function v0(e,t,n){let i=t/Kn.SECONDS_PER_DAY|0;return e+=i,t-=Kn.SECONDS_PER_DAY*i,t<0&&(e--,t+=Kn.SECONDS_PER_DAY),n.dayNumber=e,n.secondsOfDay=t,n}function h3(e,t,n,i,o,r,s){let a=(t-14)/12|0,l=e+4800+a,d=(1461*l/4|0)+(367*(t-2-12*a)/12|0)-(3*((l+100)/100|0)/4|0)+n-32075;i=i-12,i<0&&(i+=24);let u=r+(i*Kn.SECONDS_PER_HOUR+o*Kn.SECONDS_PER_MINUTE+s*Kn.SECONDS_PER_MILLISECOND);return u>=43200&&(d-=1),[d,u]}var IVe=/^(\d{4})$/,WVe=/^(\d{4})-(\d{2})$/,wVe=/^(\d{4})-?(\d{3})$/,PVe=/^(\d{4})-?W(\d{2})-?(\d{1})?$/,vVe=/^(\d{4})-?(\d{2})-?(\d{2})$/,p3=/([Z+\-])?(\d{2})?:?(\d{2})?$/,FVe=/^(\d{2})(\.\d+)?/.source+p3.source,AVe=/^(\d{2}):?(\d{2})(\.\d+)?/.source+p3.source,MVe=/^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source+p3.source,Zm="Invalid ISO 8601 date.";function Wt(e,t,n){this.dayNumber=void 0,this.secondsOfDay=void 0,e=e??0,t=t??0,n=n??zn.UTC;let i=e|0;t=t+(e-i)*Kn.SECONDS_PER_DAY,v0(i,t,this),n===zn.UTC&&LN(this)}Wt.fromGregorianDate=function(e,t){if(!(e instanceof eh))throw new L("date must be a valid GregorianDate.");let n=h3(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond);return c(t)?(v0(n[0],n[1],t),LN(t),t):new Wt(n[0],n[1],zn.UTC)};Wt.fromDate=function(e,t){if(!(e instanceof Date)||isNaN(e.getTime()))throw new L("date must be a valid JavaScript Date.");let n=h3(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds());return c(t)?(v0(n[0],n[1],t),LN(t),t):new Wt(n[0],n[1],zn.UTC)};Wt.fromIso8601=function(e,t){if(typeof e!="string")throw new L(Zm);e=e.replace(",",".");let n=e.split("T"),i,o=1,r=1,s=0,a=0,l=0,d=0,u=n[0],f=n[1],p,y;if(!c(u))throw new L(Zm);let h;if(n=u.match(vVe),n!==null){if(h=u.split("-").length-1,h>0&&h!==2)throw new L(Zm);i=+n[1],o=+n[2],r=+n[3]}else if(n=u.match(WVe),n!==null)i=+n[1],o=+n[2];else if(n=u.match(IVe),n!==null)i=+n[1];else{let V;if(n=u.match(wVe),n!==null){if(i=+n[1],V=+n[2],y=Lm(i),V<1||y&&V>366||!y&&V>365)throw new L(Zm)}else if(n=u.match(PVe),n!==null){i=+n[1];let Z=+n[2],R=+n[3]||0;if(h=u.split("-").length-1,h>0&&(!c(n[3])&&h!==1||c(n[3])&&h!==2))throw new L(Zm);let E=new Date(Date.UTC(i,0,4));V=Z*7+R-E.getUTCDay()-3}else throw new L(Zm);p=new Date(Date.UTC(i,0,1)),p.setUTCDate(V),o=p.getUTCMonth()+1,r=p.getUTCDate()}if(y=Lm(i),o<1||o>12||r<1||(o!==2||!y)&&r>SN[o-1]||y&&o===2&&r>CN)throw new L(Zm);let g;if(c(f)){if(n=f.match(MVe),n!==null){if(h=f.split(":").length-1,h>0&&h!==2&&h!==3)throw new L(Zm);s=+n[1],a=+n[2],l=+n[3],d=+(n[4]||0)*1e3,g=5}else if(n=f.match(AVe),n!==null){if(h=f.split(":").length-1,h>2)throw new L(Zm);s=+n[1],a=+n[2],l=+(n[3]||0)*60,g=4}else if(n=f.match(FVe),n!==null)s=+n[1],a=+(n[2]||0)*60,g=3;else throw new L(Zm);if(a>=60||l>=61||s>24||s===24&&(a>0||l>0||d>0))throw new L(Zm);let V=n[g],Z=+n[g+1],R=+(n[g+2]||0);switch(V){case"+":s=s-Z,a=a-R;break;case"-":s=s+Z,a=a+R;break;case"Z":break;default:a=a+new Date(Date.UTC(i,o-1,r,s,a)).getTimezoneOffset();break}}let x=l===60;for(x&&l--;a>=60;)a-=60,s++;for(;s>=24;)s-=24,r++;for(p=y&&o===2?CN:SN[o-1];r>p;)r-=p,o++,o>12&&(o-=12,i++),p=y&&o===2?CN:SN[o-1];for(;a<0;)a+=60,s--;for(;s<0;)s+=24,r--;for(;r<1;)o--,o<1&&(o+=12,i--),p=y&&o===2?CN:SN[o-1],r+=p;let S=h3(i,o,r,s,a,l,d);return c(t)?(v0(S[0],S[1],t),LN(t)):t=new Wt(S[0],S[1],zn.UTC),x&&Wt.addSeconds(t,1,t),t};Wt.now=function(e){return Wt.fromDate(new Date,e)};var VN=new Wt(0,0,zn.TAI);Wt.toGregorianDate=function(e,t){if(!c(e))throw new L("julianDate is required.");let n=!1,i=Yq(e,VN);c(i)||(Wt.addSeconds(e,-1,VN),i=Yq(VN,VN),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 l=4e3*(s+1)/1461001|0;s=s-(1461*l/4|0)+31|0;let d=80*s/2447|0,u=s-(2447*d/80|0)|0;s=d/11|0;let f=d+2-12*s|0,p=100*(a-49)+l+s|0,y=r/Kn.SECONDS_PER_HOUR|0,h=r-y*Kn.SECONDS_PER_HOUR,g=h/Kn.SECONDS_PER_MINUTE|0;h=h-g*Kn.SECONDS_PER_MINUTE;let x=h|0,S=(h-x)/Kn.SECONDS_PER_MILLISECOND;return y+=12,y>23&&(y-=24),n&&(x+=1),c(t)?(t.year=p,t.month=f,t.day=u,t.hour=y,t.minute=g,t.second=x,t.millisecond=S,t.isLeapSecond=n,t):new eh(p,f,u,y,g,x,S,n)};Wt.toDate=function(e){if(!c(e))throw new L("julianDate is required.");let t=Wt.toGregorianDate(e,Hq),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))};Wt.toIso8601=function(e,t){if(!c(e))throw new L("julianDate is required.");let n=Wt.toGregorianDate(e,Hq),i=n.year,o=n.month,r=n.day,s=n.hour,a=n.minute,l=n.second,d=n.millisecond;i===1e4&&o===1&&r===1&&s===0&&a===0&&l===0&&d===0&&(i=9999,o=12,r=31,s=24);let u;if(!c(t)&&d!==0){let f=d*.01;return u=f<1e-6?f.toFixed(20).replace(".","").replace(/0+$/,""):f.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")}:${l.toString().padStart(2,"0")}.${u}Z`}return!c(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")}:${l.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")}:${l.toString().padStart(2,"0")}.${u}Z`)};Wt.clone=function(e,t){if(c(e))return c(t)?(t.dayNumber=e.dayNumber,t.secondsOfDay=e.secondsOfDay,t):new Wt(e.dayNumber,e.secondsOfDay,zn.TAI)};Wt.compare=function(e,t){if(!c(e))throw new L("left is required.");if(!c(t))throw new L("right is required.");let n=e.dayNumber-t.dayNumber;return n!==0?n:e.secondsOfDay-t.secondsOfDay};Wt.equals=function(e,t){return e===t||c(e)&&c(t)&&e.dayNumber===t.dayNumber&&e.secondsOfDay===t.secondsOfDay};Wt.equalsEpsilon=function(e,t,n){return n=n??0,e===t||c(e)&&c(t)&&Math.abs(Wt.secondsDifference(e,t))<=n};Wt.totalDays=function(e){if(!c(e))throw new L("julianDate is required.");return e.dayNumber+e.secondsOfDay/Kn.SECONDS_PER_DAY};Wt.secondsDifference=function(e,t){if(!c(e))throw new L("left is required.");if(!c(t))throw new L("right is required.");return(e.dayNumber-t.dayNumber)*Kn.SECONDS_PER_DAY+(e.secondsOfDay-t.secondsOfDay)};Wt.daysDifference=function(e,t){if(!c(e))throw new L("left is required.");if(!c(t))throw new L("right is required.");let n=e.dayNumber-t.dayNumber,i=(e.secondsOfDay-t.secondsOfDay)/Kn.SECONDS_PER_DAY;return n+i};Wt.computeTaiMinusUtc=function(e){BS.julianDate=e;let t=Wt.leapSeconds,n=Wo(t,BS,f3);return n<0&&(n=~n,--n,n<0&&(n=0)),t[n].offset};Wt.addSeconds=function(e,t,n){if(!c(e))throw new L("julianDate is required.");if(!c(t))throw new L("seconds is required.");if(!c(n))throw new L("result is required.");return v0(e.dayNumber,e.secondsOfDay+t,n)};Wt.addMinutes=function(e,t,n){if(!c(e))throw new L("julianDate is required.");if(!c(t))throw new L("minutes is required.");if(!c(n))throw new L("result is required.");let i=e.secondsOfDay+t*Kn.SECONDS_PER_MINUTE;return v0(e.dayNumber,i,n)};Wt.addHours=function(e,t,n){if(!c(e))throw new L("julianDate is required.");if(!c(t))throw new L("hours is required.");if(!c(n))throw new L("result is required.");let i=e.secondsOfDay+t*Kn.SECONDS_PER_HOUR;return v0(e.dayNumber,i,n)};Wt.addDays=function(e,t,n){if(!c(e))throw new L("julianDate is required.");if(!c(t))throw new L("days is required.");if(!c(n))throw new L("result is required.");let i=e.dayNumber+t;return v0(i,e.secondsOfDay,n)};Wt.lessThan=function(e,t){return Wt.compare(e,t)<0};Wt.lessThanOrEquals=function(e,t){return Wt.compare(e,t)<=0};Wt.greaterThan=function(e,t){return Wt.compare(e,t)>0};Wt.greaterThanOrEquals=function(e,t){return Wt.compare(e,t)>=0};Wt.prototype.clone=function(e){return Wt.clone(this,e)};Wt.prototype.equals=function(e){return Wt.equals(this,e)};Wt.prototype.equalsEpsilon=function(e,t){return Wt.equalsEpsilon(this,e,t)};Wt.prototype.toString=function(){return Wt.toIso8601(this)};Wt.leapSeconds=[new Hi(new Wt(2441317,43210,zn.TAI),10),new Hi(new Wt(2441499,43211,zn.TAI),11),new Hi(new Wt(2441683,43212,zn.TAI),12),new Hi(new Wt(2442048,43213,zn.TAI),13),new Hi(new Wt(2442413,43214,zn.TAI),14),new Hi(new Wt(2442778,43215,zn.TAI),15),new Hi(new Wt(2443144,43216,zn.TAI),16),new Hi(new Wt(2443509,43217,zn.TAI),17),new Hi(new Wt(2443874,43218,zn.TAI),18),new Hi(new Wt(2444239,43219,zn.TAI),19),new Hi(new Wt(2444786,43220,zn.TAI),20),new Hi(new Wt(2445151,43221,zn.TAI),21),new Hi(new Wt(2445516,43222,zn.TAI),22),new Hi(new Wt(2446247,43223,zn.TAI),23),new Hi(new Wt(2447161,43224,zn.TAI),24),new Hi(new Wt(2447892,43225,zn.TAI),25),new Hi(new Wt(2448257,43226,zn.TAI),26),new Hi(new Wt(2448804,43227,zn.TAI),27),new Hi(new Wt(2449169,43228,zn.TAI),28),new Hi(new Wt(2449534,43229,zn.TAI),29),new Hi(new Wt(2450083,43230,zn.TAI),30),new Hi(new Wt(2450630,43231,zn.TAI),31),new Hi(new Wt(2451179,43232,zn.TAI),32),new Hi(new Wt(2453736,43233,zn.TAI),33),new Hi(new Wt(2454832,43234,zn.TAI),34),new Hi(new Wt(2456109,43235,zn.TAI),35),new Hi(new Wt(2457204,43236,zn.TAI),36),new Hi(new Wt(2457754,43237,zn.TAI),37)];var ee=Wt;var mXt=_(T(),1),u$=_(cd(),1);var hGt=_(T(),1);function NVe(e){return(e.length===0||e[e.length-1]!=="/")&&(e=`${e}/`),e}var $L=NVe;var bGt=_(T(),1);function $q(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=$q(o,t)),n[i]=o}return n}var He=$q;var xGt=_(T(),1);function e$(e,t,n){n=n??!1;let i={},o=c(e),r=c(t),s,a,l;if(o)for(s in e)e.hasOwnProperty(s)&&(a=e[s],r&&n&&typeof a=="object"&&t.hasOwnProperty(s)?(l=t[s],typeof l=="object"?i[s]=e$(a,l,n):i[s]=a):i[s]=a);if(r)for(s in t)t.hasOwnProperty(s)&&!i.hasOwnProperty(s)&&(l=t[s],i[s]=l);return i}var St=e$;var TGt=_(T(),1);function kVe(){let e,t,n=new Promise(function(i,o){e=i,t=o});return{resolve:e,reject:t,promise:n}}var Cl=kVe;var LGt=_(T(),1),t$=_(cd(),1);function b3(e,t){let n;return typeof document<"u"&&(n=document),b3._implementation(e,t,n)}b3._implementation=function(e,t,n){if(!c(e))throw new L("relative uri is required.");if(!c(t)){if(typeof n>"u")return e;t=n.baseURI??n.location.href}let i=new t$.default(e);return i.scheme()!==""?i.toString():i.absoluteTo(t).toString()};var th=b3;var EGt=_(T(),1),n$=_(cd(),1);function UVe(e,t){if(!c(e))throw new L("uri is required.");let n="",i=e.lastIndexOf("/");return i!==-1&&(n=e.substring(0,i+1)),t&&(e=new n$.default(e),e.query().length!==0&&(n+=`?${e.query()}`),e.fragment().length!==0&&(n+=`#${e.fragment()}`)),n}var eZ=UVe;var wGt=_(T(),1),i$=_(cd(),1);function OVe(e){if(!c(e))throw new L("uri is required.");let t=new i$.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 ox=OVe;var FGt=_(T(),1);var o$={};function DVe(e,t,n){c(t)||(t=e.width),c(n)||(n=e.height);let i=o$[t];c(i)||(i={},o$[t]=i);let o=i[n];if(!c(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 Rm=DVe;var NGt=_(T(),1);var BVe=/^blob:/i;function YVe(e){return C.typeOf.string("uri",e),BVe.test(e)}var rx=YVe;var OGt=_(T(),1);var nh;function HVe(e){c(nh)||(nh=document.createElement("a")),nh.href=window.location.href;let t=nh.host,n=nh.protocol;return nh.href=e,nh.href=nh.href,n!==nh.protocol||t!==nh.host}var F0=HVe;var YGt=_(T(),1);var zVe=/^data:/i;function KVe(e){return C.typeOf.string("uri",e),zVe.test(e)}var Sp=KVe;var zGt=_(T(),1);function JVe(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 sx=JVe;var jGt=_(T(),1);function QVe(e){if(!c(e))throw new L("obj is required.");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 tZ=eLe;function r$(e,t,n){this.statusCode=e,this.response=t,this.responseHeaders=n,typeof this.responseHeaders=="string"&&(this.responseHeaders=tZ(this.responseHeaders))}r$.prototype.toString=function(){let e="Request has failed.";return c(this.statusCode)&&(e+=` Status Code: ${this.statusCode}`),e};var ih=r$;var vEt=_(T(),1),XN=_(cd(),1);var TEt=_(T(),1);function nZ(){this._listeners=[],this._scopes=[],this._toRemove=[],this._insideRaiseEvent=!1}Object.defineProperties(nZ.prototype,{numberOfListeners:{get:function(){return this._listeners.length-this._toRemove.length}}});nZ.prototype.addEventListener=function(e,t){C.typeOf.func("listener",e),this._listeners.push(e),this._scopes.push(t);let n=this;return function(){n.removeEventListener(e,t)}};nZ.prototype.removeEventListener=function(e,t){C.typeOf.func("listener",e);let n=this._listeners,i=this._scopes,o=-1;for(let r=0;r0){for(o.sort(tLe),e=0;e=0;--t)this.heapify(t)};cx.prototype.insert=function(e){C.defined("element",e);let t=this._array,n=this._comparator,i=this._maximumLength,o=this._length++;for(oi&&(r=t[i],this._length=i),r};cx.prototype.pop=function(e){if(e=e??0,this._length===0)return;C.typeOf.number.lessThan("index",e,this._length);let t=this._array,n=t[e];return y3(t,e,--this._length),this.heapify(e),t[this._length]=void 0,n};var iZ=cx;function nLe(e,t){return e.priority-t.priority}var eo={numberOfAttemptedRequests:0,numberOfActiveRequests:0,numberOfCancelledRequests:0,numberOfCancelledActiveRequests:0,numberOfFailedRequests:0,numberOfActiveRequestsEver:0,lastNumberOfActiveRequests:0},zS=20,nc=new iZ({comparator:nLe});nc.maximumLength=zS;nc.reserve(zS);var oh=[],Cp={},iLe=typeof document<"u"?new XN.default(document.location.href):new XN.default,IN=new ye;function Qo(){}Qo.maximumRequests=50;Qo.maximumRequestsPerServer=18;Qo.requestsByServer={};Qo.throttleRequests=!0;Qo.debugShowStatistics=!1;Qo.requestCompletedEvent=IN;Object.defineProperties(Qo,{statistics:{get:function(){return eo}},priorityHeapLength:{get:function(){return zS},set:function(e){if(ee;){let t=nc.pop();lx(t)}zS=e,nc.maximumLength=e,nc.reserve(e)}}});function s$(e){c(e.priorityFunction)&&(e.priority=e.priorityFunction())}Qo.serverHasOpenSlots=function(e,t){t=t??1;let n=Qo.requestsByServer[e]??Qo.maximumRequestsPerServer;return Cp[e]+t<=n};Qo.heapHasOpenSlots=function(e){return nc.length+e<=zS};function a$(e){return e.state===jn.UNISSUED&&(e.state=jn.ISSUED,e.deferred=Cl()),e.deferred.promise}function oLe(e){return function(t){if(e.state===jn.CANCELLED)return;let n=e.deferred;--eo.numberOfActiveRequests,--Cp[e.serverKey],IN.raiseEvent(),e.state=jn.RECEIVED,e.deferred=void 0,n.resolve(t)}}function rLe(e){return function(t){e.state!==jn.CANCELLED&&(++eo.numberOfFailedRequests,--eo.numberOfActiveRequests,--Cp[e.serverKey],IN.raiseEvent(t),e.state=jn.FAILED,e.deferred.reject(t))}}function c$(e){let t=a$(e);return e.state=jn.ACTIVE,oh.push(e),++eo.numberOfActiveRequests,++eo.numberOfActiveRequestsEver,++Cp[e.serverKey],e.requestFunction().then(oLe(e)).catch(rLe(e)),t}function lx(e){let t=e.state===jn.ACTIVE;if(e.state=jn.CANCELLED,++eo.numberOfCancelledRequests,c(e.deferred)){let n=e.deferred;e.deferred=void 0,n.reject()}t&&(--eo.numberOfActiveRequests,--Cp[e.serverKey],++eo.numberOfCancelledActiveRequests),c(e.cancelFunction)&&e.cancelFunction()}Qo.update=function(){let e,t,n=0,i=oh.length;for(e=0;e0&&(oh[e-n]=t)}oh.length-=n;let o=nc.internalArray,r=nc.length;for(e=0;e0;){if(t=nc.pop(),t.cancelled){lx(t);continue}if(t.throttleByServer&&!Qo.serverHasOpenSlots(t.serverKey)){lx(t);continue}c$(t),++a}sLe()};Qo.getServerKey=function(e){C.typeOf.string("url",e);let t=new XN.default(e);t.scheme()===""&&(t=t.absoluteTo(iLe),t.normalize());let n=t.authority();/:/.test(n)||(n=`${n}:${t.scheme()==="https"?"443":"80"}`);let i=Cp[n];return c(i)||(Cp[n]=0),n};Qo.request=function(e){if(C.typeOf.object("request",e),C.typeOf.string("request.url",e.url),C.typeOf.func("request.requestFunction",e.requestFunction),Sp(e.url)||rx(e.url))return IN.raiseEvent(),e.state=jn.RECEIVED,e.requestFunction();if(++eo.numberOfAttemptedRequests,c(e.serverKey)||(e.serverKey=Qo.getServerKey(e.url)),Qo.throttleRequests&&e.throttleByServer&&!Qo.serverHasOpenSlots(e.serverKey))return;if(!Qo.throttleRequests||!e.throttle)return c$(e);if(oh.length>=Qo.maximumRequests)return;s$(e);let t=nc.insert(e);if(c(t)){if(t===e)return;lx(t)}return a$(e)};function sLe(){Qo.debugShowStatistics&&(eo.numberOfActiveRequests===0&&eo.lastNumberOfActiveRequests>0&&(eo.numberOfAttemptedRequests>0&&(console.log(`Number of attempted requests: ${eo.numberOfAttemptedRequests}`),eo.numberOfAttemptedRequests=0),eo.numberOfCancelledRequests>0&&(console.log(`Number of cancelled requests: ${eo.numberOfCancelledRequests}`),eo.numberOfCancelledRequests=0),eo.numberOfCancelledActiveRequests>0&&(console.log(`Number of cancelled active requests: ${eo.numberOfCancelledActiveRequests}`),eo.numberOfCancelledActiveRequests=0),eo.numberOfFailedRequests>0&&(console.log(`Number of failed requests: ${eo.numberOfFailedRequests}`),eo.numberOfFailedRequests=0)),eo.lastNumberOfActiveRequests=eo.numberOfActiveRequests)}Qo.clearForSpecs=function(){for(;nc.length>0;){let t=nc.pop();lx(t)}let e=oh.length;for(let t=0;t0}},credits:{get:function(){return this._credits}}});Et.prototype.toString=function(){return this.getUrlComponent(!0,!0)};Et.prototype.parseUrl=function(e,t,n,i){let o=new u$.default(e),r=cLe(o.query());this._queryParameters=t?wN(r,this.queryParameters,n):r,o.search(""),o.fragment(""),c(i)&&o.scheme()===""&&(o=o.absoluteTo(th(i))),this._url=o.toString()};function cLe(e){return e.length===0?{}:e.indexOf("=")===-1?{[e]:void 0}:ld(e)}function wN(e,t,n){if(!n)return St(e,t);let i=He(e,!0);for(let o in t)if(t.hasOwnProperty(o)){let r=i[o],s=t[o];c(r)?(Array.isArray(r)||(r=i[o]=[r]),i[o]=r.concat(s)):i[o]=Array.isArray(s)?s.slice():s}return i}Et.prototype.getUrlComponent=function(e,t){if(this.isDataUri)return this._url;let n=this._url;e&&(n=`${n}${lLe(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 c(s)?encodeURIComponent(s):o})),t&&c(this.proxy)&&(n=this.proxy.getURL(n)),n};function lLe(e){let t=Object.keys(e);return t.length===0?"":t.length===1&&!c(e[t[0]])?`?${t[0]}`:`?${ax(e)}`}Et.prototype.setQueryParameters=function(e,t){t?this._queryParameters=wN(this._queryParameters,e,!1):this._queryParameters=wN(e,this._queryParameters,!1)};Et.prototype.appendQueryParameters=function(e){this._queryParameters=wN(e,this._queryParameters,!0)};Et.prototype.setTemplateValues=function(e,t){t?this._templateValues=St(this._templateValues,e):this._templateValues=St(e,this._templateValues)};Et.prototype.getDerivedResource=function(e){let t=this.clone();if(t._retryCount=0,c(e.url)){let n=e.preserveQueryParameters??!1;t.parseUrl(e.url,!0,n,this._url)}return c(e.queryParameters)&&(t._queryParameters=St(e.queryParameters,t.queryParameters)),c(e.templateValues)&&(t._templateValues=St(e.templateValues,t.templateValues)),c(e.headers)&&(t.headers=St(e.headers,t.headers)),c(e.proxy)&&(t.proxy=e.proxy),c(e.request)&&(t.request=e.request),c(e.retryCallback)&&(t.retryCallback=e.retryCallback),c(e.retryAttempts)&&(t.retryAttempts=e.retryAttempts),t};Et.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})};Et.prototype.clone=function(e){return c(e)?(e._url=this._url,e._queryParameters=He(this._queryParameters),e._templateValues=He(this._templateValues),e.headers=He(this.headers),e.proxy=this.proxy,e.retryCallback=this.retryCallback,e.retryAttempts=this.retryAttempts,e._retryCount=0,e.request=this.request.clone(),e):new Et({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:c(this.credits)?this.credits.slice():void 0})};Et.prototype.getBaseUri=function(e){return eZ(this.getUrlComponent(e),e)};Et.prototype.appendForwardSlash=function(){this._url=$L(this._url)};Et.prototype.fetchArrayBuffer=function(){return this.fetch({responseType:"arraybuffer"})};Et.fetchArrayBuffer=function(e){return new Et(e).fetchArrayBuffer()};Et.prototype.fetchBlob=function(){return this.fetch({responseType:"blob"})};Et.fetchBlob=function(e){return new Et(e).fetchBlob()};Et.prototype.fetchImage=function(e){e=e??z.EMPTY_OBJECT;let t=e.preferImageBitmap??!1,n=e.preferBlob??!1,i=e.flipY??!1,o=e.skipColorSpaceConversion??!1;if(x3(this.request),!m$||this.isDataUri||this.isBlobUri||!this.hasHeaders&&!n)return g3({resource:this,flipY:i,skipColorSpaceConversion:o,preferImageBitmap:t});let r=this.fetchBlob();if(!c(r))return;let s,a,l,d;return Et.supportsImageBitmapOptions().then(function(u){return s=u,a=s&&t,r}).then(function(u){if(!c(u))return;if(d=u,a)return Et.createImageBitmapFromBlob(u,{flipY:i,premultiplyAlpha:!1,skipColorSpaceConversion:o});let f=window.URL.createObjectURL(u);return l=new Et({url:f}),g3({resource:l,flipY:i,skipColorSpaceConversion:o,preferImageBitmap:!1})}).then(function(u){if(c(u))return u.blob=d,a||window.URL.revokeObjectURL(l.url),u}).catch(function(u){return c(l)&&window.URL.revokeObjectURL(l.url),u.blob=d,Promise.reject(u)})};function g3(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 l=Cl();return Et._Implementations.createImage(r,a,l,n,i,o),l.promise};let s=ic.request(r);if(c(s))return s.catch(function(a){return r.state!==jn.FAILED?Promise.reject(a):t.retryOnError(a).then(function(l){return l?(r.state=jn.UNISSUED,r.deferred=void 0,g3({resource:t,flipY:n,skipColorSpaceConversion:i,preferImageBitmap:o})):Promise.reject(a)})})}Et.fetchImage=function(e){return new Et(e).fetchImage({flipY:e.flipY,skipColorSpaceConversion:e.skipColorSpaceConversion,preferBlob:e.preferBlob,preferImageBitmap:e.preferImageBitmap})};Et.prototype.fetchText=function(){return this.fetch({responseType:"text"})};Et.fetchText=function(e){return new Et(e).fetchText()};Et.prototype.fetchJson=function(){let e=this.fetch({responseType:"text",headers:{Accept:"application/json,*/*;q=0.01"}});if(c(e))return e.then(function(t){if(c(t))return JSON.parse(t)})};Et.fetchJson=function(e){return new Et(e).fetchJson()};Et.prototype.fetchXML=function(){return this.fetch({responseType:"document",overrideMimeType:"text/xml"})};Et.fetchXML=function(e){return new Et(e).fetchXML()};Et.prototype.fetchJsonp=function(e){e=e??"callback",x3(this.request);let t;do t=`loadJsonp${w.nextRandomNumber().toString().substring(2,8)}`;while(c(window[t]));return f$(this,e,t)};function f$(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=Cl();return window[n]=function(l){a.resolve(l);try{delete window[n]}catch{window[n]=void 0}},Et._Implementations.loadAndExecuteScript(r,n,a),a.promise};let s=ic.request(o);if(c(s))return s.catch(function(a){return o.state!==jn.FAILED?Promise.reject(a):e.retryOnError(a).then(function(l){return l?(o.state=jn.UNISSUED,o.deferred=void 0,f$(e,t,n)):Promise.reject(a)})})}Et.fetchJsonp=function(e){return new Et(e).fetchJsonp(e.callbackParameterName)};Et.prototype._makeRequest=function(e){let t=this;x3(t.request);let n=t.request,i=t.url;n.url=i,n.requestFunction=function(){let r=e.responseType,s=St(e.headers,t.headers),a=e.overrideMimeType,l=e.method,d=e.data,u=Cl(),f=Et._Implementations.loadWithXhr(i,r,l,d,s,u,a);return c(f)&&c(f.abort)&&(n.cancelFunction=function(){f.abort()}),u.promise};let o=ic.request(n);if(c(o))return o.then(function(r){return n.cancelFunction=void 0,r}).catch(function(r){return n.cancelFunction=void 0,n.state!==jn.FAILED?Promise.reject(r):t.retryOnError(r).then(function(s){return s?(n.state=jn.UNISSUED,n.deferred=void 0,t.fetch(e)):Promise.reject(r)})})};function x3(e){if(e.state===jn.ISSUED||e.state===jn.ACTIVE)throw new le("The Resource is already being fetched.");e.state=jn.UNISSUED,e.deferred=void 0}var dLe=/^data:(.*?)(;base64)?,(.*)$/;function WN(e,t){let n=decodeURIComponent(t);return e?atob(n):n}function d$(e,t){let n=WN(e,t),i=new ArrayBuffer(n.length),o=new Uint8Array(i);for(let r=0;r{if(!a.ok){let l={};a.headers.forEach((d,u)=>{l[u]=d}),r.reject(new ih(a.status,a,l));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 ih)})}var fLe=typeof XMLHttpRequest>"u";Et._Implementations.loadWithXhr=function(e,t,n,i,o,r,s){let a=dLe.exec(e);if(a!==null){r.resolve(uLe(a,t));return}if(fLe){mLe(e,t,n,i,o,r,s);return}let l=new XMLHttpRequest;if(JS.contains(e)&&(l.withCredentials=!0),l.open(n,e,!0),c(s)&&c(l.overrideMimeType)&&l.overrideMimeType(s),c(o))for(let u in o)o.hasOwnProperty(u)&&l.setRequestHeader(u,o[u]);c(t)&&(l.responseType=t);let d=!1;return typeof e=="string"&&(d=e.indexOf("file://")===0||typeof window<"u"&&window.location.origin==="file://"),l.onload=function(){if((l.status<200||l.status>=300)&&!(d&&l.status===0)){r.reject(new ih(l.status,l.response,l.getAllResponseHeaders()));return}let u=l.response,f=l.responseType;if(n==="HEAD"||n==="OPTIONS"){let y=l.getAllResponseHeaders().trim().split(/[\r\n]+/),h={};y.forEach(function(g){let x=g.split(": "),S=x.shift();h[S]=x.join(": ")}),r.resolve(h);return}if(l.status===204)r.resolve(void 0);else if(c(u)&&(!c(t)||f===t))r.resolve(u);else if(t==="json"&&typeof u=="string")try{r.resolve(JSON.parse(u))}catch(p){r.reject(p)}else(f===""||f==="document")&&c(l.responseXML)&&l.responseXML.hasChildNodes()?r.resolve(l.responseXML):(f===""||f==="text")&&c(l.responseText)?r.resolve(l.responseText):r.reject(new le("Invalid XMLHttpRequest response type."))},l.onerror=function(u){r.reject(new ih)},l.send(i),l};Et._Implementations.loadAndExecuteScript=function(e,t,n){return sx(e,t).catch(function(i){n.reject(i)})};Et._DefaultImplementations={};Et._DefaultImplementations.createImage=Et._Implementations.createImage;Et._DefaultImplementations.loadWithXhr=Et._Implementations.loadWithXhr;Et._DefaultImplementations.loadAndExecuteScript=Et._Implementations.loadAndExecuteScript;Et.DEFAULT=Object.freeze(new Et({url:typeof document>"u"?"":document.location.href.split("?")[0]}));var Ge=Et;function sZ(e){e=e??z.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,c(e.data)?h$(this,e.data):h$(this,{columnNames:["dateIso8601","modifiedJulianDateUtc","xPoleWanderRadians","yPoleWanderRadians","ut1MinusUtcSeconds","lengthOfDayCorrectionSeconds","xCelestialPoleOffsetRadians","yCelestialPoleOffsetRadians","taiMinusUtcSeconds"],samples:[]})}sZ.fromUrl=async function(e,t){C.defined("url",e),t=t??z.EMPTY_OBJECT;let n=Ge.createIfNeeded(e),i;try{i=await n.fetchJson()}catch{throw new le(`An error occurred while retrieving the EOP data from the URL ${n.url}.`)}return new sZ({addNewLeapSeconds:t.addNewLeapSeconds,data:i})};sZ.NONE=Object.freeze({compute:function(e,t){return c(t)?(t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0):t=new P0(0,0,0,0,0),t}});sZ.prototype.compute=function(e,t){if(!c(this._samples))return;if(c(t)||(t=new P0(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(c(i)){let a=n[i],l=n[i+1],d=ee.lessThanOrEquals(a,e),u=!c(l),f=u||ee.greaterThanOrEquals(l,e);if(d&&f)return o=i,!u&&l.equals(e)&&++o,r=o+1,b$(this,n,this._samples,e,o,r,t),t}let s=Wo(n,e,ee.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 l=t[o],d=t[r];if(l.equals(d)||i.equals(l))return p$(e,n,o,a,s),s;if(i.equals(d))return p$(e,n,r,a,s),s;let u=ee.secondsDifference(i,l)/ee.secondsDifference(d,l),f=o*a,p=r*a,y=n[f+e._ut1MinusUtcSecondsColumn],h=n[p+e._ut1MinusUtcSecondsColumn],g=h-y;if(g>.5||g<-.5){let x=n[f+e._taiMinusUtcSecondsColumn],S=n[p+e._taiMinusUtcSecondsColumn];x!==S&&(d.equals(i)?y=h:h-=S-x)}return s.xPoleWander=rZ(u,n[f+e._xPoleWanderRadiansColumn],n[p+e._xPoleWanderRadiansColumn]),s.yPoleWander=rZ(u,n[f+e._yPoleWanderRadiansColumn],n[p+e._yPoleWanderRadiansColumn]),s.xPoleOffset=rZ(u,n[f+e._xCelestialPoleOffsetRadiansColumn],n[p+e._xCelestialPoleOffsetRadiansColumn]),s.yPoleOffset=rZ(u,n[f+e._yCelestialPoleOffsetRadiansColumn],n[p+e._yCelestialPoleOffsetRadiansColumn]),s.ut1MinusUtc=rZ(u,y,h),s}var aZ=sZ;var XXt=_(T(),1);function oc(e,t,n){this.heading=e??0,this.pitch=t??0,this.roll=n??0}oc.fromQuaternion=function(e,t){if(!c(e))throw new L("quaternion is required");c(t)||(t=new oc);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=-w.asinClamped(n),t};oc.fromDegrees=function(e,t,n,i){if(!c(e))throw new L("heading is required");if(!c(t))throw new L("pitch is required");if(!c(n))throw new L("roll is required");return c(i)||(i=new oc),i.heading=e*w.RADIANS_PER_DEGREE,i.pitch=t*w.RADIANS_PER_DEGREE,i.roll=n*w.RADIANS_PER_DEGREE,i};oc.clone=function(e,t){if(c(e))return c(t)?(t.heading=e.heading,t.pitch=e.pitch,t.roll=e.roll,t):new oc(e.heading,e.pitch,e.roll)};oc.equals=function(e,t){return e===t||c(e)&&c(t)&&e.heading===t.heading&&e.pitch===t.pitch&&e.roll===t.roll};oc.equalsEpsilon=function(e,t,n,i){return e===t||c(e)&&c(t)&&w.equalsEpsilon(e.heading,t.heading,n,i)&&w.equalsEpsilon(e.pitch,t.pitch,n,i)&&w.equalsEpsilon(e.roll,t.roll,n,i)};oc.prototype.clone=function(e){return oc.clone(this,e)};oc.prototype.equals=function(e){return oc.equals(this,e)};oc.prototype.equalsEpsilon=function(e,t,n){return oc.equalsEpsilon(this,e,t,n)};oc.prototype.toString=function(){return`(${this.heading}, ${this.pitch}, ${this.roll})`};var Ea=oc;var KXt=_(T(),1);var FXt=_(T(),1);var y$={};var g$=/((?:.*\/)|^)Cesium\.js(?:\?|\#|$)/;function pLe(){let e=document.getElementsByTagName("script");for(let t=0,n=e.length;t"u"?e:(c(PN)||(PN=document.createElement("a")),PN.href=e,PN.href)}var dx;function _$(){if(c(dx))return dx;let e;if(typeof CESIUM_BASE_URL<"u"?e=CESIUM_BASE_URL:c(y$?.url)?e=th(".",y$.url):typeof define=="object"&&c(define.amd)&&!define.amd.toUrlUndefined&&c(iN.toUrl)?e=th("..",ux("Core/buildModuleUrl.js")):e=pLe(),!c(e))throw new L("Unable to determine Cesium base URL automatically, try defining a global variable called CESIUM_BASE_URL.");return dx=new Ge({url:x$(e)}),dx.appendForwardSlash(),dx}function bLe(e){return x$(iN.toUrl(`../${e}`))}function T$(e){return _$().getDerivedResource({url:e}).url}var vN;function ux(e){return c(vN)||(typeof define=="object"&&c(define.amd)&&!define.amd.toUrlUndefined&&c(iN.toUrl)?vN=bLe:vN=T$),vN(e)}ux._cesiumScriptRegex=g$;ux._buildModuleUrlFromBaseUrl=T$;ux._clearBaseResource=function(){dx=void 0};ux.setBaseUrl=function(e){dx=Ge.DEFAULT.getDerivedResource({url:e})};ux.getCesiumBaseUrl=_$;var on=ux;var NXt=_(T(),1);function yLe(e,t,n){this.x=e,this.y=t,this.s=n}var mx=yLe;function S3(e){e=e??z.EMPTY_OBJECT,this._xysFileUrlTemplate=Ge.createIfNeeded(e.xysFileUrlTemplate),this._interpolationOrder=e.interpolationOrder??9,this._sampleZeroJulianEphemerisDate=e.sampleZeroJulianEphemerisDate??24423965e-1,this._sampleZeroDateTT=new ee(this._sampleZeroJulianEphemerisDate,0,zn.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 gLe=new ee(0,0,zn.TAI);function _3(e,t,n){let i=gLe;return i.dayNumber=t,i.secondsOfDay=n,ee.daysDifference(i,e._sampleZeroDateTT)}S3.prototype.preload=function(e,t,n,i){let o=_3(this,e,t),r=_3(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 l=s/this._samplesPerXysFile|0,d=a/this._samplesPerXysFile|0,u=[];for(let f=l;f<=d;++f)u.push(T3(this,f));return Promise.all(u)};S3.prototype.computeXysRadians=function(e,t,n){let i=_3(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 l=!1,d=this._samples;if(c(d[s*3])||(T3(this,s/this._samplesPerXysFile|0),l=!0),c(d[a*3])||(T3(this,a/this._samplesPerXysFile|0),l=!0),l)return;c(n)?(n.x=0,n.y=0,n.s=0):n=new mx(0,0,0);let u=i-s*this._stepSizeDays,f=this._work,p=this._denominators,y=this._coef,h=this._xTable,g,x;for(g=0;g<=r;++g)f[g]=u-h[g];for(g=0;g<=r;++g){for(y[g]=1,x=0;x<=r;++x)x!==g&&(y[g]*=f[x]);y[g]*=p[g];let S=(s+g)*3;n.x+=y[g]*d[S++],n.y+=y[g]*d[S++],n.s+=y[g]*d[S]}return n};function T3(e,t){if(e._chunkDownloadsInProgress[t])return e._chunkDownloadsInProgress[t];let n,i=e._xysFileUrlTemplate;c(i)?n=i.getDerivedResource({templateValues:{0:t}}):n=new Ge({url:on(`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,l=t*e._samplesPerXysFile*3;for(let d=0,u=a.length;d0)n=Math.sqrt(u+1),s=.5*n,n=.5/n,i=(e[te.COLUMN1ROW2]-e[te.COLUMN2ROW1])*n,o=(e[te.COLUMN2ROW0]-e[te.COLUMN0ROW2])*n,r=(e[te.COLUMN0ROW1]-e[te.COLUMN1ROW0])*n;else{let f=xLe,p=0;l>a&&(p=1),d>a&&d>l&&(p=2);let y=f[p],h=f[y];n=Math.sqrt(e[te.getElementIndex(p,p)]-e[te.getElementIndex(y,y)]-e[te.getElementIndex(h,h)]+1);let g=_Le;g[p]=.5*n,n=.5/n,s=(e[te.getElementIndex(h,y)]-e[te.getElementIndex(y,h)])*n,g[y]=(e[te.getElementIndex(y,p)]+e[te.getElementIndex(p,y)])*n,g[h]=(e[te.getElementIndex(h,p)]+e[te.getElementIndex(p,h)])*n,i=-g[0],o=-g[1],r=-g[2]}return c(t)?(t.x=i,t.y=o,t.z=r,t.w=s,t):new ot(i,o,r,s)};var S$=new ot,C$=new ot,C3=new ot,V$=new ot;ot.fromHeadingPitchRoll=function(e,t){return C.typeOf.object("headingPitchRoll",e),V$=ot.fromAxisAngle(m.UNIT_X,e.roll,S$),C3=ot.fromAxisAngle(m.UNIT_Y,-e.pitch,t),t=ot.multiply(C3,V$,C3),C$=ot.fromAxisAngle(m.UNIT_Z,-e.heading,S$),ot.multiply(C$,t,t)};var FN=new m,V3=new m,Gm=new ot,L$=new ot,AN=new ot;ot.packedLength=4;ot.pack=function(e,t,n){return C.typeOf.object("value",e),C.defined("array",t),n=n??0,t[n++]=e.x,t[n++]=e.y,t[n++]=e.z,t[n]=e.w,t};ot.unpack=function(e,t,n){return C.defined("array",e),t=t??0,c(n)||(n=new ot),n.x=e[t],n.y=e[t+1],n.z=e[t+2],n.w=e[t+3],n};ot.packedInterpolationLength=3;ot.convertPackedArrayForInterpolation=function(e,t,n,i){ot.unpack(e,n*4,AN),ot.conjugate(AN,AN);for(let o=0,r=n-t+1;o=0?r=1:(r=-1,o=-o);let s=o-1,a=1-n,l=n*n,d=a*a;for(let y=7;y>=0;--y)Vp[y]=(MN[y]*l-NN[y])*s,Lp[y]=(MN[y]*d-NN[y])*s;let u=r*n*(1+Vp[0]*(1+Vp[1]*(1+Vp[2]*(1+Vp[3]*(1+Vp[4]*(1+Vp[5]*(1+Vp[6]*(1+Vp[7])))))))),f=a*(1+Lp[0]*(1+Lp[1]*(1+Lp[2]*(1+Lp[3]*(1+Lp[4]*(1+Lp[5]*(1+Lp[6]*(1+Lp[7])))))))),p=ot.multiplyByScalar(e,f,CLe);return ot.multiplyByScalar(t,u,i),ot.add(p,i,i)};ot.fastSquad=function(e,t,n,i,o,r){C.typeOf.object("q0",e),C.typeOf.object("q1",t),C.typeOf.object("s0",n),C.typeOf.object("s1",i),C.typeOf.number("t",o),C.typeOf.object("result",r);let s=ot.fastSlerp(e,t,o,dZ),a=ot.fastSlerp(n,i,o,jS);return ot.fastSlerp(s,a,2*o*(1-o),r)};ot.equals=function(e,t){return e===t||c(e)&&c(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z&&e.w===t.w};ot.equalsEpsilon=function(e,t,n){return n=n??0,e===t||c(e)&&c(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};ot.ZERO=Object.freeze(new ot(0,0,0,0));ot.IDENTITY=Object.freeze(new ot(0,0,0,1));ot.prototype.clone=function(e){return ot.clone(this,e)};ot.prototype.equals=function(e){return ot.equals(this,e)};ot.prototype.equalsEpsilon=function(e,t){return ot.equalsEpsilon(this,e,t)};ot.prototype.toString=function(){return`(${this.x}, ${this.y}, ${this.z}, ${this.w})`};var Fe=ot;var mi={},G3={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"}},qS={north:[-1,0,0],east:[0,1,0],up:[0,0,1],south:[1,0,0],west:[0,-1,0],down:[0,0,-1]},E3={},Vl={east:new m,north:new m,up:new m,west:new m,south:new m,down:new m},A0=new m,M0=new m,N0=new m;mi.localFrameToFixedFrameGenerator=function(e,t){if(!G3.hasOwnProperty(e)||!G3[e].hasOwnProperty(t))throw new L("firstAxis and secondAxis must be east, north, up, west, south or down.");let n=G3[e][t],i,o=e+t;return c(E3[o])?i=E3[o]:(i=function(r,s,a){if(!c(r))throw new L("origin is required.");if(isNaN(r.x)||isNaN(r.y)||isNaN(r.z))throw new L("origin has a NaN component");if(c(a)||(a=new M),m.equalsEpsilon(r,m.ZERO,w.EPSILON14))m.unpack(qS[e],0,A0),m.unpack(qS[t],0,M0),m.unpack(qS[n],0,N0);else if(w.equalsEpsilon(r.x,0,w.EPSILON14)&&w.equalsEpsilon(r.y,0,w.EPSILON14)){let l=w.sign(r.z);m.unpack(qS[e],0,A0),e!=="east"&&e!=="west"&&m.multiplyByScalar(A0,l,A0),m.unpack(qS[t],0,M0),t!=="east"&&t!=="west"&&m.multiplyByScalar(M0,l,M0),m.unpack(qS[n],0,N0),n!=="east"&&n!=="west"&&m.multiplyByScalar(N0,l,N0)}else{s=s??re.default,s.geodeticSurfaceNormal(r,Vl.up);let l=Vl.up,d=Vl.east;d.x=-r.y,d.y=r.x,d.z=0,m.normalize(d,Vl.east),m.cross(l,d,Vl.north),m.multiplyByScalar(Vl.up,-1,Vl.down),m.multiplyByScalar(Vl.east,-1,Vl.west),m.multiplyByScalar(Vl.north,-1,Vl.south),A0=Vl[e],M0=Vl[t],N0=Vl[n]}return a[0]=A0.x,a[1]=A0.y,a[2]=A0.z,a[3]=0,a[4]=M0.x,a[5]=M0.y,a[6]=M0.z,a[7]=0,a[8]=N0.x,a[9]=N0.y,a[10]=N0.z,a[11]=0,a[12]=r.x,a[13]=r.y,a[14]=r.z,a[15]=1,a},E3[o]=i),i};mi.eastNorthUpToFixedFrame=mi.localFrameToFixedFrameGenerator("east","north");mi.northEastDownToFixedFrame=mi.localFrameToFixedFrameGenerator("north","east");mi.northUpEastToFixedFrame=mi.localFrameToFixedFrameGenerator("north","up");mi.northWestUpToFixedFrame=mi.localFrameToFixedFrameGenerator("north","west");var VLe=new Fe,LLe=new m(1,1,1),ZLe=new M;mi.headingPitchRollToFixedFrame=function(e,t,n,i,o){C.typeOf.object("HeadingPitchRoll",t),i=i??mi.eastNorthUpToFixedFrame;let r=Fe.fromHeadingPitchRoll(t,VLe),s=M.fromTranslationQuaternionRotationScale(m.ZERO,r,LLe,ZLe);return o=i(e,n,o),M.multiply(o,s,o)};var RLe=new M,GLe=new te;mi.headingPitchRollQuaternion=function(e,t,n,i,o){C.typeOf.object("HeadingPitchRoll",t);let r=mi.headingPitchRollToFixedFrame(e,t,n,i,RLe),s=M.getMatrix3(r,GLe);return Fe.fromRotationMatrix(s,o)};var ELe=new m(1,1,1),XLe=new m,G$=new M,ILe=new M,WLe=new te,wLe=new Fe;mi.fixedFrameToHeadingPitchRoll=function(e,t,n,i){C.defined("transform",e),t=t??re.default,n=n??mi.eastNorthUpToFixedFrame,c(i)||(i=new Ea);let o=M.getTranslation(e,XLe);if(m.equals(o,m.ZERO))return i.heading=0,i.pitch=0,i.roll=0,i;let r=M.inverseTransformation(n(o,t,G$),G$),s=M.setScale(e,ELe,ILe);s=M.setTranslation(s,m.ZERO,s),r=M.multiply(r,s,r);let a=Fe.fromRotationMatrix(M.getMatrix3(r,WLe),wLe);return a=Fe.normalize(a,a),Ea.fromQuaternion(a,i)};var PLe=6*3600+41*60+50.54841,vLe=8640184812866e-6,FLe=.093104,ALe=-62e-7,MLe=11772758384668e-32,NLe=72921158553e-15,kLe=w.TWO_PI/86400,kN=new ee;mi.computeIcrfToCentralBodyFixedMatrix=function(e,t){let n=mi.computeIcrfToFixedMatrix(e,t);return c(n)||(n=mi.computeTemeToPseudoFixedMatrix(e,t)),n};mi.computeTemeToPseudoFixedMatrix=function(e,t){if(!c(e))throw new L("date is required.");kN=ee.addSeconds(e,-ee.computeTaiMinusUtc(e),kN);let n=kN.dayNumber,i=kN.secondsOfDay,o,r=n-2451545;i>=43200?o=(r+.5)/Kn.DAYS_PER_JULIAN_CENTURY:o=(r-.5)/Kn.DAYS_PER_JULIAN_CENTURY;let a=(PLe+o*(vLe+o*(FLe+o*ALe)))*kLe%w.TWO_PI,l=NLe+MLe*(n-24515455e-1),d=(i+Kn.SECONDS_PER_DAY*.5)%Kn.SECONDS_PER_DAY,u=a+l*d,f=Math.cos(u),p=Math.sin(u);return c(t)?(t[0]=f,t[1]=-p,t[2]=0,t[3]=p,t[4]=f,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new te(f,p,0,-p,f,0,0,0,1)};mi.iau2006XysData=new cZ;mi.earthOrientationParameters=aZ.NONE;var W3=32.184,ULe=2451545;mi.preloadIcrfFixed=function(e){let t=e.start.dayNumber,n=e.start.secondsOfDay+W3,i=e.stop.dayNumber,o=e.stop.secondsOfDay+W3;return mi.iau2006XysData.preload(t,n,i,o)};mi.computeIcrfToFixedMatrix=function(e,t){if(!c(e))throw new L("date is required.");c(t)||(t=new te);let n=mi.computeFixedToIcrfMatrix(e,t);if(c(n))return te.transpose(n,t)};var OLe=32.184,DLe=2451545,UN=new Ea,BLe=new te,YLe=new ee;mi.computeMoonFixedToIcrfMatrix=function(e,t){if(!c(e))throw new L("date is required.");c(t)||(t=new te);let n=ee.addSeconds(e,OLe,YLe),i=ee.totalDays(n)-DLe,o=w.toRadians(12.112)-w.toRadians(.052992)*i,r=w.toRadians(24.224)-w.toRadians(.105984)*i,s=w.toRadians(227.645)+w.toRadians(13.012)*i,a=w.toRadians(261.105)+w.toRadians(13.340716)*i,l=w.toRadians(358)+w.toRadians(.9856)*i;return UN.pitch=w.toRadians(180)-w.toRadians(3.878)*Math.sin(o)-w.toRadians(.12)*Math.sin(r)+w.toRadians(.07)*Math.sin(s)-w.toRadians(.017)*Math.sin(a),UN.roll=w.toRadians(66.53-90)+w.toRadians(1.543)*Math.cos(o)+w.toRadians(.24)*Math.cos(r)-w.toRadians(.028)*Math.cos(s)+w.toRadians(.007)*Math.cos(a),UN.heading=w.toRadians(244.375-90)+w.toRadians(13.17635831)*i+w.toRadians(3.558)*Math.sin(o)+w.toRadians(.121)*Math.sin(r)-w.toRadians(.064)*Math.sin(s)+w.toRadians(.016)*Math.sin(a)+w.toRadians(.025)*Math.sin(l),te.fromHeadingPitchRoll(UN,BLe)};mi.computeIcrfToMoonFixedMatrix=function(e,t){if(!c(e))throw new L("date is required.");c(t)||(t=new te);let n=mi.computeMoonFixedToIcrfMatrix(e,t);if(c(n))return te.transpose(n,t)};var HLe=new mx(0,0,0),zLe=new P0(0,0,0,0,0,0),X3=new te,I3=new te;mi.computeFixedToIcrfMatrix=function(e,t){if(!c(e))throw new L("date is required.");c(t)||(t=new te);let n=mi.earthOrientationParameters.compute(e,zLe);if(!c(n))return;let i=e.dayNumber,o=e.secondsOfDay+W3,r=mi.iau2006XysData.computeXysRadians(i,o,HLe);if(!c(r))return;let s=r.x+n.xPoleOffset,a=r.y+n.yPoleOffset,l=1/(1+Math.sqrt(1-s*s-a*a)),d=X3;d[0]=1-l*s*s,d[3]=-l*s*a,d[6]=s,d[1]=-l*s*a,d[4]=1-l*a*a,d[7]=a,d[2]=-s,d[5]=-a,d[8]=1-l*(s*s+a*a);let u=te.fromRotationZ(-r.s,I3),f=te.multiply(d,u,X3),p=e.dayNumber,y=e.secondsOfDay-ee.computeTaiMinusUtc(e)+n.ut1MinusUtc,h=p-2451545,g=y/Kn.SECONDS_PER_DAY,x=.779057273264+g+.00273781191135448*(h+g);x=x%1*w.TWO_PI;let S=te.fromRotationZ(x,I3),V=te.multiply(f,S,X3),Z=Math.cos(n.xPoleWander),R=Math.cos(n.yPoleWander),E=Math.sin(n.xPoleWander),I=Math.sin(n.yPoleWander),v=i-ULe+o/Kn.SECONDS_PER_DAY;v/=36525;let P=-47e-6*v*w.RADIANS_PER_DEGREE/3600,F=Math.cos(P),N=Math.sin(P),b=I3;return b[0]=Z*F,b[1]=Z*N,b[2]=E,b[3]=-R*N+I*E*F,b[4]=R*F+I*E*N,b[5]=-I*Z,b[6]=-I*N-R*E*F,b[7]=I*F-R*E*N,b[8]=R*Z,te.multiply(V,b,t)};var KLe=new ce;mi.pointToWindowCoordinates=function(e,t,n,i){return i=mi.pointToGLWindowCoordinates(e,t,n,i),i.y=2*t[5]-i.y,i};mi.pointToGLWindowCoordinates=function(e,t,n,i){if(!c(e))throw new L("modelViewProjectionMatrix is required.");if(!c(t))throw new L("viewportTransformation is required.");if(!c(n))throw new L("point is required.");c(i)||(i=new D);let o=KLe;return M.multiplyByVector(e,ce.fromElements(n.x,n.y,n.z,1,o),o),ce.multiplyByScalar(o,1/o.w,o),M.multiplyByVector(t,o,o),D.fromCartesian4(o,i)};var JLe=new m,QLe=new m,jLe=new m;mi.rotationMatrixFromPositionVelocity=function(e,t,n,i){if(!c(e))throw new L("position is required.");if(!c(t))throw new L("velocity is required.");let o=(n??re.default).geodeticSurfaceNormal(e,JLe),r=m.cross(t,o,QLe);m.equalsEpsilon(r,m.ZERO,w.EPSILON6)&&(r=m.clone(m.UNIT_X,r));let s=m.cross(r,t,jLe);return m.normalize(s,s),m.cross(t,s,r),m.negate(r,r),m.normalize(r,r),c(i)||(i=new te),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 E$=new M(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1),X$=new pe,w3=new m,qLe=new m,$Le=new te,P3=new M,I$=new M;mi.basisTo2D=function(e,t,n){if(!c(e))throw new L("projection is required.");if(!c(t))throw new L("matrix is required.");if(!c(n))throw new L("result is required.");let i=M.getTranslation(t,qLe),o=e.ellipsoid,r;if(m.equals(i,m.ZERO))r=m.clone(m.ZERO,w3);else{let u=o.cartesianToCartographic(i,X$);r=e.project(u,w3),m.fromElements(r.z,r.x,r.y,r)}let s=mi.eastNorthUpToFixedFrame(i,o,P3),a=M.inverseTransformation(s,I$),l=M.getMatrix3(t,$Le),d=M.multiplyByMatrix3(a,l,n);return M.multiply(E$,d,n),M.setTranslation(n,r,n),n};mi.ellipsoidTo2DModelMatrix=function(e,t,n){if(!c(e))throw new L("projection is required.");if(!c(t))throw new L("center is required.");if(!c(n))throw new L("result is required.");let i=e.ellipsoid,o=mi.eastNorthUpToFixedFrame(t,i,P3),r=M.inverseTransformation(o,I$),s=i.cartesianToCartographic(t,X$),a=e.project(s,w3);m.fromElements(a.z,a.x,a.y,a);let l=M.fromTranslation(a,P3);return M.multiply(E$,r,n),M.multiply(l,n,n),n};var wt=mi;function En(e,t,n,i){this.west=e??0,this.south=t??0,this.east=n??0,this.north=i??0}Object.defineProperties(En.prototype,{width:{get:function(){return En.computeWidth(this)}},height:{get:function(){return En.computeHeight(this)}}});En.packedLength=4;En.pack=function(e,t,n){return C.typeOf.object("value",e),C.defined("array",t),n=n??0,t[n++]=e.west,t[n++]=e.south,t[n++]=e.east,t[n]=e.north,t};En.unpack=function(e,t,n){return C.defined("array",e),t=t??0,c(n)||(n=new En),n.west=e[t++],n.south=e[t++],n.east=e[t++],n.north=e[t],n};En.computeWidth=function(e){C.typeOf.object("rectangle",e);let t=e.east,n=e.west;return t=0?u.longitude:u.longitude+w.TWO_PI;o=Math.min(o,f),r=Math.max(r,f)}return i-n>r-o&&(n=o,i=r,i>w.PI&&(i=i-w.TWO_PI),n>w.PI&&(n=n-w.TWO_PI)),c(t)?(t.west=n,t.south=s,t.east=i,t.north=a,t):new En(n,s,i,a)};En.fromCartesianArray=function(e,t,n){C.defined("cartesians",e),t=t??re.default;let i=Number.MAX_VALUE,o=-Number.MAX_VALUE,r=Number.MAX_VALUE,s=-Number.MAX_VALUE,a=Number.MAX_VALUE,l=-Number.MAX_VALUE;for(let d=0,u=e.length;d=0?f.longitude:f.longitude+w.TWO_PI;r=Math.min(r,p),s=Math.max(s,p)}return o-i>s-r&&(i=r,o=s,o>w.PI&&(o=o-w.TWO_PI),i>w.PI&&(i=i-w.TWO_PI)),c(n)?(n.west=i,n.south=a,n.east=o,n.north=l,n):new En(i,a,o,l)};var eZe=new m,tZe=new m,nZe=new m,iZe=new m,oZe=new m,v3=new Array(5);for(let e=0;e0?i+=w.TWO_PI:r0&&(r+=w.TWO_PI),i=u))return c(n)?(n.west=a,n.south=d,n.east=l,n.north=u,n):new En(a,d,l,u)};En.simpleIntersection=function(e,t,n){C.typeOf.object("rectangle",e),C.typeOf.object("otherRectangle",t);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 c(n)?(n.west=i,n.south=o,n.east=r,n.north=s,n):new En(i,o,r,s)};En.union=function(e,t,n){C.typeOf.object("rectangle",e),C.typeOf.object("otherRectangle",t),c(n)||(n=new En);let i=e.east,o=e.west,r=t.east,s=t.west;i0?i+=w.TWO_PI:r0&&(r+=w.TWO_PI),io||w.equalsEpsilon(n,o,w.EPSILON14))&&(n=e.south&&i<=e.north};var rZe=new pe;En.subsample=function(e,t,n,i){C.typeOf.object("rectangle",e),t=t??re.default,n=n??0,c(i)||(i=[]);let o=0,r=e.north,s=e.south,a=e.east,l=e.west,d=rZe;d.height=n,d.longitude=l,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=l,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*w.PI_OVER_TWO,En.contains(e,d)&&(i[o]=t.cartographicToCartesian(d,i[o]),o++);return d.latitude===0&&(d.longitude=l,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.longitude=a,i[o]=t.cartographicToCartesian(d,i[o]),o++),i.length=o,i};En.subsection=function(e,t,n,i,o,r){if(C.typeOf.object("rectangle",e),C.typeOf.number.greaterThanOrEquals("westLerp",t,0),C.typeOf.number.lessThanOrEquals("westLerp",t,1),C.typeOf.number.greaterThanOrEquals("southLerp",n,0),C.typeOf.number.lessThanOrEquals("southLerp",n,1),C.typeOf.number.greaterThanOrEquals("eastLerp",i,0),C.typeOf.number.lessThanOrEquals("eastLerp",i,1),C.typeOf.number.greaterThanOrEquals("northLerp",o,0),C.typeOf.number.lessThanOrEquals("northLerp",o,1),C.typeOf.number.lessThanOrEquals("westLerp",t,i),C.typeOf.number.lessThanOrEquals("southLerp",n,o),c(r)||(r=new En),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=w.TWO_PI+e.east-e.west;r.west=w.negativePiToPi(e.west+t*a),r.east=w.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};En.MAX_VALUE=Object.freeze(new En(-Math.PI,-w.PI_OVER_TWO,Math.PI,w.PI_OVER_TWO));var de=En;function vr(e,t,n,i){this.x=e??0,this.y=t??0,this.width=n??0,this.height=i??0}vr.packedLength=4;vr.pack=function(e,t,n){return C.typeOf.object("value",e),C.defined("array",t),n=n??0,t[n++]=e.x,t[n++]=e.y,t[n++]=e.width,t[n]=e.height,t};vr.unpack=function(e,t,n){return C.defined("array",e),t=t??0,c(n)||(n=new vr),n.x=e[t++],n.y=e[t++],n.width=e[t++],n.height=e[t],n};vr.fromPoints=function(e,t){if(c(t)||(t=new vr),!c(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};vr.intersect=function(e,t){C.typeOf.object("left",e),C.typeOf.object("right",t);let n=e.x,i=e.y,o=t.x,r=t.y;return n>o+t.width||n+e.widthr+t.height?zt.OUTSIDE:zt.INTERSECTING};vr.equals=function(e,t){return e===t||c(e)&&c(t)&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height};vr.prototype.clone=function(e){return vr.clone(this,e)};vr.prototype.intersect=function(e){return vr.intersect(this,e)};vr.prototype.equals=function(e){return vr.equals(this,e)};var je=vr;var HIt=_(T(),1);var Xa={POINTS:oe.POINTS,LINES:oe.LINES,LINE_LOOP:oe.LINE_LOOP,LINE_STRIP:oe.LINE_STRIP,TRIANGLES:oe.TRIANGLES,TRIANGLE_STRIP:oe.TRIANGLE_STRIP,TRIANGLE_FAN:oe.TRIANGLE_FAN};Xa.isLines=function(e){return e===Xa.LINES||e===Xa.LINE_LOOP||e===Xa.LINE_STRIP};Xa.isTriangles=function(e){return e===Xa.TRIANGLES||e===Xa.TRIANGLE_STRIP||e===Xa.TRIANGLE_FAN};Xa.validate=function(e){return e===Xa.POINTS||e===Xa.LINES||e===Xa.LINE_LOOP||e===Xa.LINE_STRIP||e===Xa.TRIANGLES||e===Xa.TRIANGLE_STRIP||e===Xa.TRIANGLE_FAN};var ve=Object.freeze(Xa);var KIt=_(T(),1),fx=`in vec4 position; in vec2 textureCoordinates; out vec2 v_textureCoordinates; void main() { gl_Position = position; v_textureCoordinates = textureCoordinates; } `;var $It=_(T(),1);var Tr={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 uZ(e){e=e??z.EMPTY_OBJECT,this._boundingVolume=e.boundingVolume,this._orientedBoundingBox=e.orientedBoundingBox,this._modelMatrix=e.modelMatrix,this._primitiveType=e.primitiveType??ve.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 rc(e,t){return(e._flags&t)===t}function k0(e,t,n){n?e._flags|=t:e._flags&=~t}Object.defineProperties(uZ.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 rc(this,Tr.CULL)},set:function(e){rc(this,Tr.CULL)!==e&&(k0(this,Tr.CULL,e),this.dirty=!0)}},occlude:{get:function(){return rc(this,Tr.OCCLUDE)},set:function(e){rc(this,Tr.OCCLUDE)!==e&&(k0(this,Tr.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 rc(this,Tr.CAST_SHADOWS)},set:function(e){rc(this,Tr.CAST_SHADOWS)!==e&&(k0(this,Tr.CAST_SHADOWS,e),this.dirty=!0)}},receiveShadows:{get:function(){return rc(this,Tr.RECEIVE_SHADOWS)},set:function(e){rc(this,Tr.RECEIVE_SHADOWS)!==e&&(k0(this,Tr.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 rc(this,Tr.EXECUTE_IN_CLOSEST_FRUSTUM)},set:function(e){rc(this,Tr.EXECUTE_IN_CLOSEST_FRUSTUM)!==e&&(k0(this,Tr.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 rc(this,Tr.DEBUG_SHOW_BOUNDING_VOLUME)},set:function(e){rc(this,Tr.DEBUG_SHOW_BOUNDING_VOLUME)!==e&&(k0(this,Tr.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 rc(this,Tr.PICK_ONLY)},set:function(e){rc(this,Tr.PICK_ONLY)!==e&&(k0(this,Tr.PICK_ONLY,e),this.dirty=!0)}},depthForTranslucentClassification:{get:function(){return rc(this,Tr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION)},set:function(e){rc(this,Tr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION)!==e&&(k0(this,Tr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION,e),this.dirty=!0)}}});uZ.shallowClone=function(e,t){if(c(e))return c(t)||(t=new uZ),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};uZ.prototype.execute=function(e,t){e.draw(this,t)};var et=uZ;var gWt=_(T(),1);var sWt=_(T(),1);var nWt=_(T(),1);var fi={UNSIGNED_BYTE:oe.UNSIGNED_BYTE,UNSIGNED_SHORT:oe.UNSIGNED_SHORT,UNSIGNED_INT:oe.UNSIGNED_INT,FLOAT:oe.FLOAT,HALF_FLOAT:oe.HALF_FLOAT_OES,UNSIGNED_INT_24_8:oe.UNSIGNED_INT_24_8,UNSIGNED_SHORT_4_4_4_4:oe.UNSIGNED_SHORT_4_4_4_4,UNSIGNED_SHORT_5_5_5_1:oe.UNSIGNED_SHORT_5_5_5_1,UNSIGNED_SHORT_5_6_5:oe.UNSIGNED_SHORT_5_6_5};fi.toWebGLConstant=function(e,t){switch(e){case fi.UNSIGNED_BYTE:return oe.UNSIGNED_BYTE;case fi.UNSIGNED_SHORT:return oe.UNSIGNED_SHORT;case fi.UNSIGNED_INT:return oe.UNSIGNED_INT;case fi.FLOAT:return oe.FLOAT;case fi.HALF_FLOAT:return t.webgl2?oe.HALF_FLOAT:oe.HALF_FLOAT_OES;case fi.UNSIGNED_INT_24_8:return oe.UNSIGNED_INT_24_8;case fi.UNSIGNED_SHORT_4_4_4_4:return oe.UNSIGNED_SHORT_4_4_4_4;case fi.UNSIGNED_SHORT_5_5_5_1:return oe.UNSIGNED_SHORT_5_5_5_1;case fi.UNSIGNED_SHORT_5_6_5:return fi.UNSIGNED_SHORT_5_6_5}};fi.isPacked=function(e){return e===fi.UNSIGNED_INT_24_8||e===fi.UNSIGNED_SHORT_4_4_4_4||e===fi.UNSIGNED_SHORT_5_5_5_1||e===fi.UNSIGNED_SHORT_5_6_5};fi.sizeInBytes=function(e){switch(e){case fi.UNSIGNED_BYTE:return 1;case fi.UNSIGNED_SHORT:case fi.UNSIGNED_SHORT_4_4_4_4:case fi.UNSIGNED_SHORT_5_5_5_1:case fi.UNSIGNED_SHORT_5_6_5:case fi.HALF_FLOAT:return 2;case fi.UNSIGNED_INT:case fi.FLOAT:case fi.UNSIGNED_INT_24_8:return 4}};fi.validate=function(e){return e===fi.UNSIGNED_BYTE||e===fi.UNSIGNED_SHORT||e===fi.UNSIGNED_INT||e===fi.FLOAT||e===fi.HALF_FLOAT||e===fi.UNSIGNED_INT_24_8||e===fi.UNSIGNED_SHORT_4_4_4_4||e===fi.UNSIGNED_SHORT_5_5_5_1||e===fi.UNSIGNED_SHORT_5_6_5};fi.getTypedArrayConstructor=function(e){let t=fi.sizeInBytes(e);return t===Uint8Array.BYTES_PER_ELEMENT?Uint8Array:t===Uint16Array.BYTES_PER_ELEMENT?Uint16Array:t===Float32Array.BYTES_PER_ELEMENT&&e===fi.FLOAT?Float32Array:Uint32Array};var Ue=Object.freeze(fi);var at={DEPTH_COMPONENT:oe.DEPTH_COMPONENT,DEPTH_STENCIL:oe.DEPTH_STENCIL,ALPHA:oe.ALPHA,RED:oe.RED,RG:oe.RG,RGB:oe.RGB,RGBA:oe.RGBA,LUMINANCE:oe.LUMINANCE,LUMINANCE_ALPHA:oe.LUMINANCE_ALPHA,RGB_DXT1:oe.COMPRESSED_RGB_S3TC_DXT1_EXT,RGBA_DXT1:oe.COMPRESSED_RGBA_S3TC_DXT1_EXT,RGBA_DXT3:oe.COMPRESSED_RGBA_S3TC_DXT3_EXT,RGBA_DXT5:oe.COMPRESSED_RGBA_S3TC_DXT5_EXT,RGB_PVRTC_4BPPV1:oe.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,RGB_PVRTC_2BPPV1:oe.COMPRESSED_RGB_PVRTC_2BPPV1_IMG,RGBA_PVRTC_4BPPV1:oe.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,RGBA_PVRTC_2BPPV1:oe.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,RGBA_ASTC:oe.COMPRESSED_RGBA_ASTC_4x4_WEBGL,RGB_ETC1:oe.COMPRESSED_RGB_ETC1_WEBGL,RGB8_ETC2:oe.COMPRESSED_RGB8_ETC2,RGBA8_ETC2_EAC:oe.COMPRESSED_RGBA8_ETC2_EAC,RGBA_BC7:oe.COMPRESSED_RGBA_BPTC_UNORM};at.componentsLength=function(e){switch(e){case at.RGB:return 3;case at.RGBA:return 4;case at.LUMINANCE_ALPHA:case at.RG:return 2;case at.ALPHA:case at.RED:case at.LUMINANCE:return 1;default:return 1}};at.validate=function(e){return e===at.DEPTH_COMPONENT||e===at.DEPTH_STENCIL||e===at.ALPHA||e===at.RED||e===at.RG||e===at.RGB||e===at.RGBA||e===at.LUMINANCE||e===at.LUMINANCE_ALPHA||e===at.RGB_DXT1||e===at.RGBA_DXT1||e===at.RGBA_DXT3||e===at.RGBA_DXT5||e===at.RGB_PVRTC_4BPPV1||e===at.RGB_PVRTC_2BPPV1||e===at.RGBA_PVRTC_4BPPV1||e===at.RGBA_PVRTC_2BPPV1||e===at.RGBA_ASTC||e===at.RGB_ETC1||e===at.RGB8_ETC2||e===at.RGBA8_ETC2_EAC||e===at.RGBA_BC7};at.isColorFormat=function(e){return e===at.RED||e===at.ALPHA||e===at.RGB||e===at.RGBA||e===at.LUMINANCE||e===at.LUMINANCE_ALPHA};at.isDepthFormat=function(e){return e===at.DEPTH_COMPONENT||e===at.DEPTH_STENCIL};at.isCompressedFormat=function(e){return e===at.RGB_DXT1||e===at.RGBA_DXT1||e===at.RGBA_DXT3||e===at.RGBA_DXT5||e===at.RGB_PVRTC_4BPPV1||e===at.RGB_PVRTC_2BPPV1||e===at.RGBA_PVRTC_4BPPV1||e===at.RGBA_PVRTC_2BPPV1||e===at.RGBA_ASTC||e===at.RGB_ETC1||e===at.RGB8_ETC2||e===at.RGBA8_ETC2_EAC||e===at.RGBA_BC7};at.isDXTFormat=function(e){return e===at.RGB_DXT1||e===at.RGBA_DXT1||e===at.RGBA_DXT3||e===at.RGBA_DXT5};at.isPVRTCFormat=function(e){return e===at.RGB_PVRTC_4BPPV1||e===at.RGB_PVRTC_2BPPV1||e===at.RGBA_PVRTC_4BPPV1||e===at.RGBA_PVRTC_2BPPV1};at.isASTCFormat=function(e){return e===at.RGBA_ASTC};at.isETC1Format=function(e){return e===at.RGB_ETC1};at.isETC2Format=function(e){return e===at.RGB8_ETC2||e===at.RGBA8_ETC2_EAC};at.isBC7Format=function(e){return e===at.RGBA_BC7};at.compressedTextureSizeInBytes=function(e,t,n){switch(e){case at.RGB_DXT1:case at.RGBA_DXT1:case at.RGB_ETC1:case at.RGB8_ETC2:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*8;case at.RGBA_DXT3:case at.RGBA_DXT5:case at.RGBA_ASTC:case at.RGBA8_ETC2_EAC:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*16;case at.RGB_PVRTC_4BPPV1:case at.RGBA_PVRTC_4BPPV1:return Math.floor((Math.max(t,8)*Math.max(n,8)*4+7)/8);case at.RGB_PVRTC_2BPPV1:case at.RGBA_PVRTC_2BPPV1:return Math.floor((Math.max(t,16)*Math.max(n,8)*2+7)/8);case at.RGBA_BC7:return Math.ceil(t/4)*Math.ceil(n/4)*16;default:return 0}};at.textureSizeInBytes=function(e,t,n,i){let o=at.componentsLength(e);return Ue.isPacked(t)&&(o=1),o*Ue.sizeInBytes(t)*n*i};at.alignmentInBytes=function(e,t,n){let i=at.textureSizeInBytes(e,t,n,1)%4;return i===0?4:i===2?2:1};at.createTypedArray=function(e,t,n,i){let o=Ue.getTypedArrayConstructor(t),r=at.componentsLength(e)*n*i;return new o(r)};at.flipY=function(e,t,n,i,o){if(o===1)return e;let r=at.createTypedArray(t,n,i,o),s=at.componentsLength(t),a=i*s;for(let l=0;li)throw new L("The number of color attachments exceeds the number supported.");for(let l=0;li)throw new L("The number of color attachments exceeds the number supported.");for(let l=0;l=this._colorTextures.length)throw new L("index is required, must be greater than or equal to zero and must be less than the number of color attachments.");return this._colorTextures[e]};Em.prototype.getColorRenderbuffer=function(e){if(!c(e)||e<0||e>=this._colorRenderbuffers.length)throw new L("index is required, must be greater than or equal to zero and must be less than the number of color attachments.");return this._colorRenderbuffers[e]};Em.prototype.isDestroyed=function(){return!1};Em.prototype.destroy=function(){if(this.destroyAttachments){let e=this._colorTextures;for(let n=0;nmt.maximumAliasedLineWidth)throw new L("renderState.lineWidth is out of range. Check minimumAliasedLineWidth and maximumAliasedLineWidth.");if(!qr.validate(this.frontFace))throw new L("Invalid renderState.frontFace.");if(!cZe(this.cull.face))throw new L("Invalid renderState.cull.face.");if(this.scissorTest.rectangle.width<0||this.scissorTest.rectangle.height<0)throw new L("renderState.scissorTest.rectangle.width and renderState.scissorTest.rectangle.height must be greater than or equal to zero.");if(this.depthRange.near>this.depthRange.far)throw new L("renderState.depthRange.near can not be greater than renderState.depthRange.far.");if(this.depthRange.near<0)throw new L("renderState.depthRange.near must be greater than or equal to zero.");if(this.depthRange.far>1)throw new L("renderState.depthRange.far must be less than or equal to one.");if(!lZe(this.depthTest.func))throw new L("Invalid renderState.depthTest.func.");if(this.blending.color.red<0||this.blending.color.red>1||this.blending.color.green<0||this.blending.color.green>1||this.blending.color.blue<0||this.blending.color.blue>1||this.blending.color.alpha<0||this.blending.color.alpha>1)throw new L("renderState.blending.color components must be greater than or equal to zero and less than or equal to one.");if(!P$(this.blending.equationRgb))throw new L("Invalid renderState.blending.equationRgb.");if(!P$(this.blending.equationAlpha))throw new L("Invalid renderState.blending.equationAlpha.");if(!BN(this.blending.functionSourceRgb))throw new L("Invalid renderState.blending.functionSourceRgb.");if(!BN(this.blending.functionSourceAlpha))throw new L("Invalid renderState.blending.functionSourceAlpha.");if(!BN(this.blending.functionDestinationRgb))throw new L("Invalid renderState.blending.functionDestinationRgb.");if(!BN(this.blending.functionDestinationAlpha))throw new L("Invalid renderState.blending.functionDestinationAlpha.");if(!v$(this.stencilTest.frontFunction))throw new L("Invalid renderState.stencilTest.frontFunction.");if(!v$(this.stencilTest.backFunction))throw new L("Invalid renderState.stencilTest.backFunction.");if(!$S(this.stencilTest.frontOperation.fail))throw new L("Invalid renderState.stencilTest.frontOperation.fail.");if(!$S(this.stencilTest.frontOperation.zFail))throw new L("Invalid renderState.stencilTest.frontOperation.zFail.");if(!$S(this.stencilTest.frontOperation.zPass))throw new L("Invalid renderState.stencilTest.frontOperation.zPass.");if(!$S(this.stencilTest.backOperation.fail))throw new L("Invalid renderState.stencilTest.backOperation.fail.");if(!$S(this.stencilTest.backOperation.zFail))throw new L("Invalid renderState.stencilTest.backOperation.zFail.");if(!$S(this.stencilTest.backOperation.zPass))throw new L("Invalid renderState.stencilTest.backOperation.zPass.");if(c(this.viewport)){if(this.viewport.width<0)throw new L("renderState.viewport.width must be greater than or equal to zero.");if(this.viewport.height<0)throw new L("renderState.viewport.height must be greater than or equal to zero.");if(this.viewport.width>mt.maximumViewportWidth)throw new L(`renderState.viewport.width must be less than or equal to the maximum viewport width (${mt.maximumViewportWidth.toString()}). Check maximumViewportWidth.`);if(this.viewport.height>mt.maximumViewportHeight)throw new L(`renderState.viewport.height must be less than or equal to the maximum viewport height (${mt.maximumViewportHeight.toString()}). Check maximumViewportHeight.`)}this.id=0,this._applyFunctions=[]}var dZe=0,sh={};ah.fromCache=function(e){let t=JSON.stringify(e),n=sh[t];if(c(n))return++n.referenceCount,n.state;let i=new ah(e),o=JSON.stringify(i);return n=sh[o],c(n)||(i.id=dZe++,i=mZ(i),n={referenceCount:0,state:i},sh[o]=n),++n.referenceCount,sh[t]={referenceCount:1,state:n.state},n.state};ah.removeFromCache=function(e){let t=new ah(e),n=JSON.stringify(t),i=sh[n],o=JSON.stringify(e),r=sh[o];c(r)&&(--r.referenceCount,r.referenceCount===0&&(delete sh[o],c(i)&&--i.referenceCount)),c(i)&&i.referenceCount===0&&delete sh[n]};ah.getCache=function(){return sh};ah.clearCache=function(){sh={}};function hx(e,t,n){n?e.enable(t):e.disable(t)}function F$(e,t){e.frontFace(t.frontFace)}function A$(e,t){let n=t.cull,i=n.enabled;hx(e,e.CULL_FACE,i),i&&e.cullFace(n.face)}function M$(e,t){e.lineWidth(t.lineWidth)}function N$(e,t){let n=t.polygonOffset,i=n.enabled;hx(e,e.POLYGON_OFFSET_FILL,i),i&&e.polygonOffset(n.factor,n.units)}function k$(e,t,n){let i=t.scissorTest,o=c(n.scissorTest)?n.scissorTest.enabled:i.enabled;if(hx(e,e.SCISSOR_TEST,o),o){let r=c(n.scissorTest)?n.scissorTest.rectangle:i.rectangle;e.scissor(r.x,r.y,r.width,r.height)}}function U$(e,t){let n=t.depthRange;e.depthRange(n.near,n.far)}function O$(e,t){let n=t.depthTest,i=n.enabled;hx(e,e.DEPTH_TEST,i),i&&e.depthFunc(n.func)}function D$(e,t){let n=t.colorMask;e.colorMask(n.red,n.green,n.blue,n.alpha)}function B$(e,t){e.depthMask(t.depthMask)}function Y$(e,t){e.stencilMask(t.stencilMask)}function uZe(e,t){e.blendColor(t.red,t.green,t.blue,t.alpha)}function H$(e,t,n){let i=t.blending,o=c(n.blendingEnabled)?n.blendingEnabled:i.enabled;hx(e,e.BLEND,o),o&&(uZe(e,i.color),e.blendEquationSeparate(i.equationRgb,i.equationAlpha),e.blendFuncSeparate(i.functionSourceRgb,i.functionDestinationRgb,i.functionSourceAlpha,i.functionDestinationAlpha))}function z$(e,t){let n=t.stencilTest,i=n.enabled;if(hx(e,e.STENCIL_TEST,i),i){let o=n.frontFunction,r=n.backFunction,s=n.reference,a=n.mask;e.stencilFunc(o,s,a),e.stencilFuncSeparate(e.BACK,r,s,a),e.stencilFuncSeparate(e.FRONT,o,s,a);let l=n.frontOperation,d=l.fail,u=l.zFail,f=l.zPass;e.stencilOpSeparate(e.FRONT,d,u,f);let p=n.backOperation,y=p.fail,h=p.zFail,g=p.zPass;e.stencilOpSeparate(e.BACK,y,h,g)}}function K$(e,t){let n=t.sampleCoverage,i=n.enabled;hx(e,e.SAMPLE_COVERAGE,i),i&&e.sampleCoverage(n.value,n.invert)}var mZe=new je;function J$(e,t,n){let i=t.viewport??n.viewport;c(i)||(i=mZe,i.width=n.context.drawingBufferWidth,i.height=n.context.drawingBufferHeight),n.context.uniformState.viewport=i,e.viewport(i.x,i.y,i.width,i.height)}ah.apply=function(e,t,n){F$(e,t),A$(e,t),M$(e,t),N$(e,t),U$(e,t),O$(e,t),D$(e,t),B$(e,t),Y$(e,t),z$(e,t),K$(e,t),k$(e,t,n),H$(e,t,n),J$(e,t,n)};function fZe(e,t){let n=[];return e.frontFace!==t.frontFace&&n.push(F$),(e.cull.enabled!==t.cull.enabled||e.cull.face!==t.cull.face)&&n.push(A$),e.lineWidth!==t.lineWidth&&n.push(M$),(e.polygonOffset.enabled!==t.polygonOffset.enabled||e.polygonOffset.factor!==t.polygonOffset.factor||e.polygonOffset.units!==t.polygonOffset.units)&&n.push(N$),(e.depthRange.near!==t.depthRange.near||e.depthRange.far!==t.depthRange.far)&&n.push(U$),(e.depthTest.enabled!==t.depthTest.enabled||e.depthTest.func!==t.depthTest.func)&&n.push(O$),(e.colorMask.red!==t.colorMask.red||e.colorMask.green!==t.colorMask.green||e.colorMask.blue!==t.colorMask.blue||e.colorMask.alpha!==t.colorMask.alpha)&&n.push(D$),e.depthMask!==t.depthMask&&n.push(B$),e.stencilMask!==t.stencilMask&&n.push(Y$),(e.stencilTest.enabled!==t.stencilTest.enabled||e.stencilTest.frontFunction!==t.stencilTest.frontFunction||e.stencilTest.backFunction!==t.stencilTest.backFunction||e.stencilTest.reference!==t.stencilTest.reference||e.stencilTest.mask!==t.stencilTest.mask||e.stencilTest.frontOperation.fail!==t.stencilTest.frontOperation.fail||e.stencilTest.frontOperation.zFail!==t.stencilTest.frontOperation.zFail||e.stencilTest.backOperation.fail!==t.stencilTest.backOperation.fail||e.stencilTest.backOperation.zFail!==t.stencilTest.backOperation.zFail||e.stencilTest.backOperation.zPass!==t.stencilTest.backOperation.zPass)&&n.push(z$),(e.sampleCoverage.enabled!==t.sampleCoverage.enabled||e.sampleCoverage.value!==t.sampleCoverage.value||e.sampleCoverage.invert!==t.sampleCoverage.invert)&&n.push(K$),n}ah.partialApply=function(e,t,n,i,o,r){if(t!==n){let u=n._applyFunctions[t.id];c(u)||(u=fZe(t,n),n._applyFunctions[t.id]=u);let f=u.length;for(let p=0;p0&&console.log(`${ch}Vertex shader compile log: ${l}`),l=e.getShaderInfoLog(r),c(l)&&l.length>0&&console.log(`${ch}Fragment shader compile log: ${l}`),l=e.getProgramInfoLog(s),c(l)&&l.length>0&&console.log(`${ch}Shader program link log: ${l}`)),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)?(l=e.getProgramInfoLog(s),console.error(`${ch}Shader program link log: ${l}`),f(o,"vertex"),f(r,"fragment"),d=`Program failed to link. Link log: ${l}`):(l=e.getShaderInfoLog(o),console.error(`${ch}Vertex shader compile log: ${l}`),console.error(`${ch} Vertex shader source: ${n}`),d=`Vertex shader failed to compile. Compile log: ${l}`):(l=e.getShaderInfoLog(r),console.error(`${ch}Fragment shader compile log: ${l}`),console.error(`${ch} Fragment shader source: ${i}`),d=`Fragment shader failed to compile. Compile log: ${l}`),e.deleteShader(o),e.deleteShader(r),e.deleteProgram(s),new le(d);function f(p,y){if(!c(u))return;let h=u.getTranslatedShaderSource(p);if(h===""){console.error(`${ch}${y} shader translation failed.`);return}console.error(`${ch}Translated ${y} shaderSource: ${h}`)}}function ZZe(e,t,n){let i={};for(let o=0;o=0){if(u=n[d.slice(0,h)],!c(u))continue;f=u._locations,f.length<=1&&(p=u.value,y=e.getUniformLocation(t,d),y!==null&&(f.push(y),p.push(e.getUniform(t,y))))}else{f=[];for(let g=0;g4)throw new L("options.componentsPerAttribute must be between 1 and 4.");if(!c(e.values))throw new L("options.values is required.");this.componentDatatype=e.componentDatatype,this.componentsPerAttribute=e.componentsPerAttribute,this.normalize=e.normalize??!1,this.values=e.values}var Ee=YZe;var MPt=_(T(),1);var wPt=_(T(),1);var pPt=_(T(),1);function eC(e,t,n,i,o){this._format=e,this._datatype=t,this._width=n,this._height=i,this._buffer=o}Object.defineProperties(eC.prototype,{internalFormat:{get:function(){return this._format}},pixelDatatype:{get:function(){return this._datatype}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},bufferView:{get:function(){return this._buffer}},arrayBufferView:{get:function(){return this._buffer}}});eC.clone=function(e){if(c(e))return new eC(e._format,e._datatype,e._width,e._height,e._buffer)};eC.prototype.clone=function(){return eC.clone(this)};var yZ=eC;var ZPt=_(T(),1),Cee=_(cd(),1);function Vee(){if(!c(la._canTransferArrayBuffer)){let e=O3("transferTypedArrayTest");e.postMessage=e.webkitPostMessage??e.postMessage;let t=99,n=new Int8Array([t]);try{e.postMessage({array:n},[n.buffer])}catch{return la._canTransferArrayBuffer=!1,la._canTransferArrayBuffer}la._canTransferArrayBuffer=new Promise(i=>{e.onmessage=function(o){let r=o.data.array,s=c(r)&&r[0]===t;i(s),e.terminate(),la._canTransferArrayBuffer=s}})}return la._canTransferArrayBuffer}var U3=new ye;function k3(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 O3(e){let t=new Cee.default(e),n=t.scheme().length!==0&&t.fragment().length===0,i=e.replace(/\.js$/,""),o={},r,s;if(F0(e))s=e;else if(!n){let a=on(`${la._workerModulePrefix}/${i}.js`);F0(a)&&(s=a)}if(s){let a=`import "${s}";`;return r=k3(a),o.type="module",new Worker(r,o)}if(!n&&typeof CESIUM_WORKERS<"u"){let a=` importScripts("${k3(CESIUM_WORKERS)}"); CesiumWorkers["${i}"](); `;return r=k3(a),new Worker(r,o)}if(r=e,n||(r=on(`${la._workerModulePrefix+i}.js`)),!Ot.supportsEsmWebWorkers())throw new le("This browser is not supported. Please update your browser to continue.");return o.type="module",new Worker(r,o)}async function HZe(e,t){let n={modulePath:void 0,wasmBinaryFile:void 0,wasmBinary:void 0};if(!Ot.supportsWebAssembly()){if(!c(t.fallbackModulePath))throw new le(`This browser does not support Web Assembly, and no backup module was provided for ${e._workerPath}`);return n.modulePath=on(t.fallbackModulePath),n}n.wasmBinaryFile=on(t.wasmBinaryFile);let i=await Ge.fetchArrayBuffer({url:n.wasmBinaryFile});return n.wasmBinary=i,n}function la(e,t){this._workerPath=e,this._maximumActiveTasks=t??Number.POSITIVE_INFINITY,this._activeTasks=0,this._nextID=0,this._webAssemblyPromise=void 0}var zZe=(e,t,n,i)=>{let o=({data:r})=>{if(r.id===t){if(c(r.error)){let s=r.error;s.name==="RuntimeError"?(s=new le(r.error.message),s.stack=r.error.stack):s.name==="DeveloperError"?(s=new L(r.error.message),s.stack=r.error.stack):s.name==="Error"&&(s=new Error(r.error.message),s.stack=r.error.stack),U3.raiseEvent(s),i(s)}else U3.raiseEvent(),n(r.result);e.removeEventListener("message",o)}};return o},KZe=[];async function JZe(e,t,n){let i=await Promise.resolve(Vee());c(n)?i||(n.length=0):n=KZe;let o=e._nextID++,r=new Promise((s,a)=>{e._worker.addEventListener("message",zZe(e._worker,o,s,a))});return e._worker.postMessage({id:o,baseUrl:on.getCesiumBaseUrl().url,parameters:t,canTransferArrayBuffer:i},n),r}async function QZe(e,t,n){++e._activeTasks;try{let i=await JZe(e,t,n);return--e._activeTasks,i}catch(i){throw--e._activeTasks,i}}la.prototype.scheduleTask=function(e,t){if(c(this._worker)||(this._worker=O3(this._workerPath)),!(this._activeTasks>=this._maximumActiveTasks))return QZe(this,e,t)};la.prototype.initWebAssemblyModule=async function(e){if(c(this._webAssemblyPromise))return this._webAssemblyPromise;let t=async()=>{let n=this._worker=O3(this._workerPath),i=await HZe(this,e),o=await Promise.resolve(Vee()),r,s=i.wasmBinary;c(s)&&o&&(r=[s]);let a=new Promise((l,d)=>{n.onmessage=function({data:u}){c(u)?l(u.result):d(new le("Could not configure wasm module"))}});return n.postMessage({canTransferArrayBuffer:o,parameters:{webAssemblyConfig:i}},r),a};return this._webAssemblyPromise=t(),this._webAssemblyPromise};la.prototype.isDestroyed=function(){return!1};la.prototype.destroy=function(){return c(this._worker)&&this._worker.terminate(),he(this)};la.taskCompletedEvent=U3;la._defaultWorkerModulePrefix="Workers/";la._workerModulePrefix=la._defaultWorkerModulePrefix;la._canTransferArrayBuffer=void 0;var gi=la;function Rp(){}Rp._transcodeTaskProcessor=new gi("transcodeKTX2",Number.POSITIVE_INFINITY);Rp._readyPromise=void 0;function jZe(){let e=Rp._transcodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/basis_transcoder.wasm"}).then(function(t){if(t)return Rp._transcodeTaskProcessor;throw new le("KTX2 transcoder could not be initialized.")});Rp._readyPromise=e}Rp.transcode=function(e,t){return C.defined("supportedTargetFormats",t),c(Rp._readyPromise)||jZe(),Rp._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;rs.x&&m.clone(n,s),Fa.y&&m.clone(n,a),Nl.z&&m.clone(n,l)}let f=m.magnitudeSquared(m.subtract(s,i,da)),p=m.magnitudeSquared(m.subtract(a,o,da)),y=m.magnitudeSquared(m.subtract(l,r,da)),h=i,g=s,x=f;p>x&&(x=p,h=o,g=a),y>x&&(x=y,h=r,g=l);let S=q3;S.x=(h.x+g.x)*.5,S.y=(h.y+g.y)*.5,S.z=(h.z+g.z)*.5;let V=m.magnitudeSquared(m.subtract(g,S,da)),Z=Math.sqrt(V),R=$3;R.x=i.x,R.y=o.y,R.z=r.z;let E=eY;E.x=s.x,E.y=a.y,E.z=l.z;let I=m.midpoint(R,E,tY),v=0;for(u=0;uv&&(v=P);let F=m.magnitudeSquared(m.subtract(n,S,da));if(F>V){let N=Math.sqrt(F);Z=(Z+N)*.5,V=Z*Z;let b=N-Z;S.x=(Z*S.x+b*n.x)/N,S.y=(Z*S.y+b*n.y)/N,S.z=(Z*S.z+b*n.z)/N}}return Zl.x&&m.clone(o,l),bd.y&&m.clone(o,d),Gu.z&&m.clone(o,u)}let y=m.magnitudeSquared(m.subtract(l,r,da)),h=m.magnitudeSquared(m.subtract(d,s,da)),g=m.magnitudeSquared(m.subtract(u,a,da)),x=r,S=l,V=y;h>V&&(V=h,x=s,S=d),g>V&&(V=g,x=a,S=u);let Z=q3;Z.x=(x.x+S.x)*.5,Z.y=(x.y+S.y)*.5,Z.z=(x.z+S.z)*.5;let R=m.magnitudeSquared(m.subtract(S,Z,da)),E=Math.sqrt(R),I=$3;I.x=r.x,I.y=s.y,I.z=a.z;let v=eY;v.x=l.x,v.y=d.y,v.z=u.z;let P=m.midpoint(I,v,tY),F=0;for(p=0;pF&&(F=N);let b=m.magnitudeSquared(m.subtract(o,Z,da));if(b>R){let G=Math.sqrt(b);E=(E+G)*.5,R=E*E;let X=G-E;Z.x=(E*Z.x+X*o.x)/G,Z.y=(E*Z.y+X*o.y)/G,Z.z=(E*Z.z+X*o.z)/G}}return Ea.x&&m.clone(i,a),Nl.y&&m.clone(i,l),bd.z&&m.clone(i,d)}let p=m.magnitudeSquared(m.subtract(a,o,da)),y=m.magnitudeSquared(m.subtract(l,r,da)),h=m.magnitudeSquared(m.subtract(d,s,da)),g=o,x=a,S=p;y>S&&(S=y,g=r,x=l),h>S&&(S=h,g=s,x=d);let V=q3;V.x=(g.x+x.x)*.5,V.y=(g.y+x.y)*.5,V.z=(g.z+x.z)*.5;let Z=m.magnitudeSquared(m.subtract(x,V,da)),R=Math.sqrt(Z),E=$3;E.x=o.x,E.y=r.y,E.z=s.z;let I=eY;I.x=a.x,I.y=l.y,I.z=d.z;let v=m.midpoint(E,I,tY),P=0;for(f=0;fP&&(P=F);let N=m.magnitudeSquared(m.subtract(i,V,da));if(N>Z){let b=Math.sqrt(N);R=(R+b)*.5,Z=R*R;let G=b-R;V.x=(R*V.x+G*i.x)/b,V.y=(R*V.y+G*i.y)/b,V.z=(R*V.z+G*i.z)/b}}return R=l+s)return e.clone(n),n;if(s>=l+o)return t.clone(n),n;let d=(o+l+s)*.5,u=m.multiplyByScalar(a,(-o+d)/l,dRe);return m.add(u,i,u),m.clone(u,n.center),n.radius=d,n};var uRe=new m;pn.expand=function(e,t,n){C.typeOf.object("sphere",e),C.typeOf.object("point",t),n=pn.clone(e,n);let i=m.magnitude(m.subtract(t,n.center,uRe));return i>n.radius&&(n.radius=i),n};pn.intersectPlane=function(e,t){C.typeOf.object("sphere",e),C.typeOf.object("plane",t);let n=e.center,i=e.radius,o=t.normal,r=m.dot(o,n)+t.distance;return r<-i?zt.OUTSIDE:rw.EPSILON6)throw new L("vector must be normalized.");if(n.x=e.x/(Math.abs(e.x)+Math.abs(e.y)+Math.abs(e.z)),n.y=e.y/(Math.abs(e.x)+Math.abs(e.y)+Math.abs(e.z)),e.z<0){let o=n.x,r=n.y;n.x=(1-Math.abs(r))*w.signNotZero(o),n.y=(1-Math.abs(o))*w.signNotZero(r)}return n.x=w.toSNorm(n.x,t),n.y=w.toSNorm(n.y,t),n};go.octEncode=function(e,t){return go.octEncodeInRange(e,255,t)};var xZ=new D,Aee=new Uint8Array(1);function zN(e){return Aee[0]=e,Aee[0]}go.octEncodeToCartesian4=function(e,t){return go.octEncodeInRange(e,65535,xZ),t.x=zN(xZ.x*vee),t.y=zN(xZ.x),t.z=zN(xZ.y*vee),t.w=zN(xZ.y),t};go.octDecodeInRange=function(e,t,n,i){if(C.defined("result",i),e<0||e>n||t<0||t>n)throw new L(`x and y must be unsigned normalized integers between 0 and ${n}`);if(i.x=w.fromSNorm(e,n),i.y=w.fromSNorm(t,n),i.z=1-(Math.abs(i.x)+Math.abs(i.y)),i.z<0){let o=i.x;i.x=(1-Math.abs(i.y))*w.signNotZero(o),i.y=(1-Math.abs(o))*w.signNotZero(i.y)}return m.normalize(i,i)};go.octDecode=function(e,t,n){return go.octDecodeInRange(e,t,255,n)};go.octDecodeFromCartesian4=function(e,t){C.typeOf.object("encoded",e),C.typeOf.object("result",t);let n=e.x,i=e.y,o=e.z,r=e.w;if(n<0||n>255||i<0||i>255||o<0||o>255||r<0||r>255)throw new L("x, y, z, and w must be unsigned normalized integers between 0 and 255");let s=n*Fee+i,a=o*Fee+r;return go.octDecodeInRange(s,a,65535,t)};go.octPackFloat=function(e){return C.defined("encoded",e),256*e.x+e.y};var oY=new D;go.octEncodeFloat=function(e){return go.octEncode(e,oY),go.octPackFloat(oY)};go.octDecodeFloat=function(e,t){C.defined("value",e);let n=e/256,i=Math.floor(n),o=(n-i)*256;return go.octDecode(i,o,t)};go.octPack=function(e,t,n,i){C.defined("v1",e),C.defined("v2",t),C.defined("v3",n),C.defined("result",i);let o=go.octEncodeFloat(e),r=go.octEncodeFloat(t),s=go.octEncode(n,oY);return i.x=65536*s.x+o,i.y=65536*s.y+r,i};go.octUnpack=function(e,t,n,i){C.defined("packed",e),C.defined("v1",t),C.defined("v2",n),C.defined("v3",i);let o=e.x/65536,r=Math.floor(o),s=(o-r)*65536;o=e.y/65536;let a=Math.floor(o),l=(o-a)*65536;go.octDecodeFloat(s,t),go.octDecodeFloat(l,n),go.octDecode(r,a,i)};go.compressTextureCoordinates=function(e){C.defined("textureCoordinates",e);let t=e.x*4095|0,n=e.y*4095|0;return 4096*t+n};go.decompressTextureCoordinates=function(e,t){C.defined("compressed",e),C.defined("result",t);let n=e/4096,i=Math.floor(n);return t.x=i/4095,t.y=(e-i*4096)/4095,t};function iY(e){return e>>1^-(e&1)}go.zigZagDeltaDecode=function(e,t,n){C.defined("uBuffer",e),C.defined("vBuffer",t),C.typeOf.number.equals("uBuffer.length","vBuffer.length",e.length,t.length),c(n)&&C.typeOf.number.equals("uBuffer.length","heightBuffer.length",e.length,n.length);let i=e.length,o=0,r=0,s=0;for(let a=0;a>11,f=d>>5&r,p=d&o,y=3*l;t[y]=u*s,t[y+1]=f*a,t[y+2]=p*s}return t};var Fn=go;var q2t=_(T(),1);var Mee=new m,Nee=new m,kee=new m;function SRe(e,t,n,i,o){C.defined("point",e),C.defined("p0",t),C.defined("p1",n),C.defined("p2",i),c(o)||(o=new m);let r,s,a,l,d,u,f,p;if(c(t.z)){if(m.equalsEpsilon(e,t,w.EPSILON14))return m.clone(m.UNIT_X,o);if(m.equalsEpsilon(e,n,w.EPSILON14))return m.clone(m.UNIT_Y,o);if(m.equalsEpsilon(e,i,w.EPSILON14))return m.clone(m.UNIT_Z,o);r=m.subtract(n,t,Mee),s=m.subtract(i,t,Nee),a=m.subtract(e,t,kee),l=m.dot(r,r),d=m.dot(r,s),u=m.dot(r,a),f=m.dot(s,s),p=m.dot(s,a)}else{if(D.equalsEpsilon(e,t,w.EPSILON14))return m.clone(m.UNIT_X,o);if(D.equalsEpsilon(e,n,w.EPSILON14))return m.clone(m.UNIT_Y,o);if(D.equalsEpsilon(e,i,w.EPSILON14))return m.clone(m.UNIT_Z,o);r=D.subtract(n,t,Mee),s=D.subtract(i,t,Nee),a=D.subtract(e,t,kee),l=D.dot(r,r),d=D.dot(r,s),u=D.dot(r,a),f=D.dot(s,s),p=D.dot(s,a)}o.y=f*u-d*p,o.z=l*p-d*u;let y=l*f-d*d;if(y!==0)return o.y/=y,o.z/=y,o.x=1-o.y-o.z,o}var px=SRe;var ivt=_(T(),1);function lh(){this.high=m.clone(m.ZERO),this.low=m.clone(m.ZERO)}lh.encode=function(e,t){C.typeOf.number("value",e),c(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 Gp={high:0,low:0};lh.fromCartesian=function(e,t){C.typeOf.object("cartesian",e),c(t)||(t=new lh);let n=t.high,i=t.low;return lh.encode(e.x,Gp),n.x=Gp.high,i.x=Gp.low,lh.encode(e.y,Gp),n.y=Gp.high,i.y=Gp.low,lh.encode(e.z,Gp),n.z=Gp.high,i.z=Gp.low,t};var rY=new lh;lh.writeElements=function(e,t,n){C.defined("cartesianArray",t),C.typeOf.number("index",n),C.typeOf.number.greaterThanOrEquals("index",n,0),lh.fromCartesian(e,rY);let i=rY.high,o=rY.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 Bn=lh;var Pvt=_(T(),1);var avt=_(T(),1);var sY={};sY.computeDiscriminant=function(e,t,n){if(typeof e!="number")throw new L("a is a required number.");if(typeof t!="number")throw new L("b is a required number.");if(typeof n!="number")throw new L("c is a required number.");return t*t-4*e*n};function Uee(e,t,n){let i=e+t;return w.sign(e)!==w.sign(t)&&Math.abs(i/Math.max(Math.abs(e),Math.abs(t)))d&&d/l0?[a/e,n/a]:[n/a,a/e]};var Fc=sY;var yvt=_(T(),1);var uvt=_(T(),1);var cY={};cY.computeDiscriminant=function(e,t,n,i){if(typeof e!="number")throw new L("a is a required number.");if(typeof t!="number")throw new L("b is a required number.");if(typeof n!="number")throw new L("c is a required number.");if(typeof i!="number")throw new L("d is a required number.");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 aY(e,t,n,i){let o=e,r=t/3,s=n/3,a=i,l=o*s,d=r*a,u=r*r,f=s*s,p=o*s-u,y=o*a-r*s,h=r*a-f,g=4*p*h-y*y,x,S;if(g<0){let K,Q,ie;u*d>=l*f?(K=o,Q=p,ie=-2*r*p+o*y):(K=a,Q=h,ie=-a*y+2*s*h);let $=-(ie<0?-1:1)*Math.abs(K)*Math.sqrt(-g);S=-ie+$;let ne=S/2,be=ne<0?-Math.pow(-ne,1/3):Math.pow(ne,1/3),Ce=S===$?-be:-Q/be;return x=Q<=0?be+Ce:-ie/(be*be+Ce*Ce+Q),u*d>=l*f?[(x-r)/o]:[-a/(x+s)]}let V=p,Z=-2*r*p+o*y,R=h,E=-a*y+2*s*h,I=Math.sqrt(g),v=Math.sqrt(3)/2,P=Math.abs(Math.atan2(o*I,-Z)/3);x=2*Math.sqrt(-V);let F=Math.cos(P);S=x*F;let N=x*(-F/2-v*Math.sin(P)),b=S+N>2*r?S-r:N-r,G=o,X=b/G;P=Math.abs(Math.atan2(a*I,-E)/3),x=2*Math.sqrt(-R),F=Math.cos(P),S=x*F,N=x*(-F/2-v*Math.sin(P));let W=-a,A=S+N<2*s?S+s:N+s,k=W/A,B=G*A,O=-b*A-G*W,H=b*W,U=(s*O-r*H)/(-r*O+s*B);return X<=U?X<=k?U<=k?[X,U,k]:[X,k,U]:[k,X,U]:X<=k?[U,X,k]:U<=k?[U,k,X]:[k,U,X]}cY.computeRealRoots=function(e,t,n,i){if(typeof e!="number")throw new L("a is a required number.");if(typeof t!="number")throw new L("b is a required number.");if(typeof n!="number")throw new L("c is a required number.");if(typeof i!="number")throw new L("d is a required number.");let o,r;if(e===0)return Fc.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=Fc.computeRealRoots(e,0,n),o.Length===0?[0]:[o[0],0,o[1]];return aY(e,0,n,i)}else{if(n===0)return i===0?(r=-t/e,r<0?[r,0,0]:[0,0,r]):aY(e,t,0,i);if(i===0)return o=Fc.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 aY(e,t,n,i)};var bx=cY;var lY={};lY.computeDiscriminant=function(e,t,n,i,o){if(typeof e!="number")throw new L("a is a required number.");if(typeof t!="number")throw new L("b is a required number.");if(typeof n!="number")throw new L("c is a required number.");if(typeof i!="number")throw new L("d is a required number.");if(typeof o!="number")throw new L("e is a required number.");let r=e*e,s=r*e,a=t*t,l=a*t,d=n*n,u=d*n,f=i*i,p=f*i,y=o*o,h=y*o;return a*d*f-4*l*p-4*e*u*f+18*e*t*n*p-27*r*f*f+256*s*h+o*(18*l*n*i-4*a*u+16*e*d*d-80*e*t*d*i-6*e*a*f+144*r*n*f)+y*(144*e*a*n-27*a*a-128*r*d-192*r*t*i)};function Xm(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,l=bx.computeRealRoots(1,2*r,r*r-4*a,-s*s);if(l.length>0){let d=-e/4,u=l[l.length-1];if(Math.abs(u)=0&&y>=0){let g=Math.sqrt(p),x=Math.sqrt(y);return[d-x,d-g,d+g,d+x]}else{if(p>=0&&y<0)return h=Math.sqrt(p),[d-h,d+h];if(p<0&&y>=0)return h=Math.sqrt(y),[d-h,d+h]}}return[]}else if(u>0){let f=Math.sqrt(u),p=(r+u-s/f)/2,y=(r+u+s/f)/2,h=Fc.computeRealRoots(1,f,p),g=Fc.computeRealRoots(1,-f,y);return h.length!==0?(h[0]+=d,h[1]+=d,g.length!==0?(g[0]+=d,g[1]+=d,h[1]<=g[0]?[h[0],h[1],g[0],g[1]]:g[1]<=h[0]?[g[0],g[1],h[0],h[1]]:h[0]>=g[0]&&h[1]<=g[1]?[g[0],h[0],h[1],g[1]]:g[0]>=h[0]&&g[1]<=h[1]?[h[0],g[0],g[1],h[1]]:h[0]>g[0]&&h[0]0){let f=u[0],p=t-f,y=p*p,h=e/2,g=p/2,x=y-4*i,S=y+4*Math.abs(i),V=s-4*f,Z=s+4*Math.abs(f),R,E;if(f<0||x*Z=b[0]&&N[1]<=b[1]?[b[0],N[0],N[1],b[1]]:b[0]>=N[0]&&b[1]<=N[1]?[N[0],b[0],b[1],N[1]]:N[0]>b[0]&&N[0]u)||(p=m.cross(f,a,Dee),h=m.dot(s,p),h<0||y+h>u))return;g=m.dot(l,p)/u}else{if(Math.abs(u)1||(p=m.cross(f,a,Dee),h=m.dot(s,p)*x,h<0||y+h>1))return;g=m.dot(l,p)*x}return g};No.rayTriangle=function(e,t,n,i,o,r){let s=No.rayTriangleParametric(e,t,n,i,o);if(!(!c(s)||s<0))return c(r)||(r=new m),m.multiplyByScalar(e.direction,s,r),m.add(e.origin,r,r)};var LRe=new bn;No.lineSegmentTriangle=function(e,t,n,i,o,r,s){if(!c(e))throw new L("v0 is required.");if(!c(t))throw new L("v1 is required.");if(!c(n))throw new L("p0 is required.");if(!c(i))throw new L("p1 is required.");if(!c(o))throw new L("p2 is required.");let a=LRe;m.clone(e,a.origin),m.subtract(t,e,a.direction),m.normalize(a.direction,a.direction);let l=No.rayTriangleParametric(a,n,i,o,r);if(!(!c(l)||l<0||l>m.distance(e,t)))return c(s)||(s=new m),m.multiplyByScalar(a.direction,l,s),m.add(a.origin,s,s)};function ZRe(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),l=(-t+a)*s,d=(-t-a)*s;return ls))return i.start=Math.max(i.start,0),i.stop=Math.min(i.stop,s),i};var ERe=new m,XRe=new m;No.rayEllipsoid=function(e,t){if(!c(e))throw new L("ray is required.");if(!c(t))throw new L("ellipsoid is required.");let n=t.oneOverRadii,i=m.multiplyComponents(n,e.origin,ERe),o=m.multiplyComponents(n,e.direction,XRe),r=m.magnitudeSquared(i),s=m.dot(i,o),a,l,d,u,f;if(r>1){if(s>=0)return;let p=s*s;if(a=r-1,l=m.magnitudeSquared(o),d=l*a,pd){u=s*s-d,f=-s+Math.sqrt(u);let h=f/l,g=a/f;return h0?y.push(new m(i,o*F,o*-G)):G!==0?(y.push(new m(i,o*F,o*-G)),y.push(new m(i,o*F,o*G)),++P):y.push(new m(i,o*F,o*G))}return y};var dY=new m,Bee=new m,Yee=new m,JN=new m,IRe=new m,WRe=new te,wRe=new te,PRe=new te,vRe=new te,FRe=new te,Hee=new te,zee=new te,Kee=new m,ARe=new m,MRe=new pe;No.grazingAltitudeLocation=function(e,t){if(!c(e))throw new L("ray is required.");if(!c(t))throw new L("ellipsoid is required.");let n=e.origin,i=e.direction;if(!m.equals(n,m.ZERO)){let I=t.geodeticSurfaceNormal(n,dY);if(m.dot(i,I)>=0)return n}let o=c(this.rayEllipsoid(e,t)),r=t.transformPositionToScaledSpace(i,dY),s=m.normalize(r,r),a=m.mostOrthogonalAxis(r,JN),l=m.normalize(m.cross(a,s,Bee),Bee),d=m.normalize(m.cross(s,l,Yee),Yee),u=WRe;u[0]=s.x,u[1]=s.y,u[2]=s.z,u[3]=l.x,u[4]=l.y,u[5]=l.z,u[6]=d.x,u[7]=d.y,u[8]=d.z;let f=te.transpose(u,wRe),p=te.fromScale(t.radii,PRe),y=te.fromScale(t.oneOverRadii,vRe),h=FRe;h[0]=0,h[1]=-i.z,h[2]=i.y,h[3]=i.z,h[4]=0,h[5]=-i.x,h[6]=-i.y,h[7]=i.x,h[8]=0;let g=te.multiply(te.multiply(f,y,Hee),h,Hee),x=te.multiply(te.multiply(g,p,zee),u,zee),S=te.multiplyByVector(g,n,IRe),V=No.quadraticVectorExpression(x,m.negate(S,dY),0,0,1),Z,R,E=V.length;if(E>0){let I=m.clone(m.ZERO,ARe),v=Number.NEGATIVE_INFINITY;for(let F=0;Fv&&(v=b,I=m.clone(Z,I))}let P=t.cartesianToCartographic(I,MRe);return v=w.clamp(v,0,1),R=m.magnitude(m.subtract(I,n,JN))*Math.sqrt(1-v*v),R=o?-R:R,P.height=R,t.cartographicToCartesian(P,new m)}};var NRe=new m;No.lineSegmentPlane=function(e,t,n,i){if(!c(e))throw new L("endPoint0 is required.");if(!c(t))throw new L("endPoint1 is required.");if(!c(n))throw new L("plane is required.");c(i)||(i=new m);let o=m.subtract(t,e,NRe),r=n.normal,s=m.dot(r,o);if(Math.abs(s)1))return m.multiplyByScalar(o,l,i),m.add(e,i,i),i};No.trianglePlaneIntersection=function(e,t,n,i){if(!c(e)||!c(t)||!c(n)||!c(i))throw new L("p0, p1, p2, and plane are required.");let o=i.normal,r=i.distance,s=m.dot(o,e)+r<0,a=m.dot(o,t)+r<0,l=m.dot(o,n)+r<0,d=0;d+=s?1:0,d+=a?1:0,d+=l?1:0;let u,f;if((d===1||d===2)&&(u=new m,f=new m),d===1){if(s)return No.lineSegmentPlane(e,t,i,u),No.lineSegmentPlane(e,n,i,f),{positions:[e,t,n,u,f],indices:[0,3,4,1,2,4,1,4,3]};if(a)return No.lineSegmentPlane(t,n,i,u),No.lineSegmentPlane(t,e,i,f),{positions:[e,t,n,u,f],indices:[1,3,4,2,0,4,2,4,3]};if(l)return No.lineSegmentPlane(n,e,i,u),No.lineSegmentPlane(n,t,i,f),{positions:[e,t,n,u,f],indices:[2,3,4,0,1,4,0,4,3]}}else if(d===2)if(s)if(a){if(!l)return No.lineSegmentPlane(e,n,i,u),No.lineSegmentPlane(t,n,i,f),{positions:[e,t,n,u,f],indices:[0,1,4,0,4,3,2,3,4]}}else return No.lineSegmentPlane(n,t,i,u),No.lineSegmentPlane(e,t,i,f),{positions:[e,t,n,u,f],indices:[2,0,4,2,4,3,1,3,4]};else return No.lineSegmentPlane(t,e,i,u),No.lineSegmentPlane(n,e,i,f),{positions:[e,t,n,u,f],indices:[1,2,4,1,4,3,0,3,4]}};var qn=No;var Dvt=_(T(),1);function As(e,t){if(C.typeOf.object("normal",e),!w.equalsEpsilon(m.magnitude(e),1,w.EPSILON6))throw new L("normal must be normalized.");C.typeOf.number("distance",t),this.normal=m.clone(e),this.distance=t}As.fromPointNormal=function(e,t,n){if(C.typeOf.object("point",e),C.typeOf.object("normal",t),!w.equalsEpsilon(m.magnitude(t),1,w.EPSILON6))throw new L("normal must be normalized.");let i=-m.dot(t,e);return c(n)?(m.clone(t,n.normal),n.distance=i,n):new As(t,i)};var kRe=new m;As.fromCartesian4=function(e,t){C.typeOf.object("coefficients",e);let n=m.fromCartesian4(e,kRe),i=e.w;if(!w.equalsEpsilon(m.magnitude(n),1,w.EPSILON6))throw new L("normal must be normalized.");return c(t)?(m.clone(n,t.normal),t.distance=i,t):new As(n,i)};As.getPointDistance=function(e,t){return C.typeOf.object("plane",e),C.typeOf.object("point",t),m.dot(e.normal,t)+e.distance};var URe=new m;As.projectPointOntoPlane=function(e,t,n){C.typeOf.object("plane",e),C.typeOf.object("point",t),c(n)||(n=new m);let i=As.getPointDistance(e,t),o=m.multiplyByScalar(e.normal,i,URe);return m.subtract(t,o,n)};var ORe=new M,DRe=new ce,BRe=new m;As.transform=function(e,t,n){C.typeOf.object("plane",e),C.typeOf.object("transform",t);let i=e.normal,o=e.distance,r=M.inverseTranspose(t,ORe),s=ce.fromElements(i.x,i.y,i.z,o,DRe);s=M.multiplyByVector(r,s,s);let a=m.fromCartesian4(s,BRe);return s=ce.divideByScalar(s,m.magnitude(a),s),As.fromCartesian4(s,n)};As.clone=function(e,t){return C.typeOf.object("plane",e),c(t)?(m.clone(e.normal,t.normal),t.distance=e.distance,t):new As(e.normal,e.distance)};As.equals=function(e,t){return C.typeOf.object("left",e),C.typeOf.object("right",t),e.distance===t.distance&&m.equals(e.normal,t.normal)};As.ORIGIN_XY_PLANE=Object.freeze(new As(m.UNIT_Z,0));As.ORIGIN_YZ_PLANE=Object.freeze(new As(m.UNIT_X,0));As.ORIGIN_ZX_PLANE=Object.freeze(new As(m.UNIT_Y,0));var cn=As;var Kvt=_(T(),1);var uY={};uY.calculateACMR=function(e){e=e??z.EMPTY_OBJECT;let t=e.indices,n=e.maximumIndex,i=e.cacheSize??24;if(!c(t))throw new L("indices is required.");let o=t.length;if(o<3||o%3!==0)throw new L("indices length must be a multiple of three.");if(n<=0)throw new L("maximumIndex must be greater than zero.");if(i<3)throw new L("cacheSize must be greater than two.");if(!c(n)){n=0;let a=0,l=t[a];for(;an&&(n=l),++a,l=t[a]}let r=[];for(let a=0;ai&&(r[t[a]]=s,++s);return(s-i+1)/(o/3)};uY.tipsify=function(e){e=e??z.EMPTY_OBJECT;let t=e.indices,n=e.maximumIndex,i=e.cacheSize??24,o;function r(b,G,X,W){for(;G.length>=1;){let A=G[G.length-1];if(G.splice(G.length-1,1),b[A].numLiveTriangles>0)return A}for(;o0)return++o,o-1;++o}return-1}function s(b,G,X,W,A,k,B){let O=-1,H,U=-1,K=0;for(;KU||U===-1)&&(U=H,O=Q)),++K}return O===-1?r(W,k,b,B):O}if(!c(t))throw new L("indices is required.");let a=t.length;if(a<3||a%3!==0)throw new L("indices length must be a multiple of three.");if(n<=0)throw new L("maximumIndex must be greater than zero.");if(i<3)throw new L("cacheSize must be greater than two.");let l=0,d=0,u=t[d],f=a;if(c(n))l=n+1;else{for(;dl&&(l=u),++d,u=t[d];if(l===-1)return 0;++l}let p=[],y;for(y=0;yi&&(Z.timeStamp=x,++x),++d}g=s(t,i,S,p,x,V,l)}return I};var SZ=uY;var Ac={};function n5(e,t,n,i,o){e[t++]=n,e[t++]=i,e[t++]=i,e[t++]=o,e[t++]=o,e[t]=n}function YRe(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);n5(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=SZ.tipsify({indices:n,maximumIndex:o,cacheSize:t})}return e};function jee(e){let t={};for(let n in e)if(e.hasOwnProperty(n)&&c(e[n])&&c(e[n].values)){let i=e[n];t[n]=new Ee({componentDatatype:i.componentDatatype,componentsPerAttribute:i.componentsPerAttribute,normalize:i.normalize,values:[]})}return t}function KRe(e,t,n){for(let i in t)if(t.hasOwnProperty(i)&&c(t[i])&&c(t[i].values)){let o=t[i];for(let r=0;r=w.SIXTY_FOUR_KILOBYTES){let i=[],o=[],r=0,s=jee(e.attributes),a=e.indices,l=a.length,d;e.primitiveType===ve.TRIANGLES?d=3:e.primitiveType===ve.LINES?d=2:e.primitiveType===ve.POINTS&&(d=1);for(let u=0;u=w.SIXTY_FOUR_KILOBYTES&&(t.push(new dt({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV})),i=[],o=[],r=0,s=jee(e.attributes))}o.length!==0&&t.push(new dt({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV}))}else t.push(e);return t};var qee=new m,JRe=new pe;Ac.projectTo2D=function(e,t,n,i,o){if(!c(e))throw new L("geometry is required.");if(!c(t))throw new L("attributeName is required.");if(!c(n))throw new L("attributeName3D is required.");if(!c(i))throw new L("attributeName2D is required.");if(!c(e.attributes[t]))throw new L(`geometry must have attribute matching the attributeName argument: ${t}.`);if(e.attributes[t].componentDatatype!==q.DOUBLE)throw new L("The attribute componentDatatype must be ComponentDatatype.DOUBLE.");let r=e.attributes[t];o=c(o)?o:new Xi;let s=o.ellipsoid,a=r.values,l=new Float64Array(a.length),d=0;for(let u=0;ux&&(x=V)}return new dt({attributes:u,indices:h,primitiveType:d,boundingSphere:c(g)?new ue(g,x):void 0})}Ac.combineInstances=function(e){if(!c(e)||e.length<1)throw new L("instances is required and must have length greater than zero.");let t=[],n=[],i=e.length;for(let r=0;r0&&o.push(pY(t,"geometry")),n.length>0&&(o.push(pY(n,"westHemisphereGeometry")),o.push(pY(n,"eastHemisphereGeometry"))),o};var gu=new m,CZ=new m,tC=new m,nC=new m;Ac.computeNormal=function(e){if(!c(e))throw new L("geometry is required.");if(!c(e.attributes.position)||!c(e.attributes.position.values))throw new L("geometry.attributes.position.values is required.");if(!c(e.indices))throw new L("geometry.indices is required.");if(e.indices.length<2||e.indices.length%3!==0)throw new L("geometry.indices length must be greater than 0 and be a multiple of 3.");if(e.primitiveType!==ve.TRIANGLES)throw new L("geometry.primitiveType must be PrimitiveType.TRIANGLES.");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),l=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=w.sign(e.y):s=w.sign(n.y):o>r?s=w.sign(t.y):s=w.sign(n.y);let a=s<0;U0(e,a),U0(t,a),U0(n,a)}var nte=new m;function xu(e,t,n,i){m.add(e,m.multiplyByScalar(m.subtract(t,e,nte),e.y/(e.y-t.y),nte),n),m.clone(n,i),U0(n,!0),U0(i,!1)}var gx=new m,xx=new m,_x=new m,Tx=new m,bY={positions:new Array(7),indices:new Array(3*3)};function cGe(e,t,n){if(e.x>=0||t.x>=0||n.x>=0)return;aGe(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=bY.indices;s===1?(a[1]=3,a[2]=4,a[5]=6,a[7]=6,a[8]=5,i?(xu(e,t,gx,_x),xu(e,n,xx,Tx),a[0]=0,a[3]=1,a[4]=2,a[6]=1):o?(xu(t,n,gx,_x),xu(t,e,xx,Tx),a[0]=1,a[3]=2,a[4]=0,a[6]=2):r&&(xu(n,e,gx,_x),xu(n,t,xx,Tx),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||(xu(n,e,gx,_x),xu(n,t,xx,Tx),a[0]=0,a[1]=1,a[3]=0,a[6]=2):(xu(t,n,gx,_x),xu(t,e,xx,Tx),a[0]=2,a[1]=0,a[3]=2,a[6]=1):(xu(e,t,gx,_x),xu(e,n,xx,Tx),a[0]=1,a[1]=2,a[3]=1,a[6]=0));let l=bY.positions;return l[0]=e,l[1]=t,l[2]=n,l.length=3,(s===1||s===2)&&(l[3]=gx,l[4]=xx,l[5]=_x,l[6]=Tx,l.length=7),bY}function ite(e,t){let n=e.attributes;if(n.position.values.length===0)return;for(let o in n)if(n.hasOwnProperty(o)&&c(n[o])&&c(n[o].values)){let r=n[o];r.values=q.createTypedArray(r.componentDatatype,r.values)}let i=dt.computeNumberOfVertices(e);return e.indices=Me.createTypedArray(i,e.indices),t&&(e.boundingSphere=ue.fromVertices(n.position.values)),e}function oC(e){let t=e.attributes,n={};for(let i in t)if(t.hasOwnProperty(i)&&c(t[i])&&c(t[i].values)){let o=t[i];n[i]=new Ee({componentDatatype:o.componentDatatype,componentsPerAttribute:o.componentsPerAttribute,normalize:o.normalize,values:[]})}return new dt({attributes:n,indices:[],primitiveType:e.primitiveType})}function _Y(e,t,n){let i=c(e.geometry.boundingSphere);t=ite(t,i),n=ite(n,i),c(n)&&!c(t)?e.geometry=n:!c(n)&&c(t)?e.geometry=t:(e.westHemisphereGeometry=t,e.eastHemisphereGeometry=n,e.geometry=void 0)}function TY(e,t){let n=new e,i=new e,o=new e;return function(r,s,a,l,d,u,f,p){let y=e.fromArray(d,r*t,n),h=e.fromArray(d,s*t,i),g=e.fromArray(d,a*t,o);e.multiplyByScalar(y,l.x,y),e.multiplyByScalar(h,l.y,h),e.multiplyByScalar(g,l.z,g);let x=e.add(y,h,y);e.add(x,g,x),p&&e.normalize(x,x),e.pack(x,u,f*t)}}var lGe=TY(ce,4),t5=TY(m,3),lte=TY(D,2),dGe=function(e,t,n,i,o,r,s){let a=o[e]*i.x,l=o[t]*i.y,d=o[n]*i.z;r[s]=a+l+d>w.EPSILON6?1:0},LZ=new m,yY=new m,gY=new m,uGe=new m;function $N(e,t,n,i,o,r,s,a,l,d,u,f,p,y,h,g){if(!c(r)&&!c(s)&&!c(a)&&!c(l)&&!c(d)&&y===0)return;let x=m.fromArray(o,e*3,LZ),S=m.fromArray(o,t*3,yY),V=m.fromArray(o,n*3,gY),Z=px(i,x,S,V,uGe);if(c(Z)){if(c(r)&&t5(e,t,n,Z,r,f.normal.values,g,!0),c(d)){let R=m.fromArray(d,e*3,LZ),E=m.fromArray(d,t*3,yY),I=m.fromArray(d,n*3,gY);m.multiplyByScalar(R,Z.x,R),m.multiplyByScalar(E,Z.y,E),m.multiplyByScalar(I,Z.z,I);let v;!m.equals(R,m.ZERO)||!m.equals(E,m.ZERO)||!m.equals(I,m.ZERO)?(v=m.add(R,E,R),m.add(v,I,v),m.normalize(v,v)):(v=LZ,v.x=0,v.y=0,v.z=0),m.pack(v,f.extrudeDirection.values,g*3)}if(c(u)&&dGe(e,t,n,Z,u,f.applyOffset.values,g),c(s)&&t5(e,t,n,Z,s,f.tangent.values,g,!0),c(a)&&t5(e,t,n,Z,a,f.bitangent.values,g,!0),c(l)&<e(e,t,n,Z,l,f.st.values,g),y>0)for(let R=0;R3){let W=X.positions,A=X.indices,k=A.length;for(let B=0;B0)continue;let l=m.unpack(i,s,mte);(a.y<0&&l.y>0||a.y>0&&l.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,xY);(a.y<0&&d.y>0||a.y>0&&d.y<0)&&(s+30||ue.intersectPlane(n,cn.ORIGIN_ZX_PLANE)!==zt.INTERSECTING))return e;if(t.geometryType!==yu.NONE)switch(t.geometryType){case yu.POLYLINES:TGe(e);break;case yu.TRIANGLES:ote(e);break;case yu.LINES:rte(e);break}else sGe(t),t.primitiveType===ve.TRIANGLES?ote(e):t.primitiveType===ve.LINES&&rte(e);return e};var An=Ac;var RFt=_(T(),1);function ZZ(e,t,n,i,o,r,s,a,l,d,u){this._context=e,this._texture=t,this._textureTarget=n,this._targetFace=i,this._pixelDatatype=s,this._internalFormat=o,this._pixelFormat=r,this._size=a,this._preMultiplyAlpha=l,this._flipY=d,this._initialized=u}Object.defineProperties(ZZ.prototype,{pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},_target:{get:function(){return this._targetFace}}});ZZ.prototype.copyFrom=function(e){C.defined("options",e);let{xOffset:t=0,yOffset:n=0,source:i,skipColorSpaceConversion:o=!1}=e;if(C.defined("options.source",i),C.typeOf.number.greaterThanOrEquals("xOffset",t,0),C.typeOf.number.greaterThanOrEquals("yOffset",n,0),t+i.width>this._size)throw new L("xOffset + options.source.width must be less than or equal to width.");if(n+i.height>this._size)throw new L("yOffset + options.source.height must be less than or equal to height.");let{width:r,height:s}=i,a=this._context._gl,l=this._textureTarget,d=this._targetFace;a.activeTexture(a.TEXTURE0),a.bindTexture(l,this._texture);let u=i.arrayBufferView,f=this._size,p=this._pixelFormat,y=this._internalFormat,h=this._pixelDatatype,g=this._preMultiplyAlpha,x=this._flipY,S=4;c(u)&&(S=ke.alignmentInBytes(p,h,r)),a.pixelStorei(a.UNPACK_ALIGNMENT,S),o?a.pixelStorei(a.UNPACK_COLORSPACE_CONVERSION_WEBGL,a.NONE):a.pixelStorei(a.UNPACK_COLORSPACE_CONVERSION_WEBGL,a.BROWSER_DEFAULT_WEBGL);let V=!1;if(!this._initialized){let Z;t===0&&n===0&&r===f&&s===f?(c(u)?(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),x&&(u=ke.flipY(u,p,h,f,f)),Z=u):(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,g),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,x),Z=i),V=!0):(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),Z=ke.createTypedArray(p,h,f,f)),a.texImage2D(d,0,y,f,f,0,p,Ue.toWebGLConstant(h,this._context),Z),this._initialized=!0}V||(c(u)?(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),x&&(u=ke.flipY(u,p,h,r,s)),a.texSubImage2D(d,0,t,n,r,s,p,Ue.toWebGLConstant(h,this._context),u)):(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,g),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,x),a.texSubImage2D(d,0,t,n,p,Ue.toWebGLConstant(h,this._context),i))),a.bindTexture(l,null)};ZZ.prototype.copyFromFramebuffer=function(e,t,n,i,o,r){if(e=e??0,t=t??0,n=n??0,i=i??0,o=o??this._size,r=r??this._size,C.typeOf.number.greaterThanOrEquals("xOffset",e,0),C.typeOf.number.greaterThanOrEquals("yOffset",t,0),C.typeOf.number.greaterThanOrEquals("framebufferXOffset",n,0),C.typeOf.number.greaterThanOrEquals("framebufferYOffset",i,0),e+o>this._size)throw new L("xOffset + source.width must be less than or equal to width.");if(t+r>this._size)throw new L("yOffset + source.height must be less than or equal to height.");if(this._pixelDatatype===Ue.FLOAT)throw new L("Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.");if(this._pixelDatatype===Ue.HALF_FLOAT)throw new L("Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.");let s=this._context._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture),s.copyTexSubImage2D(this._targetFace,0,e,t,n,i,o,r),s.bindTexture(a,null),this._initialized=!0};ZZ.prototype.copyMipmapFromFramebuffer=function(e,t,n,i,o){if(e=e??0,t=t??0,n=n??this._size,i=i??this._size,o=o??0,C.typeOf.number.greaterThanOrEquals("xOffset",e,0),C.typeOf.number.greaterThanOrEquals("yOffset",t,0),e+n>this._size)throw new L("xOffset + source.width must be less than or equal to width.");if(t+i>this._size)throw new L("yOffset + source.height must be less than or equal to height.");if(this._pixelDatatype===Ue.FLOAT)throw new L("Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.");if(this._pixelDatatype===Ue.HALF_FLOAT)throw new L("Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.");let r=this._context._gl,s=this._textureTarget;r.activeTexture(r.TEXTURE0),r.bindTexture(s,this._texture),r.copyTexImage2D(this._targetFace,o,this._internalFormat,e,t,n,i,0),r.bindTexture(s,null),this._initialized=!0};var RZ=ZZ;var XFt=_(T(),1);var i5={DONT_CARE:oe.DONT_CARE,FASTEST:oe.FASTEST,NICEST:oe.NICEST,validate:function(e){return e===i5.DONT_CARE||e===i5.FASTEST||e===i5.NICEST}},_u=Object.freeze(i5);var KFt=_(T(),1);var wFt=_(T(),1);var o5={NEAREST:oe.NEAREST,LINEAR:oe.LINEAR};o5.validate=function(e){return e===o5.NEAREST||e===o5.LINEAR};var di=Object.freeze(o5);var FFt=_(T(),1);var O0={NEAREST:oe.NEAREST,LINEAR:oe.LINEAR,NEAREST_MIPMAP_NEAREST:oe.NEAREST_MIPMAP_NEAREST,LINEAR_MIPMAP_NEAREST:oe.LINEAR_MIPMAP_NEAREST,NEAREST_MIPMAP_LINEAR:oe.NEAREST_MIPMAP_LINEAR,LINEAR_MIPMAP_LINEAR:oe.LINEAR_MIPMAP_LINEAR};O0.validate=function(e){return e===O0.NEAREST||e===O0.LINEAR||e===O0.NEAREST_MIPMAP_NEAREST||e===O0.LINEAR_MIPMAP_NEAREST||e===O0.NEAREST_MIPMAP_LINEAR||e===O0.LINEAR_MIPMAP_LINEAR};var Jt=Object.freeze(O0);var NFt=_(T(),1);var r5={CLAMP_TO_EDGE:oe.CLAMP_TO_EDGE,REPEAT:oe.REPEAT,MIRRORED_REPEAT:oe.MIRRORED_REPEAT,validate:function(e){return e===r5.CLAMP_TO_EDGE||e===r5.REPEAT||e===r5.MIRRORED_REPEAT}},xn=Object.freeze(r5);function GZ(e){e=e??z.EMPTY_OBJECT;let{wrapS:t=xn.CLAMP_TO_EDGE,wrapT:n=xn.CLAMP_TO_EDGE,minificationFilter:i=Jt.LINEAR,magnificationFilter:o=di.LINEAR,maximumAnisotropy:r=1}=e;if(!xn.validate(t))throw new L("Invalid sampler.wrapS.");if(!xn.validate(n))throw new L("Invalid sampler.wrapT.");if(!Jt.validate(i))throw new L("Invalid sampler.minificationFilter.");if(!di.validate(o))throw new L("Invalid sampler.magnificationFilter.");C.typeOf.number.greaterThanOrEquals("maximumAnisotropy",r,1),this._wrapS=t,this._wrapT=n,this._minificationFilter=i,this._magnificationFilter=o,this._maximumAnisotropy=r}Object.defineProperties(GZ.prototype,{wrapS:{get:function(){return this._wrapS}},wrapT:{get:function(){return this._wrapT}},minificationFilter:{get:function(){return this._minificationFilter}},magnificationFilter:{get:function(){return this._magnificationFilter}},maximumAnisotropy:{get:function(){return this._maximumAnisotropy}}});GZ.equals=function(e,t){return e===t||c(e)&&c(t)&&e._wrapS===t._wrapS&&e._wrapT===t._wrapT&&e._minificationFilter===t._minificationFilter&&e._magnificationFilter===t._magnificationFilter&&e._maximumAnisotropy===t._maximumAnisotropy};GZ.NEAREST=Object.freeze(new GZ({wrapS:xn.CLAMP_TO_EDGE,wrapT:xn.CLAMP_TO_EDGE,minificationFilter:Jt.NEAREST,magnificationFilter:di.NEAREST}));var en=GZ;var lAt=_(T(),1);function SGe(e,t,n,i){let o=c(t.vertexBuffer),r=c(t.value),s=t.value?t.value.length:t.componentsPerAttribute;if(!o&&!r)throw new L("attribute must have a vertexBuffer or a value.");if(o&&r)throw new L("attribute cannot have both a vertexBuffer and a value. It must have either a vertexBuffer property defining per-vertex data or a value property defining data for all vertices.");if(s!==1&&s!==2&&s!==3&&s!==4)throw r?new L("attribute.value.length must be in the range [1, 4]."):new L("attribute.componentsPerAttribute must be in the range [1, 4].");if(c(t.componentDatatype)&&!q.validate(t.componentDatatype))throw new L("attribute must have a valid componentDatatype or not specify it.");if(c(t.strideInBytes)&&t.strideInBytes>255)throw new L("attribute must have a strideInBytes less than or equal to 255 or not specify it.");if(c(t.instanceDivisor)&&t.instanceDivisor>0&&!i.instancedArrays)throw new L("instanced arrays is not supported");if(c(t.instanceDivisor)&&t.instanceDivisor<0)throw new L("attribute must have an instanceDivisor greater than or equal to zero");if(c(t.instanceDivisor)&&r)throw new L("attribute cannot have have an instanceDivisor if it is not backed by a buffer");if(c(t.instanceDivisor)&&t.instanceDivisor>0&&t.index===0)throw new L("attribute zero cannot have an instanceDivisor greater than 0");let a={index:t.index??n,enabled:t.enabled??!0,vertexBuffer:t.vertexBuffer,value:r?t.value.slice(0):void 0,componentsPerAttribute:s,componentDatatype:t.componentDatatype??q.FLOAT,normalize:t.normalize??!1,offsetInBytes:t.offsetInBytes??0,strideInBytes:t.strideInBytes??0,instanceDivisor:t.instanceDivisor??0};if(o)a.vertexAttrib=function(l){let d=this.index;l.bindBuffer(l.ARRAY_BUFFER,this.vertexBuffer._getBuffer()),l.vertexAttribPointer(d,this.componentsPerAttribute,this.componentDatatype,this.normalize,this.strideInBytes,this.offsetInBytes),l.enableVertexAttribArray(d),this.instanceDivisor>0&&(i.glVertexAttribDivisor(d,this.instanceDivisor),i._vertexAttribDivisors[d]=this.instanceDivisor,i._previousDrawInstanced=!0)},a.disableVertexAttribArray=function(l){l.disableVertexAttribArray(this.index),this.instanceDivisor>0&&i.glVertexAttribDivisor(n,0)};else{switch(a.componentsPerAttribute){case 1:a.vertexAttrib=function(l){l.vertexAttrib1fv(this.index,this.value)};break;case 2:a.vertexAttrib=function(l){l.vertexAttrib2fv(this.index,this.value)};break;case 3:a.vertexAttrib=function(l){l.vertexAttrib3fv(this.index,this.value)};break;case 4:a.vertexAttrib=function(l){l.vertexAttrib4fv(this.index,this.value)};break}a.disableVertexAttribArray=function(l){}}e.push(a)}function hte(e,t,n){for(let i=0;i0&&(l=!0),c(s[r].value)&&(d=!0);let f={};for(r=0;r0)for(r=fte(e[o[0]]),t=1;t0){let d=q.getSizeInBytes(e[o[0]].componentDatatype),u=a%d;u!==0&&(a+=d-u);let f=r*a,p=new ArrayBuffer(f),y={};for(t=0;t=w.SIXTY_FOUR_KILOBYTES&&t.elementIndexUint?p=_t.createIndexBuffer({context:t,typedArray:new Uint32Array(y),usage:i,indexDatatype:Me.UNSIGNED_INT}):p=_t.createIndexBuffer({context:t,typedArray:new Uint16Array(y),usage:i,indexDatatype:Me.UNSIGNED_SHORT})),new Ep({context:t,attributes:u,indexBuffer:p})};Object.defineProperties(Ep.prototype,{numberOfAttributes:{get:function(){return this._attributes.length}},numberOfVertices:{get:function(){return this._numberOfVertices}},indexBuffer:{get:function(){return this._indexBuffer}}});Ep.prototype.getAttribute=function(e){return C.defined("index",e),this._attributes[e]};function LGe(e){let t=e._context,n=e._hasInstancedAttributes;if(!n&&!t._previousDrawInstanced)return;t._previousDrawInstanced=n;let i=t._vertexAttribDivisors,o=e._attributes,r=mt.maximumVertexAttributes,s;if(n){let a=o.length;for(s=0;s0&&(t.glVertexAttribDivisor(s,0),i[s]=0)}function ZGe(e,t){let n=e._attributes,i=n.length;for(let o=0;oc(n[Z])))throw new L(`options.source requires faces ${Object.values(So.FaceName).join(", ")}.`);({width:d,height:u}=n.positiveX);for(let Z of So.faceNames()){let R=n[Z];if(Number(R.width)!==d||Number(R.height)!==u)throw new L("Each face in options.source must have the same width and height.")}}let f=d;if(!c(d)||!c(u))throw new L("options requires a source field to create an initialized cube map or width and height fields to create a blank cube map.");if(d!==u)throw new L("Width must equal height.");if(f<=0)throw new L("Width and height must be greater than zero.");if(f>mt.maximumCubeMapSize)throw new L(`Width and height must be less than or equal to the maximum cube map size (${mt.maximumCubeMapSize}). Check maximumCubeMapSize.`);if(!ke.validate(i))throw new L("Invalid options.pixelFormat.");if(ke.isDepthFormat(i))throw new L("options.pixelFormat cannot be DEPTH_COMPONENT or DEPTH_STENCIL.");if(!Ue.validate(o))throw new L("Invalid options.pixelDatatype.");if(o===Ue.FLOAT&&!t.floatingPointTexture)throw new L("When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension.");if(o===Ue.HALF_FLOAT&&!t.halfFloatingPointTexture)throw new L("When options.pixelDatatype is HALF_FLOAT, this WebGL implementation must support the OES_texture_half_float extension.");let p=ke.textureSizeInBytes(i,o,f,f)*6,y=ke.toInternalFormat(i,o,t),h=t._gl,g=h.TEXTURE_CUBE_MAP,x=h.createTexture();this._context=t,this._textureFilterAnisotropic=t._textureFilterAnisotropic,this._textureTarget=g,this._texture=x,this._pixelFormat=i,this._pixelDatatype=o,this._size=f,this._hasMipmap=!1,this._sizeInBytes=p,this._preMultiplyAlpha=l,this._flipY=r;let S=c(n);function V(Z){return new RZ(t,x,g,Z,y,i,o,f,l,r,S)}this._positiveX=V(h.TEXTURE_CUBE_MAP_POSITIVE_X),this._negativeX=V(h.TEXTURE_CUBE_MAP_NEGATIVE_X),this._positiveY=V(h.TEXTURE_CUBE_MAP_POSITIVE_Y),this._negativeY=V(h.TEXTURE_CUBE_MAP_NEGATIVE_Y),this._positiveZ=V(h.TEXTURE_CUBE_MAP_POSITIVE_Z),this._negativeZ=V(h.TEXTURE_CUBE_MAP_NEGATIVE_Z),this._sampler=a,pte(this,a),h.activeTexture(h.TEXTURE0),h.bindTexture(g,x),s?h.pixelStorei(h.UNPACK_COLORSPACE_CONVERSION_WEBGL,h.NONE):h.pixelStorei(h.UNPACK_COLORSPACE_CONVERSION_WEBGL,h.BROWSER_DEFAULT_WEBGL);for(let Z of So.faceNames())SY(this[Z],n?.[Z],0);h.bindTexture(g,null)}So.prototype.copyFace=function(e,t,n,i){let o=e.context,r=new Fr({context:o,colorTextures:[t],destroyAttachments:!1});r._bind(),this[n].copyMipmapFromFramebuffer(0,0,t.width,t.height,i??0),r._unBind(),r.destroy()};So.FaceName=Object.freeze({POSITIVEX:"positiveX",NEGATIVEX:"negativeX",POSITIVEY:"positiveY",NEGATIVEY:"negativeY",POSITIVEZ:"positiveZ",NEGATIVEZ:"negativeZ"});function*RGe(){yield So.FaceName.POSITIVEX,yield So.FaceName.NEGATIVEX,yield So.FaceName.POSITIVEY,yield So.FaceName.NEGATIVEY,yield So.FaceName.POSITIVEZ,yield So.FaceName.NEGATIVEZ}So.faceNames=function(){return RGe()};function SY(e,t,n){n=n??0;let i=e._targetFace,o=Math.max(Math.floor(e._size/2**n),1),r=e._pixelFormat,s=e._pixelDatatype,a=e._internalFormat,l=e._flipY,d=e._preMultiplyAlpha,u=e._context,f=u._gl;if(!c(t)){f.texImage2D(i,n,a,o,o,0,r,Ue.toWebGLConstant(s,u),null);return}let{arrayBufferView:p}=t,y=4;c(p)&&(y=ke.alignmentInBytes(r,s,o)),f.pixelStorei(f.UNPACK_ALIGNMENT,y),c(p)?(f.pixelStorei(f.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),f.pixelStorei(f.UNPACK_FLIP_Y_WEBGL,!1),l&&(p=ke.flipY(p,r,s,o,o)),f.texImage2D(i,n,a,o,o,0,r,Ue.toWebGLConstant(s,u),p)):(f.pixelStorei(f.UNPACK_PREMULTIPLY_ALPHA_WEBGL,d),f.pixelStorei(f.UNPACK_FLIP_Y_WEBGL,l),f.texImage2D(i,n,a,r,Ue.toWebGLConstant(s,u),t))}So.loadFace=SY;Object.defineProperties(So.prototype,{positiveX:{get:function(){return this._positiveX}},negativeX:{get:function(){return this._negativeX}},positiveY:{get:function(){return this._positiveY}},negativeY:{get:function(){return this._negativeY}},positiveZ:{get:function(){return this._positiveZ}},negativeZ:{get:function(){return this._negativeZ}},sampler:{get:function(){return this._sampler},set:function(e){pte(this,e),this._sampler=e}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},width:{get:function(){return this._size}},height:{get:function(){return this._size}},sizeInBytes:{get:function(){return this._hasMipmap?Math.floor(this._sizeInBytes*4/3):this._sizeInBytes}},preMultiplyAlpha:{get:function(){return this._preMultiplyAlpha}},flipY:{get:function(){return this._flipY}},_target:{get:function(){return this._textureTarget}}});So.getDirection=function(e,t){switch(e){case So.FaceName.POSITIVEX:return m.clone(m.UNIT_X,t);case So.FaceName.NEGATIVEX:return m.negate(m.UNIT_X,t);case So.FaceName.POSITIVEY:return m.clone(m.UNIT_Y,t);case So.FaceName.NEGATIVEY:return m.negate(m.UNIT_Y,t);case So.FaceName.POSITIVEZ:return m.clone(m.UNIT_Z,t);case So.FaceName.NEGATIVEZ:return m.negate(m.UNIT_Z,t)}};function pte(e,t){let{minificationFilter:n,magnificationFilter:i}=t,o=[Jt.NEAREST_MIPMAP_NEAREST,Jt.NEAREST_MIPMAP_LINEAR,Jt.LINEAR_MIPMAP_NEAREST,Jt.LINEAR_MIPMAP_LINEAR].includes(n),r=e._context,s=e._pixelDatatype;(s===Ue.FLOAT&&!r.textureFloatLinear||s===Ue.HALF_FLOAT&&!r.textureHalfFloatLinear)&&(n=o?Jt.NEAREST_MIPMAP_NEAREST:Jt.NEAREST,i=di.NEAREST);let a=r._gl,l=e._textureTarget;a.activeTexture(a.TEXTURE0),a.bindTexture(l,e._texture),a.texParameteri(l,a.TEXTURE_MIN_FILTER,a.LINEAR),a.texParameteri(l,a.TEXTURE_MAG_FILTER,i),a.texParameteri(l,a.TEXTURE_WRAP_S,t.wrapS),a.texParameteri(l,a.TEXTURE_WRAP_T,t.wrapT),c(e._textureFilterAnisotropic)&&a.texParameteri(l,e._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,t.maximumAnisotropy),a.bindTexture(l,null)}So.prototype.loadMipmaps=function(e,t){if(C.defined("source",e),!Array.isArray(e))throw new L("source must be an array");let n=Math.log2(this._size);if(e.length!==n)throw new L("all mip levels must be defined");t=t??!1;let i=this._context._gl,o=this._texture,r=this._textureTarget;i.activeTexture(i.TEXTURE0),i.bindTexture(r,o),t?i.pixelStorei(i.UNPACK_COLORSPACE_CONVERSION_WEBGL,i.NONE):i.pixelStorei(i.UNPACK_COLORSPACE_CONVERSION_WEBGL,i.BROWSER_DEFAULT_WEBGL);for(let s=0;s1&&!w.isPowerOfTwo(this._size))throw new L("width and height must be a power of two to call generateMipmap().");if(!_u.validate(e))throw new L("hint is invalid.");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)};So.createVertexArray=function(e){let t=Wa.createGeometry(Wa.fromDimensions({dimensions:new m(2,2,2),vertexFormat:We.POSITION_ONLY})),n=this._attributeLocations=An.createAttributeLocations(t);return ni.fromGeometry({context:e,geometry:t,attributeLocations:n,bufferUsage:Ne.STATIC_DRAW})};So.prototype.isDestroyed=function(){return!1};So.prototype.destroy=function(){return this._context._gl.deleteTexture(this._texture),this._positiveX=he(this._positiveX),this._negativeX=he(this._negativeX),this._positiveY=he(this._positiveY),this._negativeY=he(this._negativeY),this._positiveZ=he(this._positiveZ),this._negativeZ=he(this._negativeZ),he(this)};var Uo=So;var PAt=_(T(),1);function GGe(e){this.context=e,this.framebuffer=void 0,this.blendingEnabled=void 0,this.scissorTest=void 0,this.viewport=void 0}var sc=GGe;var GDt=_(T(),1);var SDt=_(T(),1);var mDt=_(T(),1);var FAt=_(T(),1),EZ=`const float czm_degreesPerRadian = 57.29577951308232; `;var MAt=_(T(),1),XZ=`const czm_depthRangeStruct czm_depthRange = czm_depthRangeStruct(0.0, 1.0); `;var kAt=_(T(),1),IZ=`const float czm_epsilon1 = 0.1; `;var OAt=_(T(),1),WZ=`const float czm_epsilon2 = 0.01; `;var BAt=_(T(),1),wZ=`const float czm_epsilon3 = 0.001; `;var HAt=_(T(),1),PZ=`const float czm_epsilon4 = 0.0001; `;var KAt=_(T(),1),vZ=`const float czm_epsilon5 = 0.00001; `;var QAt=_(T(),1),FZ=`const float czm_epsilon6 = 0.000001; `;var qAt=_(T(),1),AZ=`const float czm_epsilon7 = 0.0000001; `;var e9t=_(T(),1),MZ=`const float czm_infinity = 5906376272000.0; `;var n9t=_(T(),1),NZ=`const float czm_oneOverPi = 0.3183098861837907; `;var o9t=_(T(),1),kZ=`const float czm_oneOverTwoPi = 0.15915494309189535; `;var s9t=_(T(),1),UZ=`const float czm_passCesium3DTile = 4.0; `;var c9t=_(T(),1),OZ=`const float czm_passCesium3DTileClassification = 5.0; `;var d9t=_(T(),1),DZ=`const float czm_passCesium3DTileClassificationIgnoreShow = 6.0; `;var m9t=_(T(),1),BZ=`const float czm_passClassification = 7.0; `;var h9t=_(T(),1),YZ=`const float czm_passCompute = 1.0; `;var b9t=_(T(),1),HZ=`const float czm_passEnvironment = 0.0; `;var g9t=_(T(),1),zZ=`const float czm_passGlobe = 2.0; `;var _9t=_(T(),1),KZ=`const float czm_passOpaque = 7.0; `;var S9t=_(T(),1),JZ=`const float czm_passOverlay = 10.0; `;var V9t=_(T(),1),QZ=`const float czm_passTerrainClassification = 3.0; `;var Z9t=_(T(),1),jZ=`const float czm_passTranslucent = 8.0; `;var G9t=_(T(),1),qZ=`const float czm_passVoxels = 9.0; `;var X9t=_(T(),1),$Z=`const float czm_pi = 3.141592653589793; `;var W9t=_(T(),1),eR=`const float czm_piOverFour = 0.7853981633974483; `;var P9t=_(T(),1),tR=`const float czm_piOverSix = 0.5235987755982988; `;var F9t=_(T(),1),nR=`const float czm_piOverThree = 1.0471975511965976; `;var M9t=_(T(),1),iR=`const float czm_piOverTwo = 1.5707963267948966; `;var k9t=_(T(),1),oR=`const float czm_radiansPerDegree = 0.017453292519943295; `;var O9t=_(T(),1),rR=`const float czm_sceneMode2D = 2.0; `;var B9t=_(T(),1),sR=`const float czm_sceneMode3D = 3.0; `;var H9t=_(T(),1),aR=`const float czm_sceneModeColumbusView = 1.0; `;var K9t=_(T(),1),cR=`const float czm_sceneModeMorphing = 0.0; `;var Q9t=_(T(),1),lR=`const float czm_solarRadius = 695500000.0; `;var q9t=_(T(),1),dR=`const float czm_threePiOver2 = 4.71238898038469; `;var eMt=_(T(),1),uR=`const float czm_twoPi = 6.283185307179586; `;var nMt=_(T(),1),mR=`const float czm_webMercatorMaxLatitude = 1.4844222297453324; `;var oMt=_(T(),1),fR=`struct czm_depthRangeStruct { float near; float far; }; `;var sMt=_(T(),1),hR=`struct czm_material { vec3 diffuse; float specular; float shininess; vec3 normal; vec3 emission; float alpha; }; `;var cMt=_(T(),1),pR=`struct czm_materialInput { float s; vec2 st; vec3 str; vec3 normalEC; mat3 tangentToEyeMatrix; vec3 positionToEyeEC; float height; float slope; float aspect; float waterMask; }; `;var dMt=_(T(),1),bR=`struct czm_modelMaterial { vec4 baseColor; vec3 diffuse; float alpha; vec3 specular; float roughness; vec3 normalEC; float occlusion; vec3 emissive; #ifdef USE_SPECULAR float specularWeight; #endif #ifdef USE_ANISOTROPY vec3 anisotropicT; vec3 anisotropicB; float anisotropyStrength; #endif #ifdef USE_CLEARCOAT float clearcoatFactor; float clearcoatRoughness; vec3 clearcoatNormal; #endif }; `;var mMt=_(T(),1),yR=`struct czm_modelVertexOutput { vec3 positionMC; float pointSize; }; `;var hMt=_(T(),1),gR=`struct czm_ray { vec3 origin; vec3 direction; }; `;var bMt=_(T(),1),xR=`struct czm_raySegment { float start; float stop; }; const czm_raySegment czm_emptyRaySegment = czm_raySegment(-czm_infinity, -czm_infinity); const czm_raySegment czm_fullRaySegment = czm_raySegment(0.0, czm_infinity); `;var gMt=_(T(),1),_R=`struct czm_shadowParameters { #ifdef USE_CUBE_MAP_SHADOW vec3 texCoords; #else vec2 texCoords; #endif float depthBias; float depth; float nDotL; vec2 texelStepSize; float normalShadingSmooth; float darkness; }; `;var _Mt=_(T(),1),TR=`vec3 czm_acesTonemapping(vec3 color) { float g = 0.985; float a = 0.065; float b = 0.0001; float c = 0.433; float d = 0.238; color = (color * (color + a) - b) / (color * (g * color + c) + d); color = clamp(color, 0.0, 1.0); return color; } `;var SMt=_(T(),1),SR=`float czm_alphaWeight(float a) { float z = (gl_FragCoord.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2]; return pow(a + 0.01, 4.0) + max(1e-2, min(3.0 * 1e3, 0.003 / (1e-5 + pow(abs(z) / 200.0, 4.0)))); } `;var VMt=_(T(),1),CR=`vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor) { float val1 = clamp(dist / fuzzFactor, 0.0, 1.0); float val2 = clamp((dist - 0.5) / fuzzFactor, 0.0, 1.0); val1 = val1 * (1.0 - val2); val1 = val1 * val1 * (3.0 - (2.0 * val1)); val1 = pow(val1, 0.5); vec4 midColor = (color1 + color2) * 0.5; return mix(midColor, currentColor, val1); } vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist) { return czm_antialias(color1, color2, currentColor, dist, 0.1); } `;var ZMt=_(T(),1),VR=`vec3 czm_applyHSBShift(vec3 rgb, vec3 hsbShift, bool ignoreBlackPixels) { vec3 hsb = czm_RGBToHSB(rgb); hsb.x += hsbShift.x; hsb.y = clamp(hsb.y + hsbShift.y, 0.0, 1.0); if (ignoreBlackPixels) { hsb.z = hsb.z > czm_epsilon7 ? hsb.z + hsbShift.z : 0.0; } else { hsb.z = hsb.z + hsbShift.z; } hsb.z = clamp(hsb.z, 0.0, 1.0); return czm_HSBToRGB(hsb); } `;var GMt=_(T(),1),LR=`vec2 czm_approximateSphericalCoordinates(vec3 normal) { float latitudeApproximation = czm_fastApproximateAtan(sqrt(normal.x * normal.x + normal.y * normal.y), normal.z); float longitudeApproximation = czm_fastApproximateAtan(normal.x, normal.y); return vec2(latitudeApproximation, longitudeApproximation); } `;var XMt=_(T(),1),ZR=`float czm_approximateTanh(float x) { float x2 = x * x; return max(-1.0, min(1.0, x * (27.0 + x2) / (27.0 + 9.0 * x2))); } `;var WMt=_(T(),1),RR=`bool czm_backFacing() { return gl_FrontFacing == false; } `;var PMt=_(T(),1),GR=`float czm_branchFreeTernary(bool comparison, float a, float b) { float useA = float(comparison); return a * useA + b * (1.0 - useA); } vec2 czm_branchFreeTernary(bool comparison, vec2 a, vec2 b) { float useA = float(comparison); return a * useA + b * (1.0 - useA); } vec3 czm_branchFreeTernary(bool comparison, vec3 a, vec3 b) { float useA = float(comparison); return a * useA + b * (1.0 - useA); } vec4 czm_branchFreeTernary(bool comparison, vec4 a, vec4 b) { float useA = float(comparison); return a * useA + b * (1.0 - useA); } `;var FMt=_(T(),1),ER=`vec4 czm_cascadeColor(vec4 weights) { return vec4(1.0, 0.0, 0.0, 1.0) * weights.x + vec4(0.0, 1.0, 0.0, 1.0) * weights.y + vec4(0.0, 0.0, 1.0, 1.0) * weights.z + vec4(1.0, 0.0, 1.0, 1.0) * weights.w; } `;var MMt=_(T(),1),XR=`uniform vec4 shadowMap_cascadeDistances; float czm_cascadeDistance(vec4 weights) { return dot(shadowMap_cascadeDistances, weights); } `;var kMt=_(T(),1),IR=`uniform mat4 shadowMap_cascadeMatrices[4]; mat4 czm_cascadeMatrix(vec4 weights) { return shadowMap_cascadeMatrices[0] * weights.x + shadowMap_cascadeMatrices[1] * weights.y + shadowMap_cascadeMatrices[2] * weights.z + shadowMap_cascadeMatrices[3] * weights.w; } `;var OMt=_(T(),1),WR=`uniform vec4 shadowMap_cascadeSplits[2]; vec4 czm_cascadeWeights(float depthEye) { vec4 near = step(shadowMap_cascadeSplits[0], vec4(depthEye)); vec4 far = step(depthEye, shadowMap_cascadeSplits[1]); return near * far; } `;var BMt=_(T(),1),wR=`float getSignedDistance(vec2 uv, highp sampler2D clippingDistance) { float signedDistance = texture(clippingDistance, uv).r; return (signedDistance - 0.5) * 2.0; } void czm_clipPolygons(highp sampler2D clippingDistance, int extentsLength, vec2 clippingPosition, int regionIndex) { vec2 rectUv = clippingPosition; if (regionIndex < 0 || rectUv.x <= 0.0 || rectUv.y <= 0.0 || rectUv.x >= 1.0 || rectUv.y >= 1.0) { #ifdef CLIPPING_INVERSE discard; #endif return; } vec2 clippingDistanceTextureDimensions = vec2(textureSize(clippingDistance, 0)); vec2 sampleOffset = max(1.0 / clippingDistanceTextureDimensions, vec2(0.005)); float dimension = float(extentsLength); if (extentsLength > 2) { dimension = ceil(log2(float(extentsLength))); } vec2 textureOffset = vec2(mod(float(regionIndex), dimension), floor(float(regionIndex) / dimension)) / dimension; vec2 uv = textureOffset + rectUv / dimension; float signedDistance = getSignedDistance(uv, clippingDistance); #ifdef CLIPPING_INVERSE if (signedDistance > 0.0) { discard; } #else if (signedDistance < 0.0) { discard; } #endif } `;var HMt=_(T(),1),PR=`vec4 czm_columbusViewMorph(vec4 position2D, vec4 position3D, float time) { vec3 p = mix(position2D.xyz, position3D.xyz, time); return vec4(p, 1.0); } `;var KMt=_(T(),1),vR=`vec4 czm_computeAtmosphereColor( vec3 positionWC, vec3 lightDirection, vec3 rayleighColor, vec3 mieColor, float opacity ) { vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); float cosAngle = dot(cameraToPositionWCDirection, lightDirection); float cosAngleSq = cosAngle * cosAngle; float G = czm_atmosphereMieAnisotropy; float GSq = G * G; float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq); 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)); vec3 rayleigh = rayleighPhase * rayleighColor; vec3 mie = miePhase * mieColor; vec3 color = (rayleigh + mie) * czm_atmosphereLightIntensity; return vec4(color, opacity); } vec4 czm_computeAtmosphereColor( czm_ray primaryRay, vec3 lightDirection, vec3 rayleighColor, vec3 mieColor, float opacity ) { vec3 direction = normalize(primaryRay.direction); float cosAngle = dot(direction, lightDirection); float cosAngleSq = cosAngle * cosAngle; float G = czm_atmosphereMieAnisotropy; float GSq = G * G; float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq); 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)); vec3 rayleigh = rayleighPhase * rayleighColor; vec3 mie = miePhase * mieColor; vec3 color = (rayleigh + mie) * czm_atmosphereLightIntensity; return vec4(color, opacity); } `;var QMt=_(T(),1),FR=`void czm_computeGroundAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity) { vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection); float atmosphereInnerRadius = length(positionWC); czm_computeScattering( primaryRay, length(cameraToPositionWC), lightDirection, atmosphereInnerRadius, rayleighColor, mieColor, opacity ); } `;var qMt=_(T(),1),AR=`vec4 czm_computePosition(); `;var eNt=_(T(),1),MR=`void czm_computeScattering( czm_ray primaryRay, float primaryRayLength, vec3 lightDirection, float atmosphereInnerRadius, out vec3 rayleighColor, out vec3 mieColor, out float opacity ) { const float ATMOSPHERE_THICKNESS = 111e3; const int PRIMARY_STEPS_MAX = 16; const int LIGHT_STEPS_MAX = 4; rayleighColor = vec3(0.0); mieColor = vec3(0.0); opacity = 0.0; float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS; vec3 origin = vec3(0.0); czm_raySegment primaryRayAtmosphereIntersect = czm_raySphereIntersectionInterval(primaryRay, origin, atmosphereOuterRadius); if (primaryRayAtmosphereIntersect == czm_emptyRaySegment) { return; } float x = 1e-7 * primaryRayAtmosphereIntersect.stop / length(primaryRayLength); float w_stop_gt_lprl = 0.5 * (1.0 + czm_approximateTanh(x)); float start_0 = primaryRayAtmosphereIntersect.start; primaryRayAtmosphereIntersect.start = max(primaryRayAtmosphereIntersect.start, 0.0); primaryRayAtmosphereIntersect.stop = min(primaryRayAtmosphereIntersect.stop, length(primaryRayLength)); float x_o_a = start_0 - ATMOSPHERE_THICKNESS; float w_inside_atmosphere = 1.0 - 0.5 * (1.0 + czm_approximateTanh(x_o_a)); int PRIMARY_STEPS = PRIMARY_STEPS_MAX - int(w_inside_atmosphere * 12.0); int LIGHT_STEPS = LIGHT_STEPS_MAX - int(w_inside_atmosphere * 2.0); float rayPositionLength = primaryRayAtmosphereIntersect.start; float totalRayLength = primaryRayAtmosphereIntersect.stop - rayPositionLength; float rayStepLengthIncrease = w_inside_atmosphere * ((1.0 - w_stop_gt_lprl) * totalRayLength / (float(PRIMARY_STEPS * (PRIMARY_STEPS + 1)) / 2.0)); float rayStepLength = max(1.0 - w_inside_atmosphere, w_stop_gt_lprl) * totalRayLength / max(7.0 * w_inside_atmosphere, float(PRIMARY_STEPS)); vec3 rayleighAccumulation = vec3(0.0); vec3 mieAccumulation = vec3(0.0); vec2 opticalDepth = vec2(0.0); vec2 heightScale = vec2(czm_atmosphereRayleighScaleHeight, czm_atmosphereMieScaleHeight); for (int i = 0; i < PRIMARY_STEPS_MAX; ++i) { if (i >= PRIMARY_STEPS) { break; } vec3 samplePosition = primaryRay.origin + primaryRay.direction * (rayPositionLength + rayStepLength); float sampleHeight = length(samplePosition) - atmosphereInnerRadius; vec2 sampleDensity = exp(-sampleHeight / heightScale) * rayStepLength; opticalDepth += sampleDensity; 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); for (int j = 0; j < LIGHT_STEPS_MAX; ++j) { if (j >= LIGHT_STEPS) { break; } vec3 lightPosition = samplePosition + lightDirection * (lightPositionLength + lightStepLength * 0.5); float lightHeight = length(lightPosition) - atmosphereInnerRadius; lightOpticalDepth += exp(-lightHeight / heightScale) * lightStepLength; lightPositionLength += lightStepLength; } vec3 attenuation = exp(-((czm_atmosphereMieCoefficient * (opticalDepth.y + lightOpticalDepth.y)) + (czm_atmosphereRayleighCoefficient * (opticalDepth.x + lightOpticalDepth.x)))); rayleighAccumulation += sampleDensity.x * attenuation; mieAccumulation += sampleDensity.y * attenuation; rayPositionLength += (rayStepLength += rayStepLengthIncrease); } rayleighColor = czm_atmosphereRayleighCoefficient * rayleighAccumulation; mieColor = czm_atmosphereMieCoefficient * mieAccumulation; opacity = length(exp(-((czm_atmosphereMieCoefficient * opticalDepth.y) + (czm_atmosphereRayleighCoefficient * opticalDepth.x)))); } `;var nNt=_(T(),1),NR=`vec2 cordic(float angle) { vec2 vector = vec2(6.0725293500888267e-1, 0.0); float sense = (angle < 0.0) ? -1.0 : 1.0; mat2 rotation = mat2(1.0, sense, -sense, 1.0); vector = rotation * vector; angle -= sense * 7.8539816339744828e-1; sense = (angle < 0.0) ? -1.0 : 1.0; float factor = sense * 5.0e-1; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 4.6364760900080609e-1; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 2.5e-1; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 2.4497866312686414e-1; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.25e-1; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.2435499454676144e-1; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 6.25e-2; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 6.2418809995957350e-2; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 3.125e-2; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 3.1239833430268277e-2; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.5625e-2; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.5623728620476831e-2; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 7.8125e-3; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 7.8123410601011111e-3; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 3.90625e-3; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 3.9062301319669718e-3; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.953125e-3; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.9531225164788188e-3; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 9.765625e-4; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 9.7656218955931946e-4; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 4.8828125e-4; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 4.8828121119489829e-4; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 2.44140625e-4; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 2.4414062014936177e-4; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.220703125e-4; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.2207031189367021e-4; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 6.103515625e-5; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 6.1035156174208773e-5; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 3.0517578125e-5; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 3.0517578115526096e-5; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.52587890625e-5; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.5258789061315762e-5; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 7.62939453125e-6; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 7.6293945311019700e-6; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 3.814697265625e-6; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 3.8146972656064961e-6; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.9073486328125e-6; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.9073486328101870e-6; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 9.5367431640625e-7; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 9.5367431640596084e-7; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 4.76837158203125e-7; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 4.7683715820308884e-7; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 2.384185791015625e-7; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 2.3841857910155797e-7; sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.1920928955078125e-7; rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; return vector; } vec2 czm_cosineAndSine(float angle) { if (angle < -czm_piOverTwo || angle > czm_piOverTwo) { if (angle < 0.0) { return -cordic(angle + czm_pi); } else { return -cordic(angle - czm_pi); } } else { return cordic(angle); } } `;var oNt=_(T(),1),kR=`vec2 czm_decompressTextureCoordinates(float encoded) { float temp = encoded / 4096.0; float xZeroTo4095 = floor(temp); float stx = xZeroTo4095 / 4095.0; float sty = (encoded - xZeroTo4095 * 4096.0) / 4095.0; return vec2(stx, sty); } `;var sNt=_(T(),1),UR=`#if (__VERSION__ == 300 || defined(GL_EXT_frag_depth)) && !defined(LOG_DEPTH) out float v_WindowZ; #endif vec4 czm_depthClamp(vec4 coords) { #ifndef LOG_DEPTH #if __VERSION__ == 300 || defined(GL_EXT_frag_depth) v_WindowZ = (0.5 * (coords.z / coords.w) + 0.5) * coords.w; coords.z = 0.0; #else coords.z = min(coords.z, coords.w); #endif #endif return coords; } `;var cNt=_(T(),1),OR=`mat3 czm_eastNorthUpToEyeCoordinates(vec3 positionMC, vec3 normalEC) { vec3 tangentMC = normalize(vec3(-positionMC.y, positionMC.x, 0.0)); vec3 tangentEC = normalize(czm_normal3D * tangentMC); vec3 bitangentEC = normalize(cross(normalEC, tangentEC)); return mat3( tangentEC.x, tangentEC.y, tangentEC.z, bitangentEC.x, bitangentEC.y, bitangentEC.z, normalEC.x, normalEC.y, normalEC.z); } `;var dNt=_(T(),1),DR=`bool czm_ellipsoidContainsPoint(vec3 ellipsoid_inverseRadii, vec3 point) { vec3 scaled = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(point, 1.0)).xyz; return (dot(scaled, scaled) <= 1.0); } `;var mNt=_(T(),1),BR=`vec2 czm_ellipsoidTextureCoordinates(vec3 normal) { return vec2(atan(normal.y, normal.x) * czm_oneOverTwoPi + 0.5, asin(normal.z) * czm_oneOverPi + 0.5); } `;var hNt=_(T(),1),YR=`bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon) { return all(lessThanEqual(abs(left - right), vec4(epsilon))); } bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon) { return all(lessThanEqual(abs(left - right), vec3(epsilon))); } bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon) { return all(lessThanEqual(abs(left - right), vec2(epsilon))); } bool czm_equalsEpsilon(float left, float right, float epsilon) { return (abs(left - right) <= epsilon); } `;var bNt=_(T(),1),HR=`vec4 czm_eyeOffset(vec4 positionEC, vec3 eyeOffset) { vec4 p = positionEC; vec4 zEyeOffset = normalize(p) * eyeOffset.z; p.xy += eyeOffset.xy + zEyeOffset.xy; p.z += zEyeOffset.z; return p; } `;var gNt=_(T(),1),zR=`vec4 czm_eyeToWindowCoordinates(vec4 positionEC) { vec4 q = czm_projection * positionEC; q.xyz /= q.w; q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; return q; } `;var _Nt=_(T(),1),KR=`float czm_fastApproximateAtan(float x) { return x * (-0.1784 * x - 0.0663 * x * x + 1.0301); } float czm_fastApproximateAtan(float x, float y) { float t = abs(x); float opposite = abs(y); float adjacent = max(t, opposite); opposite = min(t, opposite); t = czm_fastApproximateAtan(opposite / adjacent); t = czm_branchFreeTernary(abs(y) > abs(x), czm_piOverTwo - t, t); t = czm_branchFreeTernary(x < 0.0, czm_pi - t, t); t = czm_branchFreeTernary(y < 0.0, -t, t); return t; } `;var SNt=_(T(),1),JR=`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); } 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 VNt=_(T(),1),QR=`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 ZNt=_(T(),1),jR=`vec3 czm_geodeticSurfaceNormal(vec3 positionOnEllipsoid, vec3 ellipsoidCenter, vec3 oneOverEllipsoidRadiiSquared) { return normalize((positionOnEllipsoid - ellipsoidCenter) * oneOverEllipsoidRadiiSquared); } `;var GNt=_(T(),1),qR=`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 XNt=_(T(),1),$R=`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 WNt=_(T(),1),eG=`float czm_getLambertDiffuse(vec3 lightDirectionEC, vec3 normalEC) { return max(dot(lightDirectionEC, normalEC), 0.0); } `;var PNt=_(T(),1),tG=`float czm_getSpecular(vec3 lightDirectionEC, vec3 toEyeEC, vec3 normalEC, float shininess) { vec3 toReflectedLight = reflect(-lightDirectionEC, normalEC); float specular = max(dot(toReflectedLight, toEyeEC), 0.0); return pow(specular, max(shininess, czm_epsilon2)); } `;var FNt=_(T(),1),nG=`vec4 czm_getWaterNoise(sampler2D normalMap, vec2 uv, float time, float angleInRadians) { float cosAngle = cos(angleInRadians); float sinAngle = sin(angleInRadians); 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); 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)); return ((noise / 4.0) - 0.5) * 2.0; } `;var MNt=_(T(),1),iG=`const vec4 K_HSB2RGB = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); vec3 czm_HSBToRGB(vec3 hsb) { vec3 p = abs(fract(hsb.xxx + K_HSB2RGB.xyz) * 6.0 - K_HSB2RGB.www); return hsb.z * mix(K_HSB2RGB.xxx, clamp(p - K_HSB2RGB.xxx, 0.0, 1.0), hsb.y); } `;var kNt=_(T(),1),oG=`vec3 hueToRGB(float hue) { float r = abs(hue * 6.0 - 3.0) - 1.0; float g = 2.0 - abs(hue * 6.0 - 2.0); float b = 2.0 - abs(hue * 6.0 - 4.0); return clamp(vec3(r, g, b), 0.0, 1.0); } vec3 czm_HSLToRGB(vec3 hsl) { vec3 rgb = hueToRGB(hsl.x); float c = (1.0 - abs(2.0 * hsl.z - 1.0)) * hsl.y; return (rgb - 0.5) * c + hsl.z; } `;var ONt=_(T(),1),rG=`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 BNt=_(T(),1),sG=`vec3 czm_inverseGamma(vec3 color) { return pow(color, vec3(1.0 / czm_gamma)); } `;var HNt=_(T(),1),aG=`bool czm_isEmpty(czm_raySegment interval) { return (interval.stop < 0.0); } `;var KNt=_(T(),1),cG=`bool czm_isFull(czm_raySegment interval) { return (interval.start == 0.0 && interval.stop == czm_infinity); } `;var QNt=_(T(),1),lG=`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 qNt=_(T(),1),dG=`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 e5t=_(T(),1),uG=`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 n5t=_(T(),1),mG=`float czm_luminance(vec3 rgb) { const vec3 W = vec3(0.2125, 0.7154, 0.0721); return dot(rgb, W); } `;var o5t=_(T(),1),fG=`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 s5t=_(T(),1),hG=`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; } float czm_metersPerPixel(vec4 positionEC) { return czm_metersPerPixel(positionEC, czm_pixelRatio); } `;var c5t=_(T(),1),pG=`vec4 czm_modelToWindowCoordinates(vec4 position) { vec4 q = czm_modelViewProjection * position; q.xyz /= q.w; q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; return q; } `;var d5t=_(T(),1),bG=`vec3 czm_multiplyWithColorBalance(vec3 left, vec3 right) { 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 m5t=_(T(),1),yG=`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 h5t=_(T(),1),gG=`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); } vec3 czm_octDecode(vec2 encoded) { return czm_octDecode(encoded, 255.0); } 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)); } 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 b5t=_(T(),1),xG=`vec4 czm_packDepth(float depth) { 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 g5t=_(T(),1),_G=`vec3 lambertianDiffuse(vec3 diffuseColor) { return diffuseColor / czm_pi; } vec3 fresnelSchlick2(vec3 f0, vec3 f90, float VdotH) { float versine = 1.0 - VdotH; float versineSquared = versine * versine; return f0 + (f90 - f0) * versineSquared * versineSquared * versine; } #ifdef USE_ANISOTROPY 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); } 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 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; } float GGX(float alphaRoughness, float NdotH) { float alphaRoughnessSquared = alphaRoughness * alphaRoughness; float f = (NdotH * alphaRoughnessSquared - NdotH) * NdotH + 1.0; return alphaRoughnessSquared / (czm_pi * f * f); } 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; } 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); 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; vec3 diffuseContribution = (1.0 - F) * lambertianDiffuse(diffuseColor); return (diffuseContribution + specularContribution) * NdotL; } `;var _5t=_(T(),1),TG=`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 S5t=_(T(),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); } vec4 czm_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC) { float diffuse = czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 0.0, 1.0), material); if (czm_sceneMode == czm_sceneMode3D) { diffuse += czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 1.0, 0.0), material); } float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material); 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 V5t=_(T(),1),CG=`float czm_planeDistance(vec4 plane, vec3 point) { return (dot(plane.xyz, point) + plane.w); } float czm_planeDistance(vec3 planeNormal, float planeDistance, vec3 point) { return (dot(planeNormal, point) + planeDistance); } `;var Z5t=_(T(),1),VG=`vec3 czm_pointAlongRay(czm_ray ray, float time) { return ray.origin + (time * ray.direction); } `;var G5t=_(T(),1),LG=`czm_raySegment czm_rayEllipsoidIntersectionInterval(czm_ray ray, vec3 ellipsoid_center, vec3 ellipsoid_inverseRadii) { 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) { if (qw >= 0.0) { return czm_emptyRaySegment; } else { float qw2 = qw * qw; float difference = q2 - 1.0; float w2 = dot(w, w); float product = w2 * difference; if (qw2 < product) { return czm_emptyRaySegment; } else if (qw2 > product) { float discriminant = qw * qw - product; float temp = -qw + sqrt(discriminant); 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 { float root = sqrt(difference / w2); czm_raySegment i = czm_raySegment(root, root); return i; } } } else if (q2 < 1.0) { float difference = q2 - 1.0; float w2 = dot(w, w); float product = w2 * difference; float discriminant = qw * qw - product; float temp = -qw + sqrt(discriminant); czm_raySegment i = czm_raySegment(0.0, temp / w2); return i; } else { if (qw < 0.0) { float w2 = dot(w, w); czm_raySegment i = czm_raySegment(0.0, -qw / w2); return i; } else { return czm_emptyRaySegment; } } } `;var X5t=_(T(),1),ZG=`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 W5t=_(T(),1),RG=`float czm_readDepth(sampler2D depthTexture, vec2 texCoords) { return czm_reverseLogDepth(texture(depthTexture, texCoords).r); } `;var P5t=_(T(),1),GG=`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 F5t=_(T(),1),EG=`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 M5t=_(T(),1),XG=`const vec4 K_RGB2HSB = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); vec3 czm_RGBToHSB(vec3 rgb) { vec4 p = mix(vec4(rgb.bg, K_RGB2HSB.wz), vec4(rgb.gb, K_RGB2HSB.xy), step(rgb.b, rgb.g)); vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r)); float d = q.x - min(q.w, q.y); return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + czm_epsilon7)), d / (q.x + czm_epsilon7), q.x); } `;var k5t=_(T(),1),IG=`vec3 RGBtoHCV(vec3 rgb) { vec4 p = (rgb.g < rgb.b) ? vec4(rgb.bg, -1.0, 2.0 / 3.0) : vec4(rgb.gb, 0.0, -1.0 / 3.0); vec4 q = (rgb.r < p.x) ? vec4(p.xyw, rgb.r) : vec4(rgb.r, p.yzx); float c = q.x - min(q.w, q.y); float h = abs((q.w - q.y) / (6.0 * c + czm_epsilon7) + q.z); return vec3(h, c, q.x); } vec3 czm_RGBToHSL(vec3 rgb) { vec3 hcv = RGBtoHCV(rgb); float l = hcv.z - hcv.y * 0.5; float s = hcv.y / (1.0 - abs(l * 2.0 - 1.0) + czm_epsilon7); return vec3(hcv.x, s, l); } `;var O5t=_(T(),1),WG=`vec3 czm_RGBToXYZ(vec3 rgb) { const mat3 RGB2XYZ = mat3(0.4124, 0.2126, 0.0193, 0.3576, 0.7152, 0.1192, 0.1805, 0.0722, 0.9505); vec3 xyz = RGB2XYZ * rgb; vec3 Yxy; Yxy.r = xyz.g; float temp = dot(vec3(1.0), xyz); Yxy.gb = xyz.rg / temp; return Yxy; } `;var B5t=_(T(),1),wG=`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 H5t=_(T(),1),PG=`vec3 czm_saturation(vec3 rgb, float adjustment) { const vec3 W = vec3(0.2125, 0.7154, 0.0721); vec3 intensity = vec3(dot(rgb, W)); return mix(intensity, rgb, adjustment); } `;var K5t=_(T(),1),vG=`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 Q5t=_(T(),1),FG=`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 q5t=_(T(),1),AG=`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 ekt=_(T(),1),MG=`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 nkt=_(T(),1),NG=`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 okt=_(T(),1),kG=`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 skt=_(T(),1),UG=`vec4 czm_textureCube(samplerCube sampler, vec3 p) { #if __VERSION__ == 300 return texture(sampler, p); #else return textureCube(sampler, p); #endif } 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 ckt=_(T(),1),OG=`vec4 czm_transformPlane(vec4 plane, mat4 transform) { vec4 transformedPlane = transform * plane; float normalMagnitude = length(transformedPlane.xyz); return transformedPlane / normalMagnitude; } `;var dkt=_(T(),1),DG=`vec4 czm_translateRelativeToEye(vec3 high, vec3 low) { vec3 highDifference = high - czm_encodedCameraPositionMCHigh; if (length(highDifference) == 0.0) { highDifference = vec3(0); } vec3 lowDifference = low - czm_encodedCameraPositionMCLow; return vec4(highDifference + lowDifference, 1.0); } `;var mkt=_(T(),1),BG=`vec4 czm_translucentPhong(vec3 toEye, czm_material material, vec3 lightDirectionEC) { float diffuse = czm_getLambertDiffuse(vec3(0.0, 0.0, 1.0), material.normal); if (czm_sceneMode == czm_sceneMode3D) { 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); 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 hkt=_(T(),1),YG=`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 bkt=_(T(),1),HG=`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; 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 gkt=_(T(),1),zG=`float czm_unpackDepth(vec4 packedDepth) { return dot(packedDepth, vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)); } `;var _kt=_(T(),1),KG=`float czm_unpackFloat(vec4 packedFloat) { 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 Skt=_(T(),1),JG=`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 Vkt=_(T(),1),QG=`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 Zkt=_(T(),1),jG=`#ifdef LOG_DEPTH 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 coords.z = clamp(coords.z / coords.w, -1.0, 1.0) * coords.w; #endif return coords; } void czm_vertexLogDepth() { #ifdef LOG_DEPTH v_depthFromNearPlusOne = (gl_Position.w - czm_currentFrustum.x) + 1.0; gl_Position = czm_updatePositionDepth(gl_Position); #endif } void czm_vertexLogDepth(vec4 clipCoords) { #ifdef LOG_DEPTH v_depthFromNearPlusOne = (clipCoords.w - czm_currentFrustum.x) + 1.0; czm_updatePositionDepth(clipCoords); #endif } `;var Gkt=_(T(),1),qG=`vec4 czm_screenToEyeCoordinates(vec4 screenCoordinate) { 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); q /= screenCoordinate.w; if (!(czm_inverseProjection == mat4(0.0))) { 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; } 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) { #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; return eyeCoordinate; #else vec4 screenCoord = vec4(screenCoordinateXY, depthOrLogDepth, 1.0); vec4 eyeCoordinate = czm_screenToEyeCoordinates(screenCoord); #endif return eyeCoordinate; } vec4 czm_windowToEyeCoordinates(vec2 fragmentCoordinateXY, float depthOrLogDepth) { vec2 screenCoordXY = (fragmentCoordinateXY.xy - czm_viewport.xy) / czm_viewport.zw; return czm_screenToEyeCoordinates(screenCoordXY, depthOrLogDepth); } `;var Xkt=_(T(),1),$G=`#if !defined(LOG_DEPTH) in float v_WindowZ; #endif 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 Wkt=_(T(),1),eE=`#ifdef LOG_DEPTH in float v_depthFromNearPlusOne; #ifdef POLYGON_OFFSET uniform vec2 u_polygonOffset; #endif #endif void czm_writeLogDepth(float depth) { #if (defined(LOG_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth))) if (depth <= 0.9999999 || depth > czm_farDepthFromNearPlusOne) { discard; } #ifdef POLYGON_OFFSET float factor = u_polygonOffset[0]; float units = u_polygonOffset[1]; #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) if (factor != 0.0) { float x = dFdx(depth); float y = dFdy(depth); float m = sqrt(x * x + y * y); depth += m * factor; } #endif #endif gl_FragDepth = log2(depth) * czm_oneOverLog2FarDepthFromNearPlusOne; #ifdef POLYGON_OFFSET gl_FragDepth += czm_epsilon7 * units; #endif #endif } void czm_writeLogDepth() { #ifdef LOG_DEPTH czm_writeLogDepth(v_depthFromNearPlusOne); #endif } `;var Pkt=_(T(),1),tE=`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 Fkt=_(T(),1),nE=`vec3 czm_XYZToRGB(vec3 Yxy) { const mat3 XYZ2RGB = mat3( 3.2405, -0.9693, 0.0556, -1.5371, 1.8760, -0.2040, -0.4985, 0.0416, 1.0572); vec3 xyz; xyz.r = Yxy.r * Yxy.g / Yxy.b; xyz.g = Yxy.r; xyz.b = Yxy.r * (1.0 - Yxy.g - Yxy.b) / Yxy.b; return XYZ2RGB * xyz; } `;var Sx={czm_degreesPerRadian:EZ,czm_depthRange:XZ,czm_epsilon1:IZ,czm_epsilon2:WZ,czm_epsilon3:wZ,czm_epsilon4:PZ,czm_epsilon5:vZ,czm_epsilon6:FZ,czm_epsilon7:AZ,czm_infinity:MZ,czm_oneOverPi:NZ,czm_oneOverTwoPi:kZ,czm_passCesium3DTile:UZ,czm_passCesium3DTileClassification:OZ,czm_passCesium3DTileClassificationIgnoreShow:DZ,czm_passClassification:BZ,czm_passCompute:YZ,czm_passEnvironment:HZ,czm_passGlobe:zZ,czm_passOpaque:KZ,czm_passOverlay:JZ,czm_passTerrainClassification:QZ,czm_passTranslucent:jZ,czm_passVoxels:qZ,czm_pi:$Z,czm_piOverFour:eR,czm_piOverSix:tR,czm_piOverThree:nR,czm_piOverTwo:iR,czm_radiansPerDegree:oR,czm_sceneMode2D:rR,czm_sceneMode3D:sR,czm_sceneModeColumbusView:aR,czm_sceneModeMorphing:cR,czm_solarRadius:lR,czm_threePiOver2:dR,czm_twoPi:uR,czm_webMercatorMaxLatitude:mR,czm_depthRangeStruct:fR,czm_material:hR,czm_materialInput:pR,czm_modelMaterial:bR,czm_modelVertexOutput:yR,czm_ray:gR,czm_raySegment:xR,czm_shadowParameters:_R,czm_acesTonemapping:TR,czm_alphaWeight:SR,czm_antialias:CR,czm_applyHSBShift:VR,czm_approximateSphericalCoordinates:LR,czm_approximateTanh:ZR,czm_backFacing:RR,czm_branchFreeTernary:GR,czm_cascadeColor:ER,czm_cascadeDistance:XR,czm_cascadeMatrix:IR,czm_cascadeWeights:WR,czm_clipPolygons:wR,czm_columbusViewMorph:PR,czm_computeAtmosphereColor:vR,czm_computeGroundAtmosphereScattering:FR,czm_computePosition:AR,czm_computeScattering:MR,czm_cosineAndSine:NR,czm_decompressTextureCoordinates:kR,czm_depthClamp:UR,czm_eastNorthUpToEyeCoordinates:OR,czm_ellipsoidContainsPoint:DR,czm_ellipsoidTextureCoordinates:BR,czm_equalsEpsilon:YR,czm_eyeOffset:HR,czm_eyeToWindowCoordinates:zR,czm_fastApproximateAtan:KR,czm_fog:JR,czm_gammaCorrect:QR,czm_geodeticSurfaceNormal:jR,czm_getDefaultMaterial:qR,czm_getDynamicAtmosphereLightDirection:$R,czm_getLambertDiffuse:eG,czm_getSpecular:tG,czm_getWaterNoise:nG,czm_HSBToRGB:iG,czm_HSLToRGB:oG,czm_hue:rG,czm_inverseGamma:sG,czm_isEmpty:aG,czm_isFull:cG,czm_latitudeToWebMercatorFraction:lG,czm_linearToSrgb:dG,czm_lineDistance:uG,czm_luminance:mG,czm_maximumComponent:fG,czm_metersPerPixel:hG,czm_modelToWindowCoordinates:pG,czm_multiplyWithColorBalance:bG,czm_nearFarScalar:yG,czm_octDecode:gG,czm_packDepth:xG,czm_pbrLighting:_G,czm_pbrNeutralTonemapping:TG,czm_phong:SG,czm_planeDistance:CG,czm_pointAlongRay:VG,czm_rayEllipsoidIntersectionInterval:LG,czm_raySphereIntersectionInterval:ZG,czm_readDepth:RG,czm_readNonPerspective:GG,czm_reverseLogDepth:EG,czm_RGBToHSB:XG,czm_RGBToHSL:IG,czm_RGBToXYZ:WG,czm_round:wG,czm_saturation:PG,czm_shadowDepthCompare:vG,czm_shadowVisibility:FG,czm_signNotZero:AG,czm_sphericalHarmonics:MG,czm_srgbToLinear:NG,czm_tangentToEyeSpaceMatrix:kG,czm_textureCube:UG,czm_transformPlane:OG,czm_translateRelativeToEye:DG,czm_translucentPhong:BG,czm_transpose:YG,czm_unpackClippingExtents:HG,czm_unpackDepth:zG,czm_unpackFloat:KG,czm_unpackUint:JG,czm_valueTransform:QG,czm_vertexLogDepth:jG,czm_windowToEyeCoordinates:qG,czm_writeDepthClamp:$G,czm_writeLogDepth:eE,czm_writeNonPerspective:tE,czm_XYZToRGB:nE};var hDt=_(T(),1);function EGe(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 iE=EGe;function bte(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 xte(e,t,n){let i,o,r="",s=e.sources;if(c(s))for(i=0,o=s.length;i-1&&i.derivedKeywords.splice(s,1)}return this.createDerivedShaderProgram(e,t,n)};wm.prototype.getDerivedShaderProgram=function(e,t){let n=e._cachedShader,i=t+n.keyword,o=this._shaders[i];if(c(o))return o.shaderProgram};wm.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 Be({sources:[r]})),typeof s=="string"&&(s=new Be({sources:[s]}));let l=this._context,d=r.createCombinedVertexShader(l),u=s.createCombinedFragmentShader(l),f=new tn({gl:l._gl,logShaderCompilation:l.logShaderCompilation,debugShaders:l.debugShaders,vertexShaderSource:r,vertexShaderText:d,fragmentShaderSource:s,fragmentShaderText:u,attributeLocations:a}),p={cache:this,shaderProgram:f,keyword:o,derivedKeywords:[],count:0};return i.derivedKeywords.push(t),f._cachedShader=p,this._shaders[o]=p,f};function CY(e,t){let n=t.derivedKeywords,i=n.length;for(let o=0;omt.maximumTextureSize)throw new L(`Width must be less than or equal to the maximum texture size (${mt.maximumTextureSize}). Check maximumTextureSize.`);if(C.typeOf.number.greaterThan("height",d,0),d>mt.maximumTextureSize)throw new L(`Height must be less than or equal to the maximum texture size (${mt.maximumTextureSize}). Check maximumTextureSize.`);if(!ke.validate(i))throw new L("Invalid options.pixelFormat.");if(!p&&!Ue.validate(o))throw new L("Invalid options.pixelDatatype.");if(i===ke.DEPTH_COMPONENT&&o!==Ue.UNSIGNED_SHORT&&o!==Ue.UNSIGNED_INT)throw new L("When options.pixelFormat is DEPTH_COMPONENT, options.pixelDatatype must be UNSIGNED_SHORT or UNSIGNED_INT.");if(i===ke.DEPTH_STENCIL&&o!==Ue.UNSIGNED_INT_24_8)throw new L("When options.pixelFormat is DEPTH_STENCIL, options.pixelDatatype must be UNSIGNED_INT_24_8.");if(o===Ue.FLOAT&&!t.floatingPointTexture)throw new L("When options.pixelDatatype is FLOAT, this WebGL implementation must support the OES_texture_float extension. Check context.floatingPointTexture.");if(o===Ue.HALF_FLOAT&&!t.halfFloatingPointTexture)throw new L("When options.pixelDatatype is HALF_FLOAT, this WebGL implementation must support the OES_texture_half_float extension. Check context.halfFloatingPointTexture.");if(ke.isDepthFormat(i)){if(c(n))throw new L("When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, source cannot be provided.");if(!t.depthTexture)throw new L("When options.pixelFormat is DEPTH_COMPONENT or DEPTH_STENCIL, this WebGL implementation must support WEBGL_depth_texture. Check context.depthTexture.")}if(p){if(!c(n)||!c(n.arrayBufferView))throw new L("When options.pixelFormat is compressed, options.source.arrayBufferView must be defined.");if(ke.isDXTFormat(f)&&!t.s3tc)throw new L("When options.pixelFormat is S3TC compressed, this WebGL implementation must support the WEBGL_compressed_texture_s3tc extension. Check context.s3tc.");if(ke.isPVRTCFormat(f)&&!t.pvrtc)throw new L("When options.pixelFormat is PVRTC compressed, this WebGL implementation must support the WEBGL_compressed_texture_pvrtc extension. Check context.pvrtc.");if(ke.isASTCFormat(f)&&!t.astc)throw new L("When options.pixelFormat is ASTC compressed, this WebGL implementation must support the WEBGL_compressed_texture_astc extension. Check context.astc.");if(ke.isETC2Format(f)&&!t.etc)throw new L("When options.pixelFormat is ETC2 compressed, this WebGL implementation must support the WEBGL_compressed_texture_etc extension. Check context.etc.");if(ke.isETC1Format(f)&&!t.etc1)throw new L("When options.pixelFormat is ETC1 compressed, this WebGL implementation must support the WEBGL_compressed_texture_etc1 extension. Check context.etc1.");if(ke.isBC7Format(f)&&!t.bc7)throw new L("When options.pixelFormat is BC7 compressed, this WebGL implementation must support the EXT_texture_compression_bptc extension. Check context.bc7.");if(ke.compressedTextureSizeInBytes(f,l,d)!==n.arrayBufferView.byteLength)throw new L("The byte length of the array buffer is invalid for the compressed texture with the given width and height.")}let y=t._gl,h=p?ke.compressedTextureSizeInBytes(i,l,d):ke.textureSizeInBytes(i,o,l,d);this._id=e.id??Hn(),this._context=t,this._textureFilterAnisotropic=t._textureFilterAnisotropic,this._textureTarget=y.TEXTURE_2D,this._texture=y.createTexture(),this._internalFormat=f,this._pixelFormat=i,this._pixelDatatype=o,this._width=l,this._height=d,this._dimensions=new D(l,d),this._hasMipmap=!1,this._sizeInBytes=h,this._preMultiplyAlpha=u,this._flipY=r,this._initialized=!1,this._sampler=void 0,this._sampler=a,Lte(this,a),y.activeTexture(y.TEXTURE0),y.bindTexture(this._textureTarget,this._texture),c(n)?(s?y.pixelStorei(y.UNPACK_COLORSPACE_CONVERSION_WEBGL,y.NONE):y.pixelStorei(y.UNPACK_COLORSPACE_CONVERSION_WEBGL,y.BROWSER_DEFAULT_WEBGL),c(n.arrayBufferView)?ke.isCompressedFormat(f)?FGe(this,n):Ste(this,n):c(n.framebuffer)?MGe(this,n):Cte(this,n),this._initialized=!0):Vte(this),y.bindTexture(this._textureTarget,null)}function FGe(e,t){let i=e._context._gl,o=e._textureTarget,r=e._internalFormat,{width:s,height:a}=e;if(i.pixelStorei(i.UNPACK_ALIGNMENT,4),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1),i.compressedTexImage2D(o,0,r,s,a,0,t.arrayBufferView),c(t.mipLevels)){let l=s,d=a;for(let u=0;un.drawingBufferWidth)throw new L("framebufferXOffset + width must be less than or equal to drawingBufferWidth");if(r+a>n.drawingBufferHeight)throw new L("framebufferYOffset + height must be less than or equal to drawingBufferHeight.");return new Pm({context:t,width:s,height:a,pixelFormat:i,source:{framebuffer:c(l)?l:t.defaultFramebuffer,xOffset:o,yOffset:r,width:s,height:a}})};Object.defineProperties(Pm.prototype,{id:{get:function(){return this._id}},sampler:{get:function(){return this._sampler},set:function(e){Lte(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}},sizeInBytes:{get:function(){return this._hasMipmap?Math.floor(this._sizeInBytes*4/3):this._sizeInBytes}},_target:{get:function(){return this._textureTarget}}});function Lte(e,t){let{minificationFilter:n,magnificationFilter:i}=t,o=[Jt.NEAREST_MIPMAP_NEAREST,Jt.NEAREST_MIPMAP_LINEAR,Jt.LINEAR_MIPMAP_NEAREST,Jt.LINEAR_MIPMAP_LINEAR].includes(n),r=e._context,s=e._pixelFormat,a=e._pixelDatatype;(a===Ue.FLOAT&&!r.textureFloatLinear||a===Ue.HALF_FLOAT&&!r.textureHalfFloatLinear)&&(n=o?Jt.NEAREST_MIPMAP_NEAREST:Jt.NEAREST,i=di.NEAREST),r.webgl2&&ke.isDepthFormat(s)&&(n=Jt.NEAREST,i=di.NEAREST);let l=r._gl,d=e._textureTarget;l.activeTexture(l.TEXTURE0),l.bindTexture(d,e._texture),l.texParameteri(d,l.TEXTURE_MIN_FILTER,n),l.texParameteri(d,l.TEXTURE_MAG_FILTER,i),l.texParameteri(d,l.TEXTURE_WRAP_S,t.wrapS),l.texParameteri(d,l.TEXTURE_WRAP_T,t.wrapT),c(e._textureFilterAnisotropic)&&l.texParameteri(d,e._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,t.maximumAnisotropy),l.bindTexture(d,null)}Pm.prototype.copyFrom=function(e){C.defined("options",e);let{xOffset:t=0,yOffset:n=0,source:i,skipColorSpaceConversion:o=!1}=e;if(C.defined("options.source",i),ke.isDepthFormat(this._pixelFormat))throw new L("Cannot call copyFrom when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.");if(ke.isCompressedFormat(this._pixelFormat))throw new L("Cannot call copyFrom with a compressed texture pixel format.");C.typeOf.number.greaterThanOrEquals("xOffset",t,0),C.typeOf.number.greaterThanOrEquals("yOffset",n,0),C.typeOf.number.lessThanOrEquals("xOffset + options.source.width",t+i.width,this._width),C.typeOf.number.lessThanOrEquals("yOffset + options.source.height",n+i.height,this._height);let s=this._context._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture);let{width:l,height:d}=i;c(i.videoWidth)&&c(i.videoHeight)?(l=i.videoWidth,d=i.videoHeight):c(i.naturalWidth)&&c(i.naturalHeight)&&(l=i.naturalWidth,d=i.naturalHeight),o?s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,s.NONE):s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,s.BROWSER_DEFAULT_WEBGL);let u=!1;this._initialized||(t===0&&n===0&&l===this._width&&d===this._height?(c(i.arrayBufferView)?Ste(this,i):Cte(this,i),u=!0):(s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,!1),Vte(this)),this._initialized=!0),u||(c(i.arrayBufferView)?AGe(this,i.arrayBufferView,t,n,l,d):NGe(this,i,t,n)),s.bindTexture(a,null)};Pm.prototype.copyFromFramebuffer=function(e,t,n,i,o,r){if(e=e??0,t=t??0,n=n??0,i=i??0,o=o??this._width,r=r??this._height,ke.isDepthFormat(this._pixelFormat))throw new L("Cannot call copyFromFramebuffer when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.");if(this._pixelDatatype===Ue.FLOAT)throw new L("Cannot call copyFromFramebuffer when the texture pixel data type is FLOAT.");if(this._pixelDatatype===Ue.HALF_FLOAT)throw new L("Cannot call copyFromFramebuffer when the texture pixel data type is HALF_FLOAT.");if(ke.isCompressedFormat(this._pixelFormat))throw new L("Cannot call copyFrom with a compressed texture pixel format.");C.typeOf.number.greaterThanOrEquals("xOffset",e,0),C.typeOf.number.greaterThanOrEquals("yOffset",t,0),C.typeOf.number.greaterThanOrEquals("framebufferXOffset",n,0),C.typeOf.number.greaterThanOrEquals("framebufferYOffset",i,0),C.typeOf.number.lessThanOrEquals("xOffset + width",e+o,this._width),C.typeOf.number.lessThanOrEquals("yOffset + height",t+r,this._height);let s=this._context._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture),s.copyTexSubImage2D(a,0,e,t,n,i,o,r),s.bindTexture(a,null),this._initialized=!0};Pm.prototype.generateMipmap=function(e){if(e=e??_u.DONT_CARE,ke.isDepthFormat(this._pixelFormat))throw new L("Cannot call generateMipmap when the texture pixel format is DEPTH_COMPONENT or DEPTH_STENCIL.");if(ke.isCompressedFormat(this._pixelFormat))throw new L("Cannot call generateMipmap with a compressed pixel format.");if(!this._context.webgl2){if(this._width>1&&!w.isPowerOfTwo(this._width))throw new L("width must be a power of two to call generateMipmap() in a WebGL1 context.");if(this._height>1&&!w.isPowerOfTwo(this._height))throw new L("height must be a power of two to call generateMipmap() in a WebGL1 context.")}if(!_u.validate(e))throw new L("hint is invalid.");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)};Pm.prototype.isDestroyed=function(){return!1};Pm.prototype.destroy=function(){return this._context._gl.deleteTexture(this._texture),he(this)};var Pt=Pm;var JDt=_(T(),1);function Cx(){this._textures={},this._numberOfTextures=0,this._texturesToRelease={}}Object.defineProperties(Cx.prototype,{numberOfTextures:{get:function(){return this._numberOfTextures}}});Cx.prototype.getTexture=function(e){let t=this._textures[e];if(c(t))return delete this._texturesToRelease[e],++t.count,t.texture};Cx.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};Cx.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={}};Cx.prototype.isDestroyed=function(){return!1};Cx.prototype.destroy=function(){let e=this._textures;for(let t in e)e.hasOwnProperty(t)&&e[t].texture.finalDestroy();return he(this)};var rE=Cx;var n3t=_(T(),1);var TBt=_(T(),1);var fBt=_(T(),1);var iBt=_(T(),1);function Tu(e){this.planes=e??[]}var sE=[new m,new m,new m];m.clone(m.UNIT_X,sE[0]);m.clone(m.UNIT_Y,sE[1]);m.clone(m.UNIT_Z,sE[2]);var D0=new m,kGe=new m,Zte=new cn(new m(1,0,0),0);Tu.fromBoundingSphere=function(e,t){if(!c(e))throw new L("boundingSphere is required.");c(t)||(t=new Tu);let n=sE.length,i=t.planes;i.length=2*n;let o=e.center,r=e.radius,s=0;for(let a=0;ae.right)throw new L("right must be greater than left.");if(e.bottom>e.top)throw new L("top must be greater than bottom.");if(e.near<=0||e.near>e.far)throw new L("near must be greater than zero and less than far.");e._left=e.left,e._right=e.right,e._top=e.top,e._bottom=e.bottom,e._near=e.near,e._far=e.far,e._orthographicMatrix=M.computeOrthographicOffCenter(e.left,e.right,e.bottom,e.top,e.near,e.far,e._orthographicMatrix)}}Object.defineProperties(uh.prototype,{projectionMatrix:{get:function(){return Rte(this),this._orthographicMatrix}}});var UGe=new m,OGe=new m,DGe=new m,VY=new m;uh.prototype.computeCullingVolume=function(e,t,n){if(!c(e))throw new L("position is required.");if(!c(t))throw new L("direction is required.");if(!c(n))throw new L("up is required.");let i=this._cullingVolume.planes,o=this.top,r=this.bottom,s=this.right,a=this.left,l=this.near,d=this.far,u=m.cross(t,n,UGe);m.normalize(u,u);let f=OGe;m.multiplyByScalar(t,l,f),m.add(e,f,f);let p=DGe;m.multiplyByScalar(u,a,p),m.add(f,p,p);let y=i[0];return c(y)||(y=i[0]=new ce),y.x=u.x,y.y=u.y,y.z=u.z,y.w=-m.dot(u,p),m.multiplyByScalar(u,s,p),m.add(f,p,p),y=i[1],c(y)||(y=i[1]=new ce),y.x=-u.x,y.y=-u.y,y.z=-u.z,y.w=-m.dot(m.negate(u,VY),p),m.multiplyByScalar(n,r,p),m.add(f,p,p),y=i[2],c(y)||(y=i[2]=new ce),y.x=n.x,y.y=n.y,y.z=n.z,y.w=-m.dot(n,p),m.multiplyByScalar(n,o,p),m.add(f,p,p),y=i[3],c(y)||(y=i[3]=new ce),y.x=-n.x,y.y=-n.y,y.z=-n.z,y.w=-m.dot(m.negate(n,VY),p),y=i[4],c(y)||(y=i[4]=new ce),y.x=t.x,y.y=t.y,y.z=t.z,y.w=-m.dot(t,f),m.multiplyByScalar(t,d,p),m.add(e,p,p),y=i[5],c(y)||(y=i[5]=new ce),y.x=-t.x,y.y=-t.y,y.z=-t.z,y.w=-m.dot(m.negate(t,VY),p),this._cullingVolume};uh.prototype.getPixelDimensions=function(e,t,n,i,o){if(Rte(this),!c(e)||!c(t))throw new L("Both drawingBufferWidth and drawingBufferHeight are required.");if(e<=0)throw new L("drawingBufferWidth must be greater than zero.");if(t<=0)throw new L("drawingBufferHeight must be greater than zero.");if(!c(n))throw new L("distance is required.");if(!c(i))throw new L("pixelRatio is required.");if(i<=0)throw new L("pixelRatio must be greater than zero.");if(!c(o))throw new L("A result object is required.");let r=this.right-this.left,s=this.top-this.bottom,a=i*r/e,l=i*s/t;return o.x=a,o.y=l,o};uh.prototype.clone=function(e){return c(e)||(e=new uh),e.left=this.left,e.right=this.right,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};uh.prototype.equals=function(e){return c(e)&&e instanceof uh&&this.right===e.right&&this.left===e.left&&this.top===e.top&&this.bottom===e.bottom&&this.near===e.near&&this.far===e.far};uh.prototype.equalsEpsilon=function(e,t,n){return e===this||c(e)&&e instanceof uh&&w.equalsEpsilon(this.right,e.right,t,n)&&w.equalsEpsilon(this.left,e.left,t,n)&&w.equalsEpsilon(this.top,e.top,t,n)&&w.equalsEpsilon(this.bottom,e.bottom,t,n)&&w.equalsEpsilon(this.near,e.near,t,n)&&w.equalsEpsilon(this.far,e.far,t,n)};var Oo=uh;function Zl(e){e=e??z.EMPTY_OBJECT,this._offCenterFrustum=new Oo,this.width=e.width,this._width=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}Zl.packedLength=4;Zl.pack=function(e,t,n){return C.typeOf.object("value",e),C.defined("array",t),n=n??0,t[n++]=e.width,t[n++]=e.aspectRatio,t[n++]=e.near,t[n]=e.far,t};Zl.unpack=function(e,t,n){return C.defined("array",e),t=t??0,c(n)||(n=new Zl),n.width=e[t++],n.aspectRatio=e[t++],n.near=e[t++],n.far=e[t],n};function B0(e){if(!c(e.width)||!c(e.aspectRatio)||!c(e.near)||!c(e.far))throw new L("width, aspectRatio, near, or far parameters are not set.");let t=e._offCenterFrustum;if(e.width!==e._width||e.aspectRatio!==e._aspectRatio||e.near!==e._near||e.far!==e._far){if(e.aspectRatio<0)throw new L("aspectRatio must be positive.");if(e.near<0||e.near>e.far)throw new L("near must be greater than zero and less than far.");e._aspectRatio=e.aspectRatio,e._width=e.width,e._near=e.near,e._far=e.far;let n=1/e.aspectRatio;t.right=e.width*.5,t.left=-t.right,t.top=n*t.right,t.bottom=-t.top,t.near=e.near,t.far=e.far}}Object.defineProperties(Zl.prototype,{projectionMatrix:{get:function(){return B0(this),this._offCenterFrustum.projectionMatrix}},offCenterFrustum:{get:function(){return B0(this),this._offCenterFrustum}}});Zl.prototype.computeCullingVolume=function(e,t,n){return B0(this),this._offCenterFrustum.computeCullingVolume(e,t,n)};Zl.prototype.getPixelDimensions=function(e,t,n,i,o){return B0(this),this._offCenterFrustum.getPixelDimensions(e,t,n,i,o)};Zl.prototype.clone=function(e){return c(e)||(e=new Zl),e.aspectRatio=this.aspectRatio,e.width=this.width,e.near=this.near,e.far=this.far,e._aspectRatio=void 0,e._width=void 0,e._near=void 0,e._far=void 0,this._offCenterFrustum.clone(e._offCenterFrustum),e};Zl.prototype.equals=function(e){return!c(e)||!(e instanceof Zl)?!1:(B0(this),B0(e),this.width===e.width&&this.aspectRatio===e.aspectRatio&&this._offCenterFrustum.equals(e._offCenterFrustum))};Zl.prototype.equalsEpsilon=function(e,t,n){return!c(e)||!(e instanceof Zl)?!1:(B0(this),B0(e),w.equalsEpsilon(this.width,e.width,t,n)&&w.equalsEpsilon(this.aspectRatio,e.aspectRatio,t,n)&&this._offCenterFrustum.equalsEpsilon(e._offCenterFrustum,t,n))};var sn=Zl;var IBt=_(T(),1);var LY={};function BGe(e){let t=6.239996+.0172019696544*e;return .001657*Math.sin(t+.01671*Math.sin(t))}var YGe=32.184,HGe=2451545;function zte(e,t){t=ee.addSeconds(e,YGe,t);let n=ee.totalDays(t)-HGe;return t=ee.addSeconds(t,BGe(n),t),t}var a5=new ee(2451545,0,zn.TAI),zGe=1e3,Su=w.RADIANS_PER_DEGREE,ud=w.RADIANS_PER_ARCSECOND,wa=14959787e4,Gte=new te;function Kte(e,t,n,i,o,r,s){if(n<0&&(n=-n,o+=w.PI),n<0||n>w.PI)throw new L("The inclination is out of range. Inclination must be greater than or equal to zero and less than or equal to Pi radians.");let a=e*(1-t),l=i-o,d=o,u=JGe(r-i,t);if(KGe(t,0)==="Hyperbolic"&&Math.abs(w.negativePiToPi(u))>=Math.acos(-1/t))throw new L("The true anomaly of the hyperbolic orbit lies outside of the bounds of the hyperbola.");$Ge(l,n,d,Gte);let p=a*(1+t),y=Math.cos(u),h=Math.sin(u),g=1+t*y;if(g<=w.Epsilon10)throw new L("elements cannot be converted to cartesian");let x=p/g;return c(s)?(s.x=x*y,s.y=x*h,s.z=0):s=new m(x*y,x*h,0),te.multiplyByVector(Gte,s,s)}function KGe(e,t){if(e<0)throw new L("eccentricity cannot be negative.");return e<=t?"Circular":e<1-t?"Elliptical":e<=1+t?"Parabolic":"Hyperbolic"}function JGe(e,t){if(t<0||t>=1)throw new L("eccentricity out of range.");let n=jGe(e,t);return qGe(n,t)}var Ete=50,QGe=w.EPSILON8;function jGe(e,t){if(t<0||t>=1)throw new L("eccentricity out of range.");let n=Math.floor(e/w.TWO_PI);e-=n*w.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;rQGe;++r){o=i;let s=o-t*Math.sin(o)-e,a=1-t*Math.cos(o);i=o-s/a}if(r>=Ete)throw new L("Kepler equation did not converge");return o=i+n*w.TWO_PI,o}function qGe(e,t){if(t<0||t>=1)throw new L("eccentricity out of range.");let n=Math.floor(e/w.TWO_PI);e-=n*w.TWO_PI;let i=Math.cos(e)-t,o=Math.sin(e)*Math.sqrt(1-t*t),r=Math.atan2(o,i);return r=w.zeroToTwoPi(r),e<0&&(r-=w.TWO_PI),r+=n*w.TWO_PI,r}function $Ge(e,t,n,i){if(t<0||t>w.PI)throw new L("inclination out of range");let o=Math.cos(e),r=Math.sin(e),s=Math.cos(t),a=Math.sin(t),l=Math.cos(n),d=Math.sin(n);return c(i)?(i[0]=l*o-d*r*s,i[1]=d*o+l*r*s,i[2]=r*a,i[3]=-l*r-d*o*s,i[4]=-d*r+l*o*s,i[5]=o*a,i[6]=d*a,i[7]=-l*a,i[8]=s):i=new te(l*o-d*r*s,-l*r-d*o*s,d*a,d*o+l*r*s,-d*r+l*o*s,-l*a,r*a,o*a,s),i}var eEe=1.0000010178*wa,tEe=100.46645683*Su,nEe=129597742283429e-5*ud,Xte=16002,Ite=21863,Wte=32004,wte=10931,Pte=14529,vte=16368,Fte=15318,Ate=32794,iEe=64*1e-7*wa,oEe=-152*1e-7*wa,rEe=62*1e-7*wa,sEe=-8*1e-7*wa,aEe=32*1e-7*wa,cEe=-41*1e-7*wa,lEe=19*1e-7*wa,dEe=-11*1e-7*wa,uEe=-150*1e-7*wa,mEe=-46*1e-7*wa,fEe=68*1e-7*wa,hEe=54*1e-7*wa,pEe=14*1e-7*wa,bEe=24*1e-7*wa,yEe=-28*1e-7*wa,gEe=22*1e-7*wa,Mte=10,Nte=16002,kte=21863,Ute=10931,Ote=1473,Dte=32004,Bte=4387,Yte=73,xEe=-325*1e-7,_Ee=-322*1e-7,TEe=-79*1e-7,SEe=232*1e-7,CEe=-52*1e-7,VEe=97*1e-7,LEe=55*1e-7,ZEe=-41*1e-7,REe=-105*1e-7,GEe=-137*1e-7,EEe=258*1e-7,XEe=35*1e-7,IEe=-116*1e-7,WEe=-88*1e-7,wEe=-112*1e-7,PEe=-80*1e-7,rC=new ee(0,0,zn.TAI);function vEe(e,t){zte(e,rC);let i=(rC.dayNumber-a5.dayNumber+(rC.secondsOfDay-a5.secondsOfDay)/Kn.SECONDS_PER_DAY)/(Kn.DAYS_PER_JULIAN_CENTURY*10),o=.3595362*i,r=eEe+iEe*Math.cos(Xte*o)+uEe*Math.sin(Xte*o)+oEe*Math.cos(Ite*o)+mEe*Math.sin(Ite*o)+rEe*Math.cos(Wte*o)+fEe*Math.sin(Wte*o)+sEe*Math.cos(wte*o)+hEe*Math.sin(wte*o)+aEe*Math.cos(Pte*o)+pEe*Math.sin(Pte*o)+cEe*Math.cos(vte*o)+bEe*Math.sin(vte*o)+lEe*Math.cos(Fte*o)+yEe*Math.sin(Fte*o)+dEe*Math.cos(Ate*o)+gEe*Math.sin(Ate*o),s=tEe+nEe*i+xEe*Math.cos(Mte*o)+REe*Math.sin(Mte*o)+_Ee*Math.cos(Nte*o)+GEe*Math.sin(Nte*o)+TEe*Math.cos(kte*o)+EEe*Math.sin(kte*o)+SEe*Math.cos(Ute*o)+XEe*Math.sin(Ute*o)+CEe*Math.cos(Ote*o)+IEe*Math.sin(Ote*o)+VEe*Math.cos(Dte*o)+WEe*Math.sin(Dte*o)+LEe*Math.cos(Bte*o)+wEe*Math.sin(Bte*o)+ZEe*Math.cos(Yte*o)+PEe*Math.sin(Yte*o),a=.0167086342-.0004203654*i,l=102.93734808*Su+11612.3529*ud*i,d=469.97289*ud*i,u=174.87317577*Su-8679.27034*ud*i;return Kte(r,a,d,l,u,s,t)}function Jte(e,t){zte(e,rC);let i=(rC.dayNumber-a5.dayNumber+(rC.secondsOfDay-a5.secondsOfDay)/Kn.SECONDS_PER_DAY)/Kn.DAYS_PER_JULIAN_CENTURY,o=i*i,r=o*i,s=r*i,a=383397.7725+.004*i,l=.055545526-16e-9*i,d=5.15668983*Su,u=-8e-5*i+.02966*o-42e-6*r-13e-8*s,f=83.35324312*Su,p=146434202669e-4*i-38.2702*o-.045047*r+21301e-8*s,y=125.04455501*Su,h=-69679193631e-4*i+6.3602*o+.007625*r-3586e-8*s,g=218.31664563*Su,x=17325593434847e-4*i-6.391*o+.006588*r-3169e-8*s,S=297.85019547*Su+ud*(1602961601209e-3*i-6.3706*o+.006593*r-3169e-8*s),V=93.27209062*Su+ud*(17395272628478e-4*i-12.7512*o-.001037*r+417e-8*s),Z=134.96340251*Su+ud*(17179159232178e-4*i+31.8792*o+.051635*r-2447e-7*s),R=357.52910918*Su+ud*(1295965810481e-4*i-.5532*o+136e-6*r-1149e-8*s),E=310.17137918*Su-ud*(6967051436e-3*i+6.2068*o+.007618*r-3219e-8*s),I=2*S,v=4*S,P=6*S,F=2*Z,N=3*Z,b=4*Z,G=2*V;a+=3400.4*Math.cos(I)-635.6*Math.cos(I-Z)-235.6*Math.cos(Z)+218.1*Math.cos(I-R)+181*Math.cos(I+Z),l+=.014216*Math.cos(I-Z)+.008551*Math.cos(I-F)-.001383*Math.cos(Z)+.001356*Math.cos(I+Z)-.001147*Math.cos(v-N)-914e-6*Math.cos(v-F)+869e-6*Math.cos(I-R-Z)-627e-6*Math.cos(I)-394e-6*Math.cos(v-b)+282e-6*Math.cos(I-R-F)-279e-6*Math.cos(S-Z)-236e-6*Math.cos(F)+231e-6*Math.cos(v)+229e-6*Math.cos(P-b)-201e-6*Math.cos(F-G),u+=486.26*Math.cos(I-G)-40.13*Math.cos(I)+37.51*Math.cos(G)+25.73*Math.cos(F-G)+19.97*Math.cos(I-R-G),p+=-55609*Math.sin(I-Z)-34711*Math.sin(I-F)-9792*Math.sin(Z)+9385*Math.sin(v-N)+7505*Math.sin(v-F)+5318*Math.sin(I+Z)+3484*Math.sin(v-b)-3417*Math.sin(I-R-Z)-2530*Math.sin(P-b)-2376*Math.sin(I)-2075*Math.sin(I-N)-1883*Math.sin(F)-1736*Math.sin(P-5*Z)+1626*Math.sin(R)-1370*Math.sin(P-N),h+=-5392*Math.sin(I-G)-540*Math.sin(R)-441*Math.sin(I)+423*Math.sin(G)-288*Math.sin(F-G),x+=-3332.9*Math.sin(I)+1197.4*Math.sin(I-Z)-662.5*Math.sin(R)+396.3*Math.sin(Z)-218*Math.sin(I-R);let X=2*E,W=3*E;u+=46.997*Math.cos(E)*i-.614*Math.cos(I-G+E)*i+.614*Math.cos(I-G-E)*i-.0297*Math.cos(X)*o-.0335*Math.cos(E)*o+.0012*Math.cos(I-G+X)*o-16e-5*Math.cos(E)*r+4e-5*Math.cos(W)*r+4e-5*Math.cos(X)*r;let A=2.116*Math.sin(E)*i-.111*Math.sin(I-G-E)*i-.0015*Math.sin(E)*o;p+=A,x+=A,h+=-520.77*Math.sin(E)*i+13.66*Math.sin(I-G+E)*i+1.12*Math.sin(I-E)*i-1.06*Math.sin(G-E)*i+.66*Math.sin(X)*o+.371*Math.sin(E)*o-.035*Math.sin(I-G+X)*o-.015*Math.sin(I-G+E)*o+.0014*Math.sin(E)*r-.0011*Math.sin(W)*r-9e-4*Math.sin(X)*r,a*=zGe;let k=d+u*ud,B=f+p*ud,O=g+x*ud,H=y+h*ud;return Kte(a,l,k,B,H,O,t)}var Hte=.012300034,FEe=Hte/(Hte+1)*-1;function AEe(e,t){return t=Jte(e,t),m.multiplyByScalar(t,FEe,t)}var Qte=new te(1.0000000000000002,5619723173785822e-31,4690511510146299e-34,-5154129427414611e-31,.9174820620691819,-.39777715593191376,-223970096136568e-30,.39777715593191376,.9174820620691819),aE=new m;LY.computeSunPositionInEarthInertialFrame=function(e,t){return c(e)||(e=ee.now()),c(t)||(t=new m),aE=vEe(e,aE),t=m.negate(aE,t),AEe(e,aE),m.subtract(t,aE,t),te.multiplyByVector(Qte,t,t),t};LY.computeMoonPositionInEarthInertialFrame=function(e,t){return c(e)||(e=ee.now()),t=Jte(e,t),te.multiplyByVector(Qte,t,t),t};var Y0=LY;var wBt=_(T(),1),c5={MORPHING:0,COLUMBUS_VIEW:1,SCENE2D:2,SCENE3D:3};c5.getMorphTime=function(e){return e===c5.SCENE3D?1:e===c5.MORPHING?void 0:0};var se=Object.freeze(c5);var ABt=_(T(),1);function MEe(e){e=e??z.EMPTY_OBJECT,this.color=Y.clone(e.color??Y.WHITE),this.intensity=e.intensity??2}var Xp=MEe;function sC(){this.globeDepthTexture=void 0,this.gamma=void 0,this._viewport=new je,this._viewportCartesian4=new ce,this._viewportDirty=!1,this._viewportOrthographicMatrix=M.clone(M.IDENTITY),this._viewportTransformation=M.clone(M.IDENTITY),this._model=M.clone(M.IDENTITY),this._view=M.clone(M.IDENTITY),this._inverseView=M.clone(M.IDENTITY),this._projection=M.clone(M.IDENTITY),this._infiniteProjection=M.clone(M.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=te.clone(M.IDENTITY),this._view3DDirty=!0,this._view3D=new M,this._inverseView3DDirty=!0,this._inverseView3D=new M,this._inverseModelDirty=!0,this._inverseModel=new M,this._inverseTransposeModelDirty=!0,this._inverseTransposeModel=new te,this._viewRotation=new te,this._inverseViewRotation=new te,this._viewRotation3D=new te,this._inverseViewRotation3D=new te,this._inverseProjectionDirty=!0,this._inverseProjection=new M,this._modelViewDirty=!0,this._modelView=new M,this._modelView3DDirty=!0,this._modelView3D=new M,this._modelViewRelativeToEyeDirty=!0,this._modelViewRelativeToEye=new M,this._inverseModelViewDirty=!0,this._inverseModelView=new M,this._inverseModelView3DDirty=!0,this._inverseModelView3D=new M,this._viewProjectionDirty=!0,this._viewProjection=new M,this._inverseViewProjectionDirty=!0,this._inverseViewProjection=new M,this._modelViewProjectionDirty=!0,this._modelViewProjection=new M,this._inverseModelViewProjectionDirty=!0,this._inverseModelViewProjection=new M,this._modelViewProjectionRelativeToEyeDirty=!0,this._modelViewProjectionRelativeToEye=new M,this._modelViewInfiniteProjectionDirty=!0,this._modelViewInfiniteProjection=new M,this._normalDirty=!0,this._normal=new te,this._normal3DDirty=!0,this._normal3D=new te,this._inverseNormalDirty=!0,this._inverseNormal=new te,this._inverseNormal3DDirty=!0,this._inverseNormal3D=new te,this._encodedCameraPositionMCDirty=!0,this._encodedCameraPositionMC=new Bn,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 M,this._enuToModel=new M,this._pixelRatio=1,this._orthographicIn3D=!1,this._backgroundColor=new Y,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(sC.prototype,{frameState:{get:function(){return this._frameState}},viewport:{get:function(){return this._viewport},set:function(e){if(!je.equals(e,this._viewport)){je.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 qte(this),this._viewportOrthographicMatrix}},viewportTransformation:{get:function(){return qte(this),this._viewportTransformation}},model:{get:function(){return this._model},set:function(e){M.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,M.inverse(this._model,this._inverseModel)),this._inverseModel}},inverseTransposeModel:{get:function(){let e=this._inverseTransposeModel;return this._inverseTransposeModelDirty&&(this._inverseTransposeModelDirty=!1,M.getMatrix3(this.inverseModel,e),te.transpose(e,e)),e}},view:{get:function(){return this._view}},view3D:{get:function(){return RY(this),this._view3D}},viewRotation:{get:function(){return RY(this),this._viewRotation}},viewRotation3D:{get:function(){return RY(this),this._viewRotation3D}},inverseView:{get:function(){return this._inverseView}},inverseView3D:{get:function(){return tne(this),this._inverseView3D}},inverseViewRotation:{get:function(){return this._inverseViewRotation}},inverseViewRotation3D:{get:function(){return tne(this),this._inverseViewRotation3D}},projection:{get:function(){return this._projection}},inverseProjection:{get:function(){return JEe(this),this._inverseProjection}},infiniteProjection:{get:function(){return this._infiniteProjection}},modelView:{get:function(){return QEe(this),this._modelView}},modelView3D:{get:function(){return jEe(this),this._modelView3D}},modelViewRelativeToEye:{get:function(){return iXe(this),this._modelViewRelativeToEye}},inverseModelView:{get:function(){return qEe(this),this._inverseModelView}},inverseModelView3D:{get:function(){return $Ee(this),this._inverseModelView3D}},viewProjection:{get:function(){return eXe(this),this._viewProjection}},inverseViewProjection:{get:function(){return tXe(this),this._inverseViewProjection}},modelViewProjection:{get:function(){return nXe(this),this._modelViewProjection}},inverseModelViewProjection:{get:function(){return oXe(this),this._inverseModelViewProjection}},modelViewProjectionRelativeToEye:{get:function(){return rXe(this),this._modelViewProjectionRelativeToEye}},modelViewInfiniteProjection:{get:function(){return sXe(this),this._modelViewInfiniteProjection}},normal:{get:function(){return aXe(this),this._normal}},normal3D:{get:function(){return cXe(this),this._normal3D}},inverseNormal:{get:function(){return lXe(this),this._inverseNormal}},inverseNormal3D:{get:function(){return dXe(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 ene(this),this._encodedCameraPositionMC.high}},encodedCameraPositionMCLow:{get:function(){return ene(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??re.default}}});function NEe(e,t){M.clone(t,e._view),M.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 kEe(e,t){M.clone(t,e._inverseView),M.getMatrix3(t,e._inverseViewRotation)}function UEe(e,t){M.clone(t,e._projection),e._inverseProjectionDirty=!0,e._viewProjectionDirty=!0,e._inverseViewProjectionDirty=!0,e._modelViewProjectionDirty=!0,e._modelViewProjectionRelativeToEyeDirty=!0}function OEe(e,t){M.clone(t,e._infiniteProjection),e._modelViewInfiniteProjectionDirty=!0}var jte=new m,DEe=new M;function BEe(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(c(o)?(e._eyeHeight=o.height,e._eyeEllipsoidNormalEC=n.geodeticSurfaceNormalCartographic(o,e._eyeEllipsoidNormalEC),i=m.fromRadians(o.longitude,o.latitude,0,n,jte)):(e._eyeHeight=-n.maximumRadius,m.magnitude(t.positionWC)>0&&(e._eyeEllipsoidNormalEC=m.normalize(t.positionWC,e._eyeEllipsoidNormalEC)),i=n.scaleToGeodeticSurface(t.positionWC,jte)),e._encodedCameraPositionMCDirty=!0,!c(i))return;e._eyeEllipsoidNormalEC=te.multiplyByVector(e._viewRotation,e._eyeEllipsoidNormalEC,e._eyeEllipsoidNormalEC);let r=wt.eastNorthUpToFixedFrame(i,n,DEe);e._enuToModel=M.multiplyTransformation(e.inverseModel,r,e._enuToModel),e._modelToEnu=M.inverseTransformation(e._enuToModel,e._modelToEnu),w.equalsEpsilon(n._radii.x,n._radii.y,w.EPSILON15)&&(e._eyeEllipsoidCurvature=n.getLocalCurvature(i,e._eyeEllipsoidCurvature))}var ZY=new te,YEe=new pe;function HEe(e,t){wt.computeIcrfToCentralBodyFixedMatrix(t.time,ZY);let n=Y0.computeSunPositionInEarthInertialFrame(t.time,e._sunPositionWC);te.multiplyByVector(ZY,n,n),m.normalize(n,e._sunDirectionWC),n=te.multiplyByVector(e.viewRotation3D,n,e._sunDirectionEC),m.normalize(n,n),n=Y0.computeMoonPositionInEarthInertialFrame(t.time,e._moonDirectionEC),te.multiplyByVector(ZY,n,n),te.multiplyByVector(e.viewRotation3D,n,n),m.normalize(n,n);let i=t.mapProjection,r=i.ellipsoid.cartesianToCartographic(e._sunPositionWC,YEe);i.project(r,e._sunPositionColumbusView)}sC.prototype.updateCamera=function(e){NEe(this,e.viewMatrix),kEe(this,e.inverseViewMatrix),BEe(this,e),this._entireFrustum.x=e.frustum.near,this._entireFrustum.y=e.frustum.far,this.updateFrustum(e.frustum),this._orthographicIn3D=this._mode!==se.SCENE2D&&e.frustum instanceof sn};sC.prototype.updateFrustum=function(e){UEe(this,e.projectionMatrix),c(e.infiniteProjectionMatrix)&&OEe(this,e.infiniteProjectionMatrix),this._currentFrustum.x=e.near,this._currentFrustum.y=e.far,this._farDepthFromNearPlusOne=e.far-e.near+1,this._log2FarDepthFromNearPlusOne=w.log2(this._farDepthFromNearPlusOne),this._oneOverLog2FarDepthFromNearPlusOne=1/this._log2FarDepthFromNearPlusOne;let t=e.offCenterFrustum;c(t)&&(e=t),this._frustumPlanes.x=e.top,this._frustumPlanes.y=e.bottom,this._frustumPlanes.z=e.left,this._frustumPlanes.w=e.right};sC.prototype.updatePass=function(e){this._pass=e};var zEe=[],KEe=new Xp;sC.prototype.update=function(e){this._mode=e.mode,this._mapProjection=e.mapProjection,this._ellipsoid=e.mapProjection.ellipsoid,this._pixelRatio=e.pixelRatio;let t=e.camera;this.updateCamera(t),e.mode===se.SCENE2D?(this._frustum2DWidth=t.frustum.right-t.frustum.left,this._eyeHeight2D.x=this._frustum2DWidth*.5,this._eyeHeight2D.y=this._eyeHeight2D.x*this._eyeHeight2D.x):(this._frustum2DWidth=0,this._eyeHeight2D.x=0,this._eyeHeight2D.y=0),HEe(this,e);let n=e.light??KEe;n instanceof Xp?(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=te.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=c(s)?s.colorTexture:void 0;this._brdfLut=a,this._environmentMap=e.environmentMap??e.context.defaultCubeMap,this._sphericalHarmonicCoefficients=e.sphericalHarmonicCoefficients??zEe,this._specularEnvironmentMaps=e.specularEnvironmentMaps,this._specularEnvironmentMapsMaximumLOD=e.specularEnvironmentMapsMaximumLOD,this._fogDensity=e.fog.density,this._fogVisualDensityScalar=e.fog.visualDensityScalar,this._fogMinimumBrightness=e.fog.minimumBrightness;let l=e.atmosphere;c(l)&&(this._atmosphereHsbShift=m.fromElements(l.hueShift,l.saturationShift,l.brightnessShift,this._atmosphereHsbShift),this._atmosphereLightIntensity=l.lightIntensity,this._atmosphereRayleighCoefficient=m.clone(l.rayleighCoefficient,this._atmosphereRayleighCoefficient),this._atmosphereRayleighScaleHeight=l.rayleighScaleHeight,this._atmosphereMieCoefficient=m.clone(l.mieCoefficient,this._atmosphereMieCoefficient),this._atmosphereMieScaleHeight=l.mieScaleHeight,this._atmosphereMieAnisotropy=l.mieAnisotropy,this._atmosphereDynamicLighting=l.dynamicLighting),this._invertClassificationColor=e.invertClassificationColor,this._frameState=e,this._temeToPseudoFixed=wt.computeTemeToPseudoFixedMatrix(e.time,this._temeToPseudoFixed),this._splitPosition=e.splitPosition*e.context.drawingBufferWidth;let d=t.frustum.fov,u=this._viewport,f;c(d)?u.height>u.width?f=Math.tan(.5*d)*2/u.height:f=Math.tan(.5*d)*2/u.width:f=1/Math.max(u.width,u.height),this._geometricToleranceOverMeter=f*e.maximumScreenSpaceError,Y.clone(e.backgroundColor,this._backgroundColor),this._minimumDisableDepthTestDistance=e.minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance*=this._minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance===Number.POSITIVE_INFINITY&&(this._minimumDisableDepthTestDistance=-1)};function qte(e){if(e._viewportDirty){let t=e._viewport;M.computeOrthographicOffCenter(t.x,t.x+t.width,t.y,t.y+t.height,0,1,e._viewportOrthographicMatrix),M.computeViewportTransformation(t,0,1,e._viewportTransformation),e._viewportDirty=!1}}function JEe(e){e._inverseProjectionDirty&&(e._inverseProjectionDirty=!1,e._mode!==se.SCENE2D&&e._mode!==se.MORPHING&&!e._orthographicIn3D?M.inverse(e._projection,e._inverseProjection):M.clone(M.ZERO,e._inverseProjection))}function QEe(e){e._modelViewDirty&&(e._modelViewDirty=!1,M.multiplyTransformation(e._view,e._model,e._modelView))}function jEe(e){e._modelView3DDirty&&(e._modelView3DDirty=!1,M.multiplyTransformation(e.view3D,e._model,e._modelView3D))}function qEe(e){e._inverseModelViewDirty&&(e._inverseModelViewDirty=!1,M.inverse(e.modelView,e._inverseModelView))}function $Ee(e){e._inverseModelView3DDirty&&(e._inverseModelView3DDirty=!1,M.inverse(e.modelView3D,e._inverseModelView3D))}function eXe(e){e._viewProjectionDirty&&(e._viewProjectionDirty=!1,M.multiply(e._projection,e._view,e._viewProjection))}function tXe(e){e._inverseViewProjectionDirty&&(e._inverseViewProjectionDirty=!1,M.inverse(e.viewProjection,e._inverseViewProjection))}function nXe(e){e._modelViewProjectionDirty&&(e._modelViewProjectionDirty=!1,M.multiply(e._projection,e.modelView,e._modelViewProjection))}function iXe(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 oXe(e){e._inverseModelViewProjectionDirty&&(e._inverseModelViewProjectionDirty=!1,M.inverse(e.modelViewProjection,e._inverseModelViewProjection))}function rXe(e){e._modelViewProjectionRelativeToEyeDirty&&(e._modelViewProjectionRelativeToEyeDirty=!1,M.multiply(e._projection,e.modelViewRelativeToEye,e._modelViewProjectionRelativeToEye))}function sXe(e){e._modelViewInfiniteProjectionDirty&&(e._modelViewInfiniteProjectionDirty=!1,M.multiply(e._infiniteProjection,e.modelView,e._modelViewInfiniteProjection))}function aXe(e){if(e._normalDirty){e._normalDirty=!1;let t=e._normal;M.getMatrix3(e.inverseModelView,t),te.transpose(t,t)}}function cXe(e){if(e._normal3DDirty){e._normal3DDirty=!1;let t=e._normal3D;M.getMatrix3(e.inverseModelView3D,t),te.transpose(t,t)}}function lXe(e){if(e._inverseNormalDirty){e._inverseNormalDirty=!1;let t=e._inverseNormal;M.getMatrix3(e.modelView,t),te.transpose(t,t)}}function dXe(e){if(e._inverseNormal3DDirty){e._inverseNormal3DDirty=!1;let t=e._inverseNormal3D;M.getMatrix3(e.modelView3D,t),te.transpose(t,t)}}var $te=new m;function ene(e){e._encodedCameraPositionMCDirty&&(e._encodedCameraPositionMCDirty=!1,M.multiplyByPoint(e.inverseModel,e._cameraPosition,$te),Bn.fromCartesian($te,e._encodedCameraPositionMC))}var uXe=new m,mXe=new m,fXe=new m,hXe=new m,pXe=new pe,bXe=new m,yXe=new M;function gXe(e,t,n,i,o,r,s,a){let l=uXe;l.x=e.y,l.y=e.z,l.z=e.x;let d=mXe;d.x=n.y,d.y=n.z,d.z=n.x;let u=fXe;u.x=i.y,u.y=i.z,u.z=i.x;let f=hXe;f.x=t.y,f.y=t.z,f.z=t.x,r===se.SCENE2D&&(l.z=o*.5);let p=s.unproject(l,pXe);p.longitude=w.clamp(p.longitude,-Math.PI,Math.PI),p.latitude=w.clamp(p.latitude,-w.PI_OVER_TWO,w.PI_OVER_TWO);let y=s.ellipsoid,h=y.cartographicToCartesian(p,bXe),g=wt.eastNorthUpToFixedFrame(h,y,yXe);return M.multiplyByPointAsVector(g,d,d),M.multiplyByPointAsVector(g,u,u),M.multiplyByPointAsVector(g,f,f),c(a)||(a=new M),a[0]=d.x,a[1]=u.x,a[2]=-f.x,a[3]=0,a[4]=d.y,a[5]=u.y,a[6]=-f.y,a[7]=0,a[8]=d.z,a[9]=u.z,a[10]=-f.z,a[11]=0,a[12]=-m.dot(d,h),a[13]=-m.dot(u,h),a[14]=m.dot(f,h),a[15]=1,a}function RY(e){e._view3DDirty&&(e._mode===se.SCENE3D?M.clone(e._view,e._view3D):gXe(e._cameraPosition,e._cameraDirection,e._cameraRight,e._cameraUp,e._frustum2DWidth,e._mode,e._mapProjection,e._view3D),M.getMatrix3(e._view3D,e._viewRotation3D),e._view3DDirty=!1)}function tne(e){e._inverseView3DDirty&&(M.inverseTransformation(e.view3D,e._inverseView3D),M.getMatrix3(e._inverseView3D,e._inverseViewRotation3D),e._inverseView3DDirty=!1)}var cE=sC;function Cu(e,t){C.defined("canvas",e);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=c(n)?n(e,o):xXe(e,o,i),l=typeof WebGL2RenderingContext<"u"&&s instanceof WebGL2RenderingContext;this._canvas=e,this._originalGLContext=s,this._gl=s,this._webgl2=l,this._id=Hn(),this.validateFramebuffer=!1,this.validateShaderProgram=!1,this.logShaderCompilation=!1,this._throwOnWebGLError=!1,this._shaderCache=new oE(this),this._textureCache=new rE;let d=s;this._stencilBits=d.getParameter(d.STENCIL_BITS),mt._maximumCombinedTextureImageUnits=d.getParameter(d.MAX_COMBINED_TEXTURE_IMAGE_UNITS),mt._maximumCubeMapSize=d.getParameter(d.MAX_CUBE_MAP_TEXTURE_SIZE),mt._maximumFragmentUniformVectors=d.getParameter(d.MAX_FRAGMENT_UNIFORM_VECTORS),mt._maximumTextureImageUnits=d.getParameter(d.MAX_TEXTURE_IMAGE_UNITS),mt._maximumRenderbufferSize=d.getParameter(d.MAX_RENDERBUFFER_SIZE),mt._maximumTextureSize=d.getParameter(d.MAX_TEXTURE_SIZE),mt._maximumVaryingVectors=d.getParameter(d.MAX_VARYING_VECTORS),mt._maximumVertexAttributes=d.getParameter(d.MAX_VERTEX_ATTRIBS),mt._maximumVertexTextureImageUnits=d.getParameter(d.MAX_VERTEX_TEXTURE_IMAGE_UNITS),mt._maximumVertexUniformVectors=d.getParameter(d.MAX_VERTEX_UNIFORM_VECTORS),mt._maximumSamples=this._webgl2?d.getParameter(d.MAX_SAMPLES):0;let u=d.getParameter(d.ALIASED_LINE_WIDTH_RANGE);mt._minimumAliasedLineWidth=u[0],mt._maximumAliasedLineWidth=u[1];let f=d.getParameter(d.ALIASED_POINT_SIZE_RANGE);mt._minimumAliasedPointSize=f[0],mt._maximumAliasedPointSize=f[1];let p=d.getParameter(d.MAX_VIEWPORT_DIMS);mt._maximumViewportWidth=p[0],mt._maximumViewportHeight=p[1];let y=d.getShaderPrecisionFormat(d.FRAGMENT_SHADER,d.HIGH_FLOAT);mt._highpFloatSupported=y.precision!==0;let h=d.getShaderPrecisionFormat(d.FRAGMENT_SHADER,d.HIGH_INT);mt._highpIntSupported=h.rangeMax!==0,this._antialias=d.getContextAttributes().antialias,this._standardDerivatives=!!Cr(d,["OES_standard_derivatives"]),this._blendMinmax=!!Cr(d,["EXT_blend_minmax"]),this._elementIndexUint=!!Cr(d,["OES_element_index_uint"]),this._depthTexture=!!Cr(d,["WEBGL_depth_texture","WEBKIT_WEBGL_depth_texture"]),this._fragDepth=!!Cr(d,["EXT_frag_depth"]),this._debugShaders=Cr(d,["WEBGL_debug_shaders"]),this._textureFloat=!!Cr(d,["OES_texture_float"]),this._textureHalfFloat=!!Cr(d,["OES_texture_half_float"]),this._textureFloatLinear=!!Cr(d,["OES_texture_float_linear"]),this._textureHalfFloatLinear=!!Cr(d,["OES_texture_half_float_linear"]),this._supportsTextureLod=!!Cr(d,["EXT_shader_texture_lod"]),this._colorBufferFloat=!!Cr(d,["EXT_color_buffer_float","WEBGL_color_buffer_float"]),this._floatBlend=!!Cr(d,["EXT_float_blend"]),this._colorBufferHalfFloat=!!Cr(d,["EXT_color_buffer_half_float"]),this._s3tc=!!Cr(d,["WEBGL_compressed_texture_s3tc","MOZ_WEBGL_compressed_texture_s3tc","WEBKIT_WEBGL_compressed_texture_s3tc"]),this._pvrtc=!!Cr(d,["WEBGL_compressed_texture_pvrtc","WEBKIT_WEBGL_compressed_texture_pvrtc"]),this._astc=!!Cr(d,["WEBGL_compressed_texture_astc"]),this._etc=!!Cr(d,["WEBG_compressed_texture_etc"]),this._etc1=!!Cr(d,["WEBGL_compressed_texture_etc1"]),this._bc7=!!Cr(d,["EXT_texture_compression_bptc"]),Ll.setKTX2SupportedFormats(this._s3tc,this._pvrtc,this._astc,this._etc,this._etc1,this._bc7);let g=r?Cr(d,["EXT_texture_filter_anisotropic","WEBKIT_EXT_texture_filter_anisotropic"]):void 0;this._textureFilterAnisotropic=g,mt._maximumTextureFilterAnisotropy=c(g)?d.getParameter(g.MAX_TEXTURE_MAX_ANISOTROPY_EXT):1;let x,S,V,Z,R,E,I,v,P,F;if(l){let X=this;x=function(){return X._gl.createVertexArray()},S=function(W){X._gl.bindVertexArray(W)},V=function(W){X._gl.deleteVertexArray(W)},Z=function(W,A,k,B,O){d.drawElementsInstanced(W,A,k,B,O)},R=function(W,A,k,B){d.drawArraysInstanced(W,A,k,B)},E=function(W,A){d.vertexAttribDivisor(W,A)},I=function(W){d.drawBuffers(W)}}else v=Cr(d,["OES_vertex_array_object"]),c(v)&&(x=function(){return v.createVertexArrayOES()},S=function(X){v.bindVertexArrayOES(X)},V=function(X){v.deleteVertexArrayOES(X)}),P=Cr(d,["ANGLE_instanced_arrays"]),c(P)&&(Z=function(X,W,A,k,B){P.drawElementsInstancedANGLE(X,W,A,k,B)},R=function(X,W,A,k){P.drawArraysInstancedANGLE(X,W,A,k)},E=function(X,W){P.vertexAttribDivisorANGLE(X,W)}),F=Cr(d,["WEBGL_draw_buffers"]),c(F)&&(I=function(X){F.drawBuffersWEBGL(X)});this.glCreateVertexArray=x,this.glBindVertexArray=S,this.glDeleteVertexArray=V,this.glDrawElementsInstanced=Z,this.glDrawArraysInstanced=R,this.glVertexAttribDivisor=E,this.glDrawBuffers=I,this._vertexArrayObject=!!v,this._instancedArrays=!!P,this._drawBuffers=!!F,mt._maximumDrawBuffers=this.drawBuffers?d.getParameter(oe.MAX_DRAW_BUFFERS):1,mt._maximumColorAttachments=this.drawBuffers?d.getParameter(oe.MAX_COLOR_ATTACHMENTS):1,this._clearColor=new Y(0,0,0,0),this._clearDepth=1,this._clearStencil=0;let N=new cE,b=new sc(this),G=Oe.fromCache();this._defaultPassState=b,this._defaultRenderState=G,this._defaultTexture=void 0,this._defaultEmissiveTexture=void 0,this._defaultNormalTexture=void 0,this._defaultCubeMap=void 0,this._us=N,this._currentRenderState=G,this._currentPassState=b,this._currentFramebuffer=void 0,this._maxFrameTextureUnitIndex=0,this._vertexAttribDivisors=[],this._previousDrawInstanced=!1;for(let X=0;X"u")throw new le("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(!c(r))throw new le("The browser supports WebGL, but initialization failed.");return r}function _Xe(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 TXe(e,t,n,i){let o=`${_Xe(e,i)}: ${t.name}(`;for(let r=0;r=8}},antialias:{get:function(){return this._antialias}},msaa:{get:function(){return this._webgl2}},standardDerivatives:{get:function(){return this._standardDerivatives||this._webgl2}},floatBlend:{get:function(){return this._floatBlend}},blendMinmax:{get:function(){return this._blendMinmax||this._webgl2}},elementIndexUint:{get:function(){return this._elementIndexUint||this._webgl2}},depthTexture:{get:function(){return this._depthTexture||this._webgl2}},floatingPointTexture:{get:function(){return this._webgl2||this._textureFloat}},halfFloatingPointTexture:{get:function(){return this._webgl2||this._textureHalfFloat}},textureFloatLinear:{get:function(){return this._textureFloatLinear}},textureHalfFloatLinear:{get:function(){return this._webgl2&&this._textureFloatLinear||!this._webgl2&&this._textureHalfFloatLinear}},supportsTextureLod:{get:function(){return this._webgl2||this._supportsTextureLod}},textureFilterAnisotropic:{get:function(){return!!this._textureFilterAnisotropic}},s3tc:{get:function(){return this._s3tc}},pvrtc:{get:function(){return this._pvrtc}},astc:{get:function(){return this._astc}},etc:{get:function(){return this._etc}},etc1:{get:function(){return this._etc1}},bc7:{get:function(){return this._bc7}},supportsBasis:{get:function(){return this._s3tc||this._pvrtc||this._astc||this._etc||this._etc1||this._bc7}},vertexArrayObject:{get:function(){return this._vertexArrayObject||this._webgl2}},fragmentDepth:{get:function(){return this._fragDepth||this._webgl2}},instancedArrays:{get:function(){return this._instancedArrays||this._webgl2}},colorBufferFloat:{get:function(){return this._colorBufferFloat}},colorBufferHalfFloat:{get:function(){return this._webgl2&&this._colorBufferFloat||!this._webgl2&&this._colorBufferHalfFloat}},drawBuffers:{get:function(){return this._drawBuffers||this._webgl2}},debugShaders:{get:function(){return this._debugShaders}},throwOnWebGLError:{get:function(){return this._throwOnWebGLError},set:function(e){this._throwOnWebGLError=e,this._gl=VXe(this._originalGLContext,e?SXe:void 0)}},defaultTexture:{get:function(){return this._defaultTexture===void 0&&(this._defaultTexture=new Pt({context:this,source:{width:1,height:1,arrayBufferView:new Uint8Array([255,255,255,0])},flipY:!1})),this._defaultTexture}},defaultEmissiveTexture:{get:function(){return this._defaultEmissiveTexture===void 0&&(this._defaultEmissiveTexture=new Pt({context:this,pixelFormat:ke.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 Pt({context:this,pixelFormat:ke.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 Uo({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 LXe}}});function ZXe(e){if(e.validateFramebuffer){let t=e._gl,n=t.checkFramebufferStatus(t.FRAMEBUFFER);if(n!==t.FRAMEBUFFER_COMPLETE){let i;switch(n){case t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:i="Framebuffer is not complete. Incomplete attachment: at least one attachment point with a renderbuffer or texture attached has its attached object no longer in existence or has an attached image with a width or height of zero, or the color attachment point has a non-color-renderable image attached, or the depth attachment point has a non-depth-renderable image attached, or the stencil attachment point has a non-stencil-renderable image attached. Color-renderable formats include GL_RGBA4, GL_RGB5_A1, and GL_RGB565. GL_DEPTH_COMPONENT16 is the only depth-renderable format. GL_STENCIL_INDEX8 is the only stencil-renderable format.";break;case t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:i="Framebuffer is not complete. Incomplete dimensions: not all attached images have the same width and height.";break;case t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:i="Framebuffer is not complete. Missing attachment: no images are attached to the framebuffer.";break;case t.FRAMEBUFFER_UNSUPPORTED:i="Framebuffer is not complete. Unsupported: the combination of internal formats of the attached images violates an implementation-dependent set of restrictions.";break}throw new L(i)}}}function nne(e,t,n,i){let o=e._currentRenderState,r=e._currentPassState;e._currentRenderState=t,e._currentPassState=n,Oe.partialApply(e._gl,o,t,r,n,i)}var GY;typeof WebGLRenderingContext<"u"&&(GY=[oe.BACK]);function EY(e,t){if(t!==e._currentFramebuffer){e._currentFramebuffer=t;let n=GY;if(c(t))t._bind(),ZXe(e),n=t._getActiveColorAttachments();else{let i=e._gl;i.bindFramebuffer(i.FRAMEBUFFER,null)}e.drawBuffers&&e.glDrawBuffers(n)}}var RXe=new ti;Cu.prototype.clear=function(e,t){e=e??RXe,t=t??this._defaultPassState;let n=this._gl,i=0,o=e.color,r=e.depth,s=e.stencil;c(o)&&(Y.equals(this._clearColor,o)||(Y.clone(o,this._clearColor),n.clearColor(o.red,o.green,o.blue,o.alpha)),i|=n.COLOR_BUFFER_BIT),c(r)&&(r!==this._clearDepth&&(this._clearDepth=r,n.clearDepth(r)),i|=n.DEPTH_BUFFER_BIT),c(s)&&(s!==this._clearStencil&&(this._clearStencil=s,n.clearStencil(s)),i|=n.STENCIL_BUFFER_BIT);let a=e.renderState??this._defaultRenderState;nne(this,a,t,!0);let l=e.framebuffer??t.framebuffer;EY(this,l),n.clear(i)};function GXe(e,t,n,i,o){if(c(t)&&o.depthTest&&o.depthTest.enabled&&!t.hasDepthAttachment)throw new L("The depth test can not be enabled (drawCommand.renderState.depthTest.enabled) because the framebuffer (drawCommand.framebuffer) does not have a depth or depth-stencil renderbuffer.");EY(e,t),nne(e,o,n,!1),i._bind(),e._maxFrameTextureUnitIndex=Math.max(e._maxFrameTextureUnitIndex,i.maximumTextureUnitIndex)}function EXe(e,t,n,i){let o=t._primitiveType,r=t._vertexArray,s=t._offset,a=t._count,l=t.instanceCount;if(!ve.validate(o))throw new L("drawCommand.primitiveType is required and must be valid.");if(C.defined("drawCommand.vertexArray",r),C.typeOf.number.greaterThanOrEquals("drawCommand.offset",s,0),c(a)&&C.typeOf.number.greaterThanOrEquals("drawCommand.count",a,0),C.typeOf.number.greaterThanOrEquals("drawCommand.instanceCount",l,0),l>0&&!e.instancedArrays)throw new L("Instanced arrays extension is not supported");e._us.model=t._modelMatrix??M.IDENTITY,n._setUniforms(i,e._us,e.validateShaderProgram),r._bind();let d=r.indexBuffer;c(d)?(s=s*d.bytesPerIndex,c(a)?a=Math.min(a,d.numberOfIndices):a=d.numberOfIndices,l===0?e._gl.drawElements(o,a,d.indexDatatype,s):e.glDrawElementsInstanced(o,a,d.indexDatatype,s,l)):(c(a)?a=Math.min(a,r.numberOfVertices):a=r.numberOfVertices,l===0?e._gl.drawArrays(o,s,a):e.glDrawArraysInstanced(o,s,a,l)),r._unBind()}Cu.prototype.draw=function(e,t,n,i){C.defined("drawCommand",e),C.defined("drawCommand.shaderProgram",e._shaderProgram),t=t??this._defaultPassState;let o=e._framebuffer??t.framebuffer,r=e._renderState??this._defaultRenderState;n=n??e._shaderProgram,i=i??e._uniformMap,GXe(this,o,t,n,r),EXe(this,e,n,i)};Cu.prototype.endFrame=function(){let e=this._gl;e.useProgram(null),this._currentFramebuffer=void 0,e.bindFramebuffer(e.FRAMEBUFFER,null);let t=GY;this.drawBuffers&&this.glDrawBuffers(t);let n=this._maxFrameTextureUnitIndex;this._maxFrameTextureUnitIndex=0;for(let i=0;i0&&(a=s.getColorTexture(0).pixelDatatype);let l=ke.createTypedArray(ke.RGBA,a,o,r);return EY(this,s),t.readPixels(n,i,o,r,ke.RGBA,Ue.toWebGLConstant(a,this),l),l};var ine={position:0,textureCoordinates:1};Cu.prototype.getViewportQuadVertexArray=function(){let e=this.cache.viewportQuad_vertexArray;if(!c(e)){let t=new dt({attributes:{position:new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:2,values:[-1,-1,1,-1,1,1,-1,1]}),textureCoordinates:new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:2,values:[0,0,1,0,1,1,0,1]})},indices:new Uint16Array([0,1,2,0,2,3]),primitiveType:ve.TRIANGLES});e=ni.fromGeometry({context:this,geometry:t,attributeLocations:ine,bufferUsage:Ne.STATIC_DRAW,interleave:!0}),this.cache.viewportQuad_vertexArray=e}return e};Cu.prototype.createViewportQuadCommand=function(e,t){return t=t??z.EMPTY_OBJECT,new et({vertexArray:this.getViewportQuadVertexArray(),primitiveType:ve.TRIANGLES,renderState:t.renderState,shaderProgram:tn.fromCache({context:this,vertexShaderSource:fx,fragmentShaderSource:e,attributeLocations:ine}),uniformMap:t.uniformMap,owner:t.owner,framebuffer:t.framebuffer,pass:t.pass})};Cu.prototype.getObjectByPickColor=function(e){return C.defined("pickColor",e),this._pickObjects[e.toRgba()]};function XY(e,t,n){this._pickObjects=e,this.key=t,this.color=n}Object.defineProperties(XY.prototype,{object:{get:function(){return this._pickObjects[this.key]},set:function(e){this._pickObjects[this.key]=e}}});XY.prototype.destroy=function(){delete this._pickObjects[this.key]};Cu.prototype.createPickId=function(e){C.defined("object",e),++this._nextPickColor[0];let t=this._nextPickColor[0];if(t===0)throw new le("Out of unique Pick IDs.");return this._pickObjects[t]=e,new XY(this._pickObjects,t,Y.fromRgba(t))};Cu.prototype.isDestroyed=function(){return!1};Cu.prototype.destroy=function(){let e=this.cache;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];c(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(),he(this)};var lE=Cu;var hYt=_(T(),1);var D3t=_(T(),1);function aC(e){e=e??z.EMPTY_OBJECT;let{context:t,width:n,height:i,colorRenderbuffers:o,colorTextures:r,depthStencilRenderbuffer:s,depthStencilTexture:a,destroyAttachments:l}=e;if(C.defined("options.context",t),C.defined("options.width",n),C.defined("options.height",i),this._width=n,this._height=i,c(o)!==c(r))throw new L("Both color renderbuffer and texture attachments must be provided.");if(c(s)!==c(a))throw new L("Both depth-stencil renderbuffer and texture attachments must be provided.");this._renderFramebuffer=new Fr({context:t,colorRenderbuffers:o,depthStencilRenderbuffer:s,destroyAttachments:l}),this._colorFramebuffer=new Fr({context:t,colorTextures:r,depthStencilTexture:a,destroyAttachments:l})}aC.prototype.getRenderFramebuffer=function(){return this._renderFramebuffer};aC.prototype.getColorFramebuffer=function(){return this._colorFramebuffer};aC.prototype.blitFramebuffers=function(e,t){this._renderFramebuffer.bindRead(),this._colorFramebuffer.bindDraw();let n=e._gl,i=0;this._colorFramebuffer._colorTextures.length>0&&(i|=n.COLOR_BUFFER_BIT),c(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)};aC.prototype.isDestroyed=function(){return!1};aC.prototype.destroy=function(){return this._renderFramebuffer.destroy(),this._colorFramebuffer.destroy(),he(this)};var dE=aC;var tYt=_(T(),1);var H3t=_(T(),1);var Rl={RGBA4:oe.RGBA4,RGBA8:oe.RGBA8,RGBA16F:oe.RGBA16F,RGBA32F:oe.RGBA32F,RGB5_A1:oe.RGB5_A1,RGB565:oe.RGB565,DEPTH_COMPONENT16:oe.DEPTH_COMPONENT16,STENCIL_INDEX8:oe.STENCIL_INDEX8,DEPTH_STENCIL:oe.DEPTH_STENCIL,DEPTH24_STENCIL8:oe.DEPTH24_STENCIL8,validate:function(e){return e===Rl.RGBA4||e===Rl.RGBA8||e===Rl.RGBA16F||e===Rl.RGBA32F||e===Rl.RGB5_A1||e===Rl.RGB565||e===Rl.DEPTH_COMPONENT16||e===Rl.STENCIL_INDEX8||e===Rl.DEPTH_STENCIL||e===Rl.DEPTH24_STENCIL8},getColorFormat:function(e){return e===oe.FLOAT?Rl.RGBA32F:e===oe.HALF_FLOAT_OES?Rl.RGBA16F:Rl.RGBA8}},ac=Object.freeze(Rl);function uE(e){e=e??z.EMPTY_OBJECT,C.defined("options.context",e.context);let n=e.context._gl,i=mt.maximumRenderbufferSize,o=e.format??ac.RGBA4,r=c(e.width)?e.width:n.drawingBufferWidth,s=c(e.height)?e.height:n.drawingBufferHeight,a=e.numSamples??1;if(!ac.validate(o))throw new L("Invalid format.");if(C.typeOf.number.greaterThan("width",r,0),r>i)throw new L(`Width must be less than or equal to the maximum renderbuffer size (${i}). Check maximumRenderbufferSize.`);if(C.typeOf.number.greaterThan("height",s,0),s>i)throw new L(`Height must be less than or equal to the maximum renderbuffer size (${i}). Check maximumRenderbufferSize.`);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(uE.prototype,{format:{get:function(){return this._format}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});uE.prototype._getRenderbuffer=function(){return this._renderbuffer};uE.prototype.isDestroyed=function(){return!1};uE.prototype.destroy=function(){return this._gl.deleteRenderbuffer(this._renderbuffer),he(this)};var md=uE;function Ss(e){if(e=e??z.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._color&&!this._depth&&!this._depthStencil)throw new L("Must enable at least one type of framebuffer attachment.");if(this._depth&&this._depthStencil)throw new L("Cannot have both a depth and depth-stencil attachment.");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(Ss.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}}});Ss.prototype.isDirty=function(e,t,n,i,o){n=n??1;let r=this._width!==e||this._height!==t,s=this._numSamples!==n,a=c(i)&&this._pixelDatatype!==i||c(o)&&this._pixelFormat!==o,l=n===1?c(this._framebuffer):c(this._multisampleFramebuffer);return this._attachmentsDirty||r||s||a||!l||this._color&&!c(this._colorTextures[0])};Ss.prototype.update=function(e,t,n,i,o,r){if(!c(t)||!c(n))throw new L("width and height must be defined.");if(i=e.msaa?i??1:1,o=o??(this._color?this._pixelDatatype??Ue.UNSIGNED_BYTE:void 0),r=r??(this._color?this._pixelFormat??ke.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=ac.getColorFormat(o);this._colorRenderbuffers[s]=new md({context:e,width:t,height:n,format:a,numSamples:this._numSamples})}}this._depthStencil&&this._createDepthAttachments&&(this._supportsDepthTexture&&e.depthTexture?(this._depthStencilTexture=new Pt({context:e,width:t,height:n,pixelFormat:ke.DEPTH_STENCIL,pixelDatatype:Ue.UNSIGNED_INT_24_8,sampler:en.NEAREST}),this._numSamples>1&&(this._depthStencilRenderbuffer=new md({context:e,width:t,height:n,format:ac.DEPTH24_STENCIL8,numSamples:this._numSamples}))):this._depthStencilRenderbuffer=new md({context:e,width:t,height:n,format:ac.DEPTH_STENCIL})),this._depth&&this._createDepthAttachments&&(this._supportsDepthTexture&&e.depthTexture?this._depthTexture=new Pt({context:e,width:t,height:n,pixelFormat:ke.DEPTH_COMPONENT,pixelDatatype:Ue.UNSIGNED_INT,sampler:en.NEAREST}):this._depthRenderbuffer=new md({context:e,width:t,height:n,format:ac.DEPTH_COMPONENT16})),this._numSamples>1?this._multisampleFramebuffer=new dE({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 Fr({context:e,colorTextures:this._colorTextures,depthTexture:this._depthTexture,depthRenderbuffer:this._depthRenderbuffer,depthStencilTexture:this._depthStencilTexture,depthStencilRenderbuffer:this._depthStencilRenderbuffer,destroyAttachments:!1})}};Ss.prototype.getColorTexture=function(e){if(e=e??0,e>=this._colorAttachmentsLength)throw new L("index must be smaller than total number of color attachments.");return this._colorTextures[e]};Ss.prototype.setColorTexture=function(e,t){if(t=t??0,this._createColorAttachments)throw new L("createColorAttachments must be false if setColorTexture is called.");if(t>=this._colorAttachmentsLength)throw new L("index must be smaller than total number of color attachments.");this._attachmentsDirty=e!==this._colorTextures[t],this._colorTextures[t]=e};Ss.prototype.getColorRenderbuffer=function(e){if(e=e??0,e>=this._colorAttachmentsLength)throw new L("index must be smaller than total number of color attachments.");return this._colorRenderbuffers[e]};Ss.prototype.setColorRenderbuffer=function(e,t){if(t=t??0,this._createColorAttachments)throw new L("createColorAttachments must be false if setColorRenderbuffer is called.");if(t>=this._colorAttachmentsLength)throw new L("index must be smaller than total number of color attachments.");this._attachmentsDirty=e!==this._colorRenderbuffers[t],this._colorRenderbuffers[t]=e};Ss.prototype.getDepthRenderbuffer=function(){return this._depthRenderbuffer};Ss.prototype.setDepthRenderbuffer=function(e){if(this._createDepthAttachments)throw new L("createDepthAttachments must be false if setDepthRenderbuffer is called.");this._attachmentsDirty=e!==this._depthRenderbuffer,this._depthRenderbuffer=e};Ss.prototype.getDepthTexture=function(){return this._depthTexture};Ss.prototype.setDepthTexture=function(e){if(this._createDepthAttachments)throw new L("createDepthAttachments must be false if setDepthTexture is called.");this._attachmentsDirty=e!==this._depthTexture,this._depthTexture=e};Ss.prototype.getDepthStencilRenderbuffer=function(){return this._depthStencilRenderbuffer};Ss.prototype.setDepthStencilRenderbuffer=function(e){if(this._createDepthAttachments)throw new L("createDepthAttachments must be false if setDepthStencilRenderbuffer is called.");this._attachmentsDirty=e!==this._depthStencilRenderbuffer,this._depthStencilRenderbuffer=e};Ss.prototype.getDepthStencilTexture=function(){return this._depthStencilTexture};Ss.prototype.setDepthStencilTexture=function(e){if(this._createDepthAttachments)throw new L("createDepthAttachments must be false if setDepthStencilTexture is called.");this._attachmentsDirty=e!==this._depthStencilTexture,this._depthStencilTexture=e};Ss.prototype.prepareTextures=function(e,t){this._numSamples>1&&this._multisampleFramebuffer.blitFramebuffers(e,t)};Ss.prototype.clear=function(e,t,n){let i=t.framebuffer;t.framebuffer=this.framebuffer,t.execute(e,n),t.framebuffer=i};Ss.prototype.destroyFramebuffer=function(){this._framebuffer=this._framebuffer&&this._framebuffer.destroy(),this._multisampleFramebuffer=this._multisampleFramebuffer&&this._multisampleFramebuffer.destroy()};Ss.prototype.destroy=function(){if(this._color){let e=this._colorTextures,t=this._colorRenderbuffers;for(let n=0;n!c(t[r])))throw new L("urls must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.");let i={flipY:!0,skipColorSpaceConversion:n,preferImageBitmap:!0},o=[Ge.createIfNeeded(t.positiveX).fetchImage(i),Ge.createIfNeeded(t.negativeX).fetchImage(i),Ge.createIfNeeded(t.positiveY).fetchImage(i),Ge.createIfNeeded(t.negativeY).fetchImage(i),Ge.createIfNeeded(t.positiveZ).fetchImage(i),Ge.createIfNeeded(t.negativeZ).fetchImage(i)];return Promise.all(o).then(function(r){return new Uo({context:e,source:{positiveX:r[0],negativeX:r[1],positiveY:r[2],negativeY:r[3],positiveZ:r[4],negativeZ:r[5]}})})}var mE=XXe;var kYt=_(T(),1);var VYt=_(T(),1);var Vx={VERTEX:0,FRAGMENT:1,BOTH:2};Vx.includesVertexShader=function(e){return C.typeOf.number("destination",e),e===Vx.VERTEX||e===Vx.BOTH};Vx.includesFragmentShader=function(e){return C.typeOf.number("destination",e),e===Vx.FRAGMENT||e===Vx.BOTH};var xe=Object.freeze(Vx);var ZYt=_(T(),1);function IY(e){this.name=e,this.fields=[]}IY.prototype.addField=function(e,t){let n=` ${e} ${t};`;this.fields.push(n)};IY.prototype.generateGlslLines=function(){let e=this.fields;return e.length===0&&(e=[" float _empty;"]),[].concat(`struct ${this.name}`,"{",e,"};")};var fE=IY;var EYt=_(T(),1);function WY(e){this.signature=e,this.body=[]}WY.prototype.addLines=function(e){if(typeof e!="string"&&!Array.isArray(e))throw new L(`Expected lines to be a string or an array of strings, actual value was ${e}`);let t=this.body;if(Array.isArray(e)){let n=e.length;for(let i=0;ia?(e.childNode1=new pE({x:i.x,y:i.y,width:t,height:r}),e.childNode2=new pE({x:i.x+t,y:i.y,width:s,height:r}),this._findNode(e.childNode1,{width:t,height:n})):(e.childNode1=new pE({x:i.x,y:i.y,width:o,height:n}),e.childNode2=new pE({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 cC=wY;var one=16;function Gl(e){e=e??z.EMPTY_OBJECT;let t=e.borderWidthInPixels??1,n=e.initialSize??new D(one,one);C.typeOf.number.greaterThanOrEquals("options.borderWidthInPixels",t,0),C.typeOf.number.greaterThan("options.initialSize.x",n.x,0),C.typeOf.number.greaterThan("options.initialSize.y",n.y,0),this._pixelFormat=e.pixelFormat??ke.RGBA,this._sampler=e.sampler,this._borderWidthInPixels=t,this._initialSize=n,this._texturePacker=void 0,this._rectangles=[],this._subRegions=new Map,this._guid=Hn(),this._imagesToAddQueue=[],this._indexById=new Map,this._indexPromiseById=new Map,this._nextIndex=0}Object.defineProperties(Gl.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 c(this._texture)?this._texture.sizeInBytes:0}}});Gl.prototype.computeTextureCoordinates=function(e,t){C.typeOf.number.greaterThanOrEquals("index",e,0);let n=this._texture,i=this._rectangles[e];if(c(t)||(t=new je),!c(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,l=i.x,d=i.y,u=this._subRegions.get(e);if(c(u)){let f=this._rectangles[u];l+=f.x,d+=f.y}return t.x=l/o,t.y=d/r,t.width=s/o,t.height=a/r,t};Gl.prototype._copyFromTexture=function(e,t,n,i){let o=this._pixelFormat,r=this._sampler,s=new Pt({context:e,height:n,width:t,pixelFormat:o,sampler:r}),a=e._gl,l=s._textureTarget,d=this._texture,u=new Fr({context:e,colorTextures:[d],destroyAttachments:!1});a.activeTexture(a.TEXTURE0),a.bindTexture(l,s._texture),u._bind();let f=this.rectangles,p=this._subRegions;for(let y=0;ynew rne({index:Z,image:V})).filter((V,Z)=>c(V.image)&&!c(l.get(Z))),u=0,f=0,p=0;for(let V=t;V=1;)h*=2,s>a?a*=h:s*=h;d.sort(({image:V},{image:Z})=>Z.height*Z.width-V.height*V.width);let g=new Array(this._nextIndex);for(let V of this._subRegions.keys())c(l.get(V))&&(g[V]=i[V]);let x,S=!1;for(;!S;){x=new cC({height:a,width:s,borderPadding:n});let V;for(V=0;Va?a*=2:s*=2;break}g[Z]=E.rectangle}S=V===d.length}this._texturePacker=x,this._texture=this._copyFromTexture(e,s,a,g),r.destroy(),this._rectangles=g,this._guid=Hn()};Gl.prototype.getImageIndex=function(e){return C.typeOf.string("id",e),this._indexById.get(e)};Gl.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}),c(n)&&n(e)}catch(s){if(c(i)){i(s);return}}};function rne({index:e,image:t,resolve:n,reject:i}){this.index=e,this.image=t,this.resolve=n,this.reject=i,this.rectangle=void 0}Gl.prototype._addImage=function(e,t){return C.typeOf.number.greaterThanOrEquals("index",e,0),C.defined("image",t),new Promise((n,i)=>{this._imagesToAddQueue.push(new rne({index:e,image:t,resolve:n,reject:i})),this._imagesToAddQueue.sort(({image:o},{image:r})=>r.height*r.width-o.height*o.width)})};Gl.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=await PXe(t,e),C.defined("image",t),this.isDestroyed()||!c(t)?-1:this._addImage(i,t)))(),this._indexPromiseById.set(e,n),n};Gl.prototype.addImageSubRegion=function(e,t){C.typeOf.string("id",e),C.defined("subRegion",t);let n=this._indexById.get(e);if(!c(n))throw new le(`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(l=>l===-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 C.typeOf.number.lessThanOrEquals("subRegion.x",t.x,s.width),C.typeOf.number.lessThanOrEquals("subRegion.x + subRegion.width",t.x+t.width,s.width),C.typeOf.number.lessThanOrEquals("subRegion.y",t.y,s.height),C.typeOf.number.lessThanOrEquals("subRegion.y + subRegion.height",t.y+t.height,s.height),o})};Gl.prototype.isDestroyed=function(){return!1};Gl.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),this._imagesToAddQueue.forEach(({resolve:e})=>{c(e)&&e(-1)}),he(this)};var Zx=Gl;var gHt=_(T(),1);function Ns(e,t,n,i){if(C.defined("context",e),!t||t.length===0)throw new L("At least one attribute is required.");let o=Ns._verifyAttributes(t);n=n??0;let r=[],s={},a,l,d=o.length;for(let f=0;f0?q.getSizeInBytes(e[0].componentDatatype):0,o=i>0?t%i:0,r=o===0?0:i-o;return t+=r,t};Ns._createArrayViews=function(e,t){let n=[],i=0,o=e.length;for(let r=0;r0){let n=new ArrayBuffer(t*e.vertexSizeInBytes);if(c(e.arrayBuffer)){let r=new Uint8Array(n),s=new Uint8Array(e.arrayBuffer),a=s.length;for(let l=0;l0){t.needsCommit=!1;let n=t.vertexBuffer,i=e._size*t.vertexSizeInBytes,o=c(n);if(!o||n.sizeInBytes=this._size)throw new L("offsetInVertices must be greater than or equal to zero and less than the vertex array size.");if(e+t>this._size)throw new L("offsetInVertices + lengthInVertices cannot exceed the vertex array size.");let n=this._allBuffers;for(let i=0,o=n.length;i0){let i=e.vertexSizeInBytes*t,o=e.vertexSizeInBytes*n;e.vertexBuffer.copyFromArrayView(new Uint8Array(e.arrayBuffer,i,o),i)}}Ns.prototype.endSubCommits=function(){let e=this._allBuffers;for(let t=0,n=e.length;t0&&(this._hash={},e.length=0)};var Zt=Rx;var UHt=_(T(),1);function fd(e,t){e=e??0,this._near=e,t=t??Number.MAX_VALUE,this._far=t}Object.defineProperties(fd.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}}});fd.packedLength=2;fd.pack=function(e,t,n){if(!c(e))throw new L("value is required");if(!c(t))throw new L("array is required");return n=n??0,t[n++]=e.near,t[n]=e.far,t};fd.unpack=function(e,t,n){if(!c(e))throw new L("array is required");return t=t??0,c(n)||(n=new fd),n.near=e[t++],n.far=e[t],n};fd.equals=function(e,t){return e===t||c(e)&&c(t)&&e.near===t.near&&e.far===t.far};fd.clone=function(e,t){if(c(e))return c(t)||(t=new fd),t.near=e.near,t.far=e.far,t};fd.prototype.clone=function(e){return fd.clone(this,e)};fd.prototype.equals=function(e){return fd.equals(this,e)};var vt=fd;var YHt=_(T(),1);function Vu(e,t,n,i){this.near=e??0,this.nearValue=t??0,this.far=n??1,this.farValue=i??0}Vu.clone=function(e,t){if(c(e))return c(t)?(t.near=e.near,t.nearValue=e.nearValue,t.far=e.far,t.farValue=e.farValue,t):new Vu(e.near,e.nearValue,e.far,e.farValue)};Vu.packedLength=4;Vu.pack=function(e,t,n){if(!c(e))throw new L("value is required");if(!c(t))throw new L("array is required");return n=n??0,t[n++]=e.near,t[n++]=e.nearValue,t[n++]=e.far,t[n]=e.farValue,t};Vu.unpack=function(e,t,n){if(!c(e))throw new L("array is required");return t=t??0,c(n)||(n=new Vu),n.near=e[t++],n.nearValue=e[t++],n.far=e[t++],n.farValue=e[t],n};Vu.equals=function(e,t){return e===t||c(e)&&c(t)&&e.near===t.near&&e.nearValue===t.nearValue&&e.far===t.far&&e.farValue===t.farValue};Vu.prototype.clone=function(e){return Vu.clone(this,e)};Vu.prototype.equals=function(e){return Vu.equals(this,e)};var Nt=Vu;var zHt=_(T(),1),Gx={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,CLIP_TO_GROUND:7},ze=Object.freeze(Gx);function Lu(e){return e===Gx.CLAMP_TO_GROUND||e===Gx.CLAMP_TO_3D_TILE||e===Gx.CLAMP_TO_TERRAIN}function lC(e){return e===Gx.RELATIVE_TO_GROUND||e===Gx.RELATIVE_TO_3D_TILE||e===Gx.RELATIVE_TO_TERRAIN}var JHt=_(T(),1),UXe={CENTER:0,LEFT:1,RIGHT:-1},xi=Object.freeze(UXe);var jHt=_(T(),1),OXe={CENTER:0,BOTTOM:1,BASELINE:2,TOP:-1},Mn=Object.freeze(OXe);var $Ht=_(T(),1),DXe=Object.freeze({DONE:0,PENDING:1,FAILED:2}),ut=DXe;var izt=_(T(),1);function vm(){L.throwInstantiationError()}Object.defineProperties(vm.prototype,{isConstant:{get:L.throwInstantiationError},definitionChanged:{get:L.throwInstantiationError}});vm.prototype.getValue=L.throwInstantiationError;vm.prototype.equals=L.throwInstantiationError;vm.equals=function(e,t){return e===t||c(e)&&e.equals(t)};vm.arrayEquals=function(e,t){if(e===t)return!0;if(!c(e)||!c(t)||e.length!==t.length)return!1;let n=e.length;for(let i=0;i-1;o--)r=t[o],c(r._billboard)&&c(r._position)&&s.set(r.id,new sne(r));for(o=i.length-1;o>-1;o--)r=i[o],c(r._billboard)&&c(r._position)?s.contains(r.id)||s.set(r.id,new sne(r)):(vY(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],vY(s.get(r.id),r,a),s.remove(r.id)};function vY(e,t,n){c(e)&&(e.billboard=void 0,n.removeBillboard(t))}var yE=z0;var $rn=_(T(),1);var Azt=_(T(),1);var uIe=new m;function mh(e){e=e??z.EMPTY_OBJECT;let t=e.minimum,n=e.maximum;if(C.typeOf.object("min",t),C.typeOf.object("max",n),c(e.offsetAttribute)&&e.offsetAttribute===$t.TOP)throw new L("GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.");this._min=m.clone(t),this._max=m.clone(n),this._offsetAttribute=e.offsetAttribute,this._workerName="createBoxOutlineGeometry"}mh.fromDimensions=function(e){e=e??z.EMPTY_OBJECT;let t=e.dimensions;C.typeOf.object("dimensions",t),C.typeOf.number.greaterThanOrEquals("dimensions.x",t.x,0),C.typeOf.number.greaterThanOrEquals("dimensions.y",t.y,0),C.typeOf.number.greaterThanOrEquals("dimensions.z",t.z,0);let n=m.multiplyByScalar(t,.5,new m);return new mh({minimum:m.negate(n,new m),maximum:n,offsetAttribute:e.offsetAttribute})};mh.fromAxisAlignedBoundingBox=function(e){return C.typeOf.object("boundindBox",e),new mh({minimum:e.minimum,maximum:e.maximum})};mh.packedLength=2*m.packedLength+1;mh.pack=function(e,t,n){return C.typeOf.object("value",e),C.defined("array",t),n=n??0,m.pack(e._min,t,n),m.pack(e._max,t,n+m.packedLength),t[n+m.packedLength*2]=e._offsetAttribute??-1,t};var cne=new m,lne=new m,ane={minimum:cne,maximum:lne,offsetAttribute:void 0};mh.unpack=function(e,t,n){C.defined("array",e),t=t??0;let i=m.unpack(e,t,cne),o=m.unpack(e,t+m.packedLength,lne),r=e[t+m.packedLength*2];return c(n)?(n._min=m.clone(i,n._min),n._max=m.clone(o,n._max),n._offsetAttribute=r===-1?void 0:r,n):(ane.offsetAttribute=r===-1?void 0:r,new mh(ane))};mh.createGeometry=function(e){let t=e._min,n=e._max;if(m.equals(t,n))return;let i=new fn,o=new Uint16Array(12*2),r=new Float64Array(8*3);r[0]=t.x,r[1]=t.y,r[2]=t.z,r[3]=n.x,r[4]=t.y,r[5]=t.z,r[6]=n.x,r[7]=n.y,r[8]=t.z,r[9]=t.x,r[10]=n.y,r[11]=t.z,r[12]=t.x,r[13]=t.y,r[14]=n.z,r[15]=n.x,r[16]=t.y,r[17]=n.z,r[18]=n.x,r[19]=n.y,r[20]=n.z,r[21]=t.x,r[22]=n.y,r[23]=n.z,i.position=new Ee({componentDatatype:q.DOUBLE,componentsPerAttribute:3,values:r}),o[0]=4,o[1]=5,o[2]=5,o[3]=6,o[4]=6,o[5]=7,o[6]=7,o[7]=4,o[8]=0,o[9]=1,o[10]=1,o[11]=2,o[12]=2,o[13]=3,o[14]=3,o[15]=0,o[16]=0,o[17]=4,o[18]=1,o[19]=5,o[20]=2,o[21]=6,o[22]=3,o[23]=7;let s=m.subtract(n,t,uIe),a=m.magnitude(s)*.5;if(c(e._offsetAttribute)){let l=r.length,d=e._offsetAttribute===$t.NONE?0:1,u=new Uint8Array(l/3).fill(d);i.applyOffset=new Ee({componentDatatype:q.UNSIGNED_BYTE,componentsPerAttribute:1,values:u})}return new dt({attributes:i,indices:o,primitiveType:ve.LINES,boundingSphere:new ue(m.ZERO,a),offsetAttribute:e._offsetAttribute})};var Fm=mh;var Dzt=_(T(),1);function dC(e,t,n,i){e=e??1,t=t??1,n=n??1,i=i??1,this.value=new Uint8Array([Y.floatToByte(e),Y.floatToByte(t),Y.floatToByte(n),Y.floatToByte(i)])}Object.defineProperties(dC.prototype,{componentDatatype:{get:function(){return q.UNSIGNED_BYTE}},componentsPerAttribute:{get:function(){return 4}},normalize:{get:function(){return!0}}});dC.fromColor=function(e){if(!c(e))throw new L("color is required.");return new dC(e.red,e.green,e.blue,e.alpha)};dC.toValue=function(e,t){if(!c(e))throw new L("color is required.");return c(t)?e.toBytes(t):new Uint8Array(e.toBytes())};dC.equals=function(e,t){return e===t||c(e)&&c(t)&&e.value[0]===t.value[0]&&e.value[1]===t.value[1]&&e.value[2]===t.value[2]&&e.value[3]===t.value[3]};var Yt=dC;var Kzt=_(T(),1);function gE(e,t){if(e=e??0,t=t??Number.MAX_VALUE,t<=e)throw new L("far distance must be greater than near distance.");this.value=new Float32Array([e,t])}Object.defineProperties(gE.prototype,{componentDatatype:{get:function(){return q.FLOAT}},componentsPerAttribute:{get:function(){return 2}},normalize:{get:function(){return!1}}});gE.fromDistanceDisplayCondition=function(e){if(!c(e))throw new L("distanceDisplayCondition is required.");if(e.far<=e.near)throw new L("distanceDisplayCondition.far distance must be greater than distanceDisplayCondition.near distance.");return new gE(e.near,e.far)};gE.toValue=function(e,t){if(!c(e))throw new L("distanceDisplayCondition is required.");return c(t)?(t[0]=e.near,t[1]=e.far,t):new Float32Array([e.near,e.far])};var kn=gE;var eKt=_(T(),1);function mIe(e){if(e=e??z.EMPTY_OBJECT,!c(e.geometry))throw new L("options.geometry is required.");this.geometry=e.geometry,this.modelMatrix=M.clone(e.modelMatrix??M.IDENTITY),this.id=e.id,this.pickPrimitive=e.pickPrimitive,this.attributes=e.attributes??{},this.westHemisphereGeometry=void 0,this.eastHemisphereGeometry=void 0}var Rt=mIe;var uKt=_(T(),1);var aKt=_(T(),1);function jo(e){e=e??z.EMPTY_OBJECT,this.start=c(e.start)?ee.clone(e.start):new ee,this.stop=c(e.stop)?ee.clone(e.stop):new ee,this.data=e.data,this.isStartIncluded=e.isStartIncluded??!0,this.isStopIncluded=e.isStopIncluded??!0}Object.defineProperties(jo.prototype,{isEmpty:{get:function(){let e=ee.compare(this.stop,this.start);return e<0||e===0&&(!this.isStartIncluded||!this.isStopIncluded)}}});var uC={start:void 0,stop:void 0,isStartIncluded:void 0,isStopIncluded:void 0,data:void 0};jo.fromIso8601=function(e,t){C.typeOf.object("options",e),C.typeOf.string("options.iso8601",e.iso8601);let n=e.iso8601.split("/");if(n.length!==2)throw new L("options.iso8601 is an invalid ISO 8601 interval.");let i=ee.fromIso8601(n[0]),o=ee.fromIso8601(n[1]),r=e.isStartIncluded??!0,s=e.isStopIncluded??!0,a=e.data;return c(t)?(t.start=i,t.stop=o,t.isStartIncluded=r,t.isStopIncluded=s,t.data=a,t):(uC.start=i,uC.stop=o,uC.isStartIncluded=r,uC.isStopIncluded=s,uC.data=a,new jo(uC))};jo.toIso8601=function(e,t){return C.typeOf.object("timeInterval",e),`${ee.toIso8601(e.start,t)}/${ee.toIso8601(e.stop,t)}`};jo.clone=function(e,t){if(c(e))return c(t)?(t.start=e.start,t.stop=e.stop,t.isStartIncluded=e.isStartIncluded,t.isStopIncluded=e.isStopIncluded,t.data=e.data,t):new jo(e)};jo.equals=function(e,t,n){return e===t||c(e)&&c(t)&&(e.isEmpty&&t.isEmpty||e.isStartIncluded===t.isStartIncluded&&e.isStopIncluded===t.isStopIncluded&&ee.equals(e.start,t.start)&&ee.equals(e.stop,t.stop)&&(e.data===t.data||c(n)&&n(e.data,t.data)))};jo.equalsEpsilon=function(e,t,n,i){return n=n??0,e===t||c(e)&&c(t)&&(e.isEmpty&&t.isEmpty||e.isStartIncluded===t.isStartIncluded&&e.isStopIncluded===t.isStopIncluded&&ee.equalsEpsilon(e.start,t.start,n)&&ee.equalsEpsilon(e.stop,t.stop,n)&&(e.data===t.data||c(i)&&i(e.data,t.data)))};jo.intersect=function(e,t,n,i){if(C.typeOf.object("left",e),!c(t))return jo.clone(jo.EMPTY,n);let o=e.start,r=e.stop,s=t.start,a=t.stop,l=ee.greaterThanOrEquals(s,o)&&ee.greaterThanOrEquals(r,s),d=!l&&ee.lessThanOrEquals(s,o)&&ee.lessThanOrEquals(o,a);if(!l&&!d)return jo.clone(jo.EMPTY,n);let u=e.isStartIncluded,f=e.isStopIncluded,p=t.isStartIncluded,y=t.isStopIncluded,h=ee.lessThan(r,a);return c(n)||(n=new jo),n.start=l?s:o,n.isStartIncluded=u&&p||!ee.equals(s,o)&&(l&&p||d&&u),n.stop=h?r:a,n.isStopIncluded=h?f:f&&y||!ee.equals(a,r)&&y,n.data=c(i)?i(e.data,t.data):e.data,n};jo.contains=function(e,t){if(C.typeOf.object("timeInterval",e),C.typeOf.object("julianDate",t),e.isEmpty)return!1;let n=ee.compare(e.start,t);if(n===0)return e.isStartIncluded;let i=ee.compare(t,e.stop);return i===0?e.isStopIncluded:n<0&&i<0};jo.prototype.clone=function(e){return jo.clone(this,e)};jo.prototype.equals=function(e,t){return jo.equals(this,e,t)};jo.prototype.equalsEpsilon=function(e,t,n){return jo.equalsEpsilon(this,e,t,n)};jo.prototype.toString=function(){return jo.toIso8601(this)};jo.EMPTY=Object.freeze(new jo({start:new ee,stop:new ee,isStartIncluded:!1,isStopIncluded:!1}));var Zn=jo;var dne=Object.freeze(ee.fromIso8601("0000-01-01T00:00:00Z")),une=Object.freeze(ee.fromIso8601("9999-12-31T24:00:00Z")),fIe=Object.freeze(new Zn({start:dne,stop:une})),hIe={MINIMUM_VALUE:dne,MAXIMUM_VALUE:une,MAXIMUM_INTERVAL:fIe},Ye=hIe;var bKt=_(T(),1);function xE(e,t,n){e=e??0,t=t??0,n=n??0,this.value=new Float32Array([e,t,n])}Object.defineProperties(xE.prototype,{componentDatatype:{get:function(){return q.FLOAT}},componentsPerAttribute:{get:function(){return 3}},normalize:{get:function(){return!1}}});xE.fromCartesian3=function(e){return C.defined("offset",e),new xE(e.x,e.y,e.z)};xE.toValue=function(e,t){return C.defined("offset",e),c(t)||(t=new Float32Array([e.x,e.y,e.z])),t[0]=e.x,t[1]=e.y,t[2]=e.z,t};var $i=xE;var TKt=_(T(),1);function l5(e){e=e??!0,this.value=l5.toValue(e)}Object.defineProperties(l5.prototype,{componentDatatype:{get:function(){return q.UNSIGNED_BYTE}},componentsPerAttribute:{get:function(){return 1}},normalize:{get:function(){return!1}}});l5.toValue=function(e,t){if(!c(e))throw new L("show is required.");return c(t)?(t[0]=e,t):new Uint8Array([e])};var Tn=l5;var AQt=_(T(),1);var CKt=_(T(),1),_E=`in vec3 v_positionEC; in vec3 v_normalEC; in vec3 v_tangentEC; in vec3 v_bitangentEC; in vec2 v_st; void main() { vec3 positionToEyeEC = -v_positionEC; mat3 tangentToEyeMatrix = czm_tangentToEyeSpaceMatrix(v_normalEC, v_tangentEC, v_bitangentEC); vec3 normalEC = normalize(v_normalEC); #ifdef FACE_FORWARD normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC); #endif czm_materialInput materialInput; materialInput.normalEC = normalEC; materialInput.tangentToEyeMatrix = tangentToEyeMatrix; materialInput.positionToEyeEC = positionToEyeEC; materialInput.st = v_st; 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 LKt=_(T(),1),TE=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 normal; in vec3 tangent; in vec3 bitangent; in vec2 st; in float batchId; out vec3 v_positionEC; out vec3 v_normalEC; out vec3 v_tangentEC; out vec3 v_bitangentEC; out vec2 v_st; void main() { vec4 p = czm_computePosition(); v_positionEC = (czm_modelViewRelativeToEye * p).xyz; v_normalEC = czm_normal * normal; v_tangentEC = czm_normal * tangent; v_bitangentEC = czm_normal * bitangent; v_st = st; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;var RKt=_(T(),1),SE=`in vec3 v_positionEC; in vec3 v_normalEC; 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 czm_materialInput materialInput; materialInput.normalEC = normalEC; 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 EKt=_(T(),1),CE=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 normal; in float batchId; out vec3 v_positionEC; out vec3 v_normalEC; void main() { vec4 p = czm_computePosition(); v_positionEC = (czm_modelViewRelativeToEye * p).xyz; v_normalEC = czm_normal * normal; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;var IKt=_(T(),1),VE=`in vec3 v_positionEC; in vec3 v_normalEC; in vec2 v_st; 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 czm_materialInput materialInput; materialInput.normalEC = normalEC; materialInput.positionToEyeEC = positionToEyeEC; materialInput.st = v_st; 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 wKt=_(T(),1),LE=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 normal; in vec2 st; in float batchId; out vec3 v_positionEC; out vec3 v_normalEC; out vec2 v_st; void main() { vec4 p = czm_computePosition(); v_positionEC = (czm_modelViewRelativeToEye * p).xyz; v_normalEC = czm_normal * normal; v_st = st; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;var eJt=_(T(),1);var DKt=_(T(),1);var FKt=_(T(),1);var pIe={ADD:oe.FUNC_ADD,SUBTRACT:oe.FUNC_SUBTRACT,REVERSE_SUBTRACT:oe.FUNC_REVERSE_SUBTRACT,MIN:oe.MIN,MAX:oe.MAX},Pa=Object.freeze(pIe);var NKt=_(T(),1);var bIe={ZERO:oe.ZERO,ONE:oe.ONE,SOURCE_COLOR:oe.SRC_COLOR,ONE_MINUS_SOURCE_COLOR:oe.ONE_MINUS_SRC_COLOR,DESTINATION_COLOR:oe.DST_COLOR,ONE_MINUS_DESTINATION_COLOR:oe.ONE_MINUS_DST_COLOR,SOURCE_ALPHA:oe.SRC_ALPHA,ONE_MINUS_SOURCE_ALPHA:oe.ONE_MINUS_SRC_ALPHA,DESTINATION_ALPHA:oe.DST_ALPHA,ONE_MINUS_DESTINATION_ALPHA:oe.ONE_MINUS_DST_ALPHA,CONSTANT_COLOR:oe.CONSTANT_COLOR,ONE_MINUS_CONSTANT_COLOR:oe.ONE_MINUS_CONSTANT_COLOR,CONSTANT_ALPHA:oe.CONSTANT_ALPHA,ONE_MINUS_CONSTANT_ALPHA:oe.ONE_MINUS_CONSTANT_ALPHA,SOURCE_ALPHA_SATURATE:oe.SRC_ALPHA_SATURATE},Co=Object.freeze(bIe);var yIe={DISABLED:Object.freeze({enabled:!1}),ALPHA_BLEND:Object.freeze({enabled:!0,equationRgb:Pa.ADD,equationAlpha:Pa.ADD,functionSourceRgb:Co.SOURCE_ALPHA,functionSourceAlpha:Co.ONE,functionDestinationRgb:Co.ONE_MINUS_SOURCE_ALPHA,functionDestinationAlpha:Co.ONE_MINUS_SOURCE_ALPHA}),PRE_MULTIPLIED_ALPHA_BLEND:Object.freeze({enabled:!0,equationRgb:Pa.ADD,equationAlpha:Pa.ADD,functionSourceRgb:Co.ONE,functionSourceAlpha:Co.ONE,functionDestinationRgb:Co.ONE_MINUS_SOURCE_ALPHA,functionDestinationAlpha:Co.ONE_MINUS_SOURCE_ALPHA}),ADDITIVE_BLEND:Object.freeze({enabled:!0,equationRgb:Pa.ADD,equationAlpha:Pa.ADD,functionSourceRgb:Co.SOURCE_ALPHA,functionSourceAlpha:Co.ONE,functionDestinationRgb:Co.ONE,functionDestinationAlpha:Co.ONE})},un=Object.freeze(yIe);var HKt=_(T(),1);var gIe={FRONT:oe.FRONT,BACK:oe.BACK,FRONT_AND_BACK:oe.FRONT_AND_BACK},_i=Object.freeze(gIe);function mC(e){e=e??z.EMPTY_OBJECT,this.material=e.material,this.translucent=e.translucent??!0,this._vertexShaderSource=e.vertexShaderSource,this._fragmentShaderSource=e.fragmentShaderSource,this._renderState=e.renderState,this._closed=e.closed??!1}Object.defineProperties(mC.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}}});mC.prototype.getFragmentShaderSource=function(){let e=[];return this.flat&&e.push("#define FLAT"),this.faceForward&&e.push("#define FACE_FORWARD"),c(this.material)&&e.push(this.material.shaderSource),e.push(this.fragmentShaderSource),e.join(` `)};mC.prototype.isTranslucent=function(){return c(this.material)&&this.material.isTranslucent()||!c(this.material)&&this.translucent};mC.prototype.getRenderState=function(){let e=this.isTranslucent(),t=He(this.renderState,!1);return e?(t.depthMask=!1,t.blending=un.ALPHA_BLEND):t.depthMask=!0,t};mC.getDefaultRenderState=function(e,t,n){let i={depthTest:{enabled:!0}};return e&&(i.depthMask=!1,i.blending=un.ALPHA_BLEND),t&&(i.cull={enabled:!0,face:_i.BACK}),c(n)&&(i=St(n,i,!0)),i};var no=mC;var VQt=_(T(),1);var nJt=_(T(),1),ZE=`uniform sampler2D image; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec4 rampColor = texture(image, vec2(materialInput.aspect / (2.0 * czm_pi), 0.5)); rampColor = czm_gammaCorrect(rampColor); material.diffuse = rampColor.rgb; material.alpha = rampColor.a; return material; } `;var oJt=_(T(),1),RE=`uniform sampler2D image; uniform float strength; uniform vec2 repeat; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; vec2 centerPixel = fract(repeat * st); float centerBump = texture(image, centerPixel).channel; float imageWidth = float(imageDimensions.x); vec2 rightPixel = fract(repeat * (st + vec2(1.0 / imageWidth, 0.0))); float rightBump = texture(image, rightPixel).channel; float imageHeight = float(imageDimensions.y); vec2 leftPixel = fract(repeat * (st + vec2(0.0, 1.0 / imageHeight))); float topBump = texture(image, leftPixel).channel; vec3 normalTangentSpace = normalize(vec3(centerBump - rightBump, centerBump - topBump, clamp(1.0 - strength, 0.1, 1.0))); vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace; material.normal = normalEC; material.diffuse = vec3(0.01); return material; } `;var sJt=_(T(),1),GE=`uniform vec4 lightColor; uniform vec4 darkColor; uniform vec2 repeat; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; float b = mod(floor(repeat.s * st.s) + floor(repeat.t * st.t), 2.0); float scaledWidth = fract(repeat.s * st.s); scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5)); float scaledHeight = fract(repeat.t * st.t); scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5)); float value = min(scaledWidth, scaledHeight); vec4 currentColor = mix(lightColor, darkColor, b); vec4 color = czm_antialias(lightColor, darkColor, currentColor, value, 0.03); color = czm_gammaCorrect(color); material.diffuse = color.rgb; material.alpha = color.a; return material; } `;var cJt=_(T(),1),EE=`uniform vec4 lightColor; uniform vec4 darkColor; uniform vec2 repeat; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); float b = smoothstep(0.3, 0.32, length(fract(repeat * materialInput.st) - 0.5)); vec4 color = mix(lightColor, darkColor, b); color = czm_gammaCorrect(color); material.diffuse = color.rgb; material.alpha = color.a; return material; } `;var dJt=_(T(),1),XE=`uniform sampler2D heights; uniform sampler2D colors; float getHeight(int idx, float invTexSize) { vec2 uv = vec2((float(idx) + 0.5) * invTexSize, 0.5); #ifdef OES_texture_float return texture(heights, uv).x; #else return czm_unpackFloat(texture(heights, uv)); #endif } czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); float height = materialInput.height; float invTexSize = 1.0 / float(heightsDimensions.x); float minHeight = getHeight(0, invTexSize); float maxHeight = getHeight(heightsDimensions.x - 1, invTexSize); if (height < minHeight || height > maxHeight) { material.diffuse = vec3(0.0); material.alpha = 0.0; return material; } int idxBelow = 0; int idxAbove = heightsDimensions.x; float heightBelow = minHeight; float heightAbove = maxHeight; 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); 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 mJt=_(T(),1),IE=`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 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 hJt=_(T(),1),WE=`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 bJt=_(T(),1),wE=`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 gJt=_(T(),1),PE=`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; #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) const float fuzz = 1.2; vec2 thickness = (lineThickness * czm_pixelRatio) - 1.0; 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 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 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 _Jt=_(T(),1),vE=`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 SJt=_(T(),1),FE=`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 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); 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 VJt=_(T(),1),AE=`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; float dashPosition = fract(pos.x / (dashLength * czm_pixelRatio)); float maskIndex = floor(dashPosition * maskLength); float maskTest = floor(dashPattern / pow(2.0, maskIndex)); vec4 fragColor = (mod(maskTest, 2.0) < 1.0) ? gapColor : color; if (fragColor.a < 0.005) { discard; } fragColor = czm_gammaCorrect(fragColor); material.emission = fragColor.rgb; material.alpha = fragColor.a; return material; } `;var ZJt=_(T(),1),ME=`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 GJt=_(T(),1),NE=`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); 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 XJt=_(T(),1),kE=`uniform vec4 color; uniform vec4 rimColor; uniform float width; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); 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 WJt=_(T(),1),UE=`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 PJt=_(T(),1),OE=`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); 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 FJt=_(T(),1),DE=`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 MJt=_(T(),1),BE=`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; float fade = max(1.0, (length(materialInput.positionToEyeEC) / 10000000000.0) * frequency * fadeFactor); float specularMapValue = texture(specularMap, materialInput.st).r; vec4 noise = czm_getWaterNoise(normalMap, materialInput.st * frequency, time, 0.0); vec3 normalTangentSpace = noise.xyz * vec3(1.0, 1.0, (1.0 / amplitude)); normalTangentSpace.xy /= fade; normalTangentSpace = mix(vec3(0.0, 0.0, 50.0), normalTangentSpace, specularMapValue); normalTangentSpace = normalize(normalTangentSpace); float tsPerturbationRatio = clamp(dot(normalTangentSpace, vec3(0.0, 0.0, 1.0)), 0.0, 1.0); material.alpha = mix(blendColor.a, baseWaterColor.a, specularMapValue) * specularMapValue; material.diffuse = mix(blendColor.rgb, baseWaterColor.rgb, specularMapValue); 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??Jt.LINEAR,this._magnificationFilter=e.magnificationFilter??di.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,xIe(e,this),Object.defineProperties(this,{type:{value:this.type,writable:!1}}),c(Je._uniformList[this.type])||(Je._uniformList[this.type]=Object.keys(this._uniforms))}Je._uniformList={};Je.fromType=function(e,t){if(!c(Je._materialCache.getMaterial(e)))throw new L(`material with type '${e}' does not exist.`);let n=new Je({fabric:{type:e}});if(c(t))for(let i in t)t.hasOwnProperty(i)&&(n.uniforms[i]=t[i]);return n};Je.prototype.isTranslucent=function(){if(c(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 LIe(e){let t=e._template.components,n=e._template.source;if(c(n))e.shaderSource+=`${n} `;else{if(e.shaderSource+=`czm_material czm_getMaterial(czm_materialInput materialInput) { `,e.shaderSource+=`czm_material material = czm_getDefaultMaterial(materialInput); `,c(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&&VIe(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 fne={mat2:Ii,mat3:te,mat4:M},ZIe=/\.ktx2$/i;function RIe(e){let t;return function(n,i){let o=n.uniforms,r=o[e],s=t!==r,a=!c(r)||r===Je.DefaultImageId;t=r;let l=n._textures[e],d,u;if(r instanceof HTMLVideoElement){if(r.readyState>=2){if(s&&c(l)&&(l!==i.defaultTexture&&l.destroy(),l=void 0),!c(l)||l===i.defaultTexture){let p=new en({minificationFilter:n._minificationFilter,magnificationFilter:n._magnificationFilter});l=new Pt({context:i,source:r,sampler:p}),n._textures[e]=l;return}l.copyFrom({source:r})}else c(l)||(n._textures[e]=i.defaultTexture);return}if(r instanceof Pt&&r!==l){n._texturePaths[e]=void 0;let p=n._textures[e];c(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&&c(l)&&a&&(l!==n._defaultTexture&&l.destroy(),l=void 0),c(l)||(n._texturePaths[e]=void 0,l=n._textures[e]=n._defaultTexture,d=`${e}Dimensions`,o.hasOwnProperty(d)&&(u=o[d],u.x=l._width,u.y=l._height)),a)return;let f=r instanceof Ge;if(!c(n._texturePaths[e])||f&&r.url!==n._texturePaths[e].url||!f&&r!==n._texturePaths[e]){if(typeof r=="string"||f){let p=f?r:Ge.createIfNeeded(r),y;ZIe.test(p.url)?y=Ll(p.url):y=p.fetchImage(),Promise.resolve(y).then(function(h){n._loadedImages.push({id:e,image:h})}).catch(function(){c(l)&&l!==n._defaultTexture&&l.destroy(),n._textures[e]=n._defaultTexture})}else(r instanceof HTMLCanvasElement||r instanceof HTMLImageElement)&&n._loadedImages.push({id:e,image:r});n._texturePaths[e]=r}}}function GIe(e){return function(t,n){let i=t.uniforms[e];if(i instanceof Uo){let r=t._textures[e];r!==t._defaultTexture&&r.destroy(),t._texturePaths[e]=void 0,t._textures[e]=i;return}if(c(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=[Ge.createIfNeeded(i.positiveX).fetchImage(),Ge.createIfNeeded(i.negativeX).fetchImage(),Ge.createIfNeeded(i.positiveY).fetchImage(),Ge.createIfNeeded(i.negativeY).fetchImage(),Ge.createIfNeeded(i.positiveZ).fetchImage(),Ge.createIfNeeded(i.negativeZ).fetchImage()];Promise.all(r).then(function(s){t._loadedCubeMaps.push({id:e,images:s})}),t._texturePaths[e]=o}}}function EIe(e){let t=e._template.uniforms;for(let n in t)t.hasOwnProperty(n)&&hne(e,n)}function hne(e,t){let n=e._strict,i=e._template.uniforms,o=i[t],r=XIe(o);if(!c(r))throw new L(`fabric: uniform '${t}' has invalid type.`);let s;if(r==="channels"){if(s=YE(e,t,o,!1),s===0&&n)throw new L(`strict: shader source does not use channels '${t}'.`)}else{if(r==="sampler2D"){let d=`${t}Dimensions`;WIe(e,d)>0&&(i[d]={type:"ivec3",x:1,y:1},hne(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 l=`${t}_${e._count++}`;if(s=YE(e,t,l),s===1&&n)throw new L(`strict: shader source does not use uniform '${t}'.`);if(e.uniforms[t]=o,r==="sampler2D")e._uniforms[l]=function(){return e._textures[t]},e._updateFunctions.push(RIe(t));else if(r==="samplerCube")e._uniforms[l]=function(){return e._textures[t]},e._updateFunctions.push(GIe(t));else if(r.indexOf("mat")!==-1){let d=new fne[r];e._uniforms[l]=function(){return fne[r].fromColumnMajorArray(e.uniforms[t],d)}}else e._uniforms[l]=function(){return e.uniforms[t]}}}function XIe(e){let t=e.type;if(!c(t)){let n=typeof e;if(n==="number")t="float";else if(n==="boolean")t="bool";else if(n==="string"||e instanceof Ge||e instanceof HTMLCanvasElement||e instanceof HTMLImageElement)/^([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 IIe(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=St(e._uniforms,o._uniforms,!0),e.materials[i]=o,e._translucentFunctions=e._translucentFunctions.concat(o._translucentFunctions);let r="czm_getMaterial",s=`${r}_${e._count++}`;YE(o,r,s),e.shaderSource=o.shaderSource+e.shaderSource;let a=`${s}(materialInput)`;if(YE(e,i,a)===0&&t)throw new L(`strict: shader source does not use material '${i}'.`)}}function YE(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(l,d,u){return d||u?l:(o+=1,n)}),o}function WIe(e,t,n){return YE(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 Y(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 Y(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:RE},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:vE},translucent:!1});Je.GridType="Grid";Je._materialCache.addMaterial(Je.GridType,{fabric:{type:Je.GridType,uniforms:{color:new Y(0,1,0,1),cellAlpha:.1,lineCount:new D(8,8),lineThickness:new D(1,1),lineOffset:new D(0,0)},source:PE},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 Y(1,1,1,.5),oddColor:new Y(0,0,1,.5),offset:0,repeat:5},source:OE},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 Y(1,1,1,.5),darkColor:new Y(0,0,0,.5),repeat:new D(5,5)},source:GE},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 Y(1,1,0,.75),darkColor:new Y(0,1,1,.75),repeat:new D(5,5)},source:EE},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 Y(.2,.3,.6,1),blendColor:new Y(0,1,.699,1),specularMap:Je.DefaultImageId,normalMap:Je.DefaultImageId,frequency:10,animationSpeed:.01,amplitude:1,specularIntensity:.5,fadeFactor:1},source:BE},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 Y(1,0,0,.7),rimColor:new Y(1,1,1,.4),width:.3},source:kE},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 Y(1,0,0,1),fadeOutColor:new Y(0,0,0,0),maximumDistance:.5,repeat:!0,fadeDirection:{x:!0,y:!0},time:new D(.5,.5)},source:wE},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 Y(1,1,1,1)},source:FE},translucent:!0});Je.PolylineDashType="PolylineDash";Je._materialCache.addMaterial(Je.PolylineDashType,{fabric:{type:Je.PolylineDashType,uniforms:{color:new Y(1,0,1,1),gapColor:new Y(0,0,0,0),dashLength:16,dashPattern:255},source:AE},translucent:!0});Je.PolylineGlowType="PolylineGlow";Je._materialCache.addMaterial(Je.PolylineGlowType,{fabric:{type:Je.PolylineGlowType,uniforms:{color:new Y(0,.5,1,1),glowPower:.25,taperPower:1},source:ME},translucent:!0});Je.PolylineOutlineType="PolylineOutline";Je._materialCache.addMaterial(Je.PolylineOutlineType,{fabric:{type:Je.PolylineOutlineType,uniforms:{color:new Y(1,1,1,1),outlineColor:new Y(1,0,0,1),outlineWidth:1},source:NE},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 Y(1,0,0,1),width:1},source:IE},translucent:!1});Je.ElevationRampType="ElevationRamp";Je._materialCache.addMaterial(Je.ElevationRampType,{fabric:{type:Je.ElevationRampType,uniforms:{image:Je.DefaultImageId,minimumHeight:0,maximumHeight:1e4},source:WE},translucent:!1});Je.SlopeRampMaterialType="SlopeRamp";Je._materialCache.addMaterial(Je.SlopeRampMaterialType,{fabric:{type:Je.SlopeRampMaterialType,uniforms:{image:Je.DefaultImageId},source:UE},translucent:!1});Je.AspectRampMaterialType="AspectRamp";Je._materialCache.addMaterial(Je.AspectRampMaterialType,{fabric:{type:Je.AspectRampMaterialType,uniforms:{image:Je.DefaultImageId},source:ZE},translucent:!1});Je.ElevationBandType="ElevationBand";Je._materialCache.addMaterial(Je.ElevationBandType,{fabric:{type:Je.ElevationBandType,uniforms:{heights:Je.DefaultImageId,colors:Je.DefaultImageId},source:XE},translucent:!0});Je.WaterMaskType="WaterMask";Je._materialCache.addMaterial(Je.WaterMaskType,{fabric:{type:Je.WaterMaskType,source:DE,uniforms:{waterColor:new Y(1,1,1,1),landColor:new Y(0,0,0,0)}},translucent:!1});var zi=Je;function Ex(e){e=e??z.EMPTY_OBJECT;let t=e.translucent??!0,n=e.closed??!1,i=e.materialSupport??Ex.MaterialSupport.TEXTURED;this.material=c(e.material)?e.material:zi.fromType(zi.ColorType),this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??i.vertexShaderSource,this._fragmentShaderSource=e.fragmentShaderSource??i.fragmentShaderSource,this._renderState=no.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(Ex.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}}});Ex.prototype.getFragmentShaderSource=no.prototype.getFragmentShaderSource;Ex.prototype.isTranslucent=no.prototype.isTranslucent;Ex.prototype.getRenderState=no.prototype.getRenderState;Ex.MaterialSupport={BASIC:Object.freeze({vertexFormat:We.POSITION_AND_NORMAL,vertexShaderSource:CE,fragmentShaderSource:SE}),TEXTURED:Object.freeze({vertexFormat:We.POSITION_NORMAL_AND_ST,vertexShaderSource:LE,fragmentShaderSource:VE}),ALL:Object.freeze({vertexFormat:We.ALL,vertexShaderSource:TE,fragmentShaderSource:_E})};var so=Ex;var ejt=_(T(),1);var NQt=_(T(),1),HE=`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 UQt=_(T(),1),zE=`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; v_normalEC = czm_normal * normal; v_color = color; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;var DQt=_(T(),1),Xx=`in vec4 v_color; void main() { out_FragColor = czm_gammaCorrect(v_color); } `;var YQt=_(T(),1),KE=`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 Wp(e){e=e??z.EMPTY_OBJECT;let t=e.translucent??!0,n=e.closed??!1,i=e.flat??!1,o=i?KE:zE,r=i?Xx:HE,s=i?Wp.FLAT_VERTEX_FORMAT:Wp.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??o,this._fragmentShaderSource=e.fragmentShaderSource??r,this._renderState=no.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=s,this._flat=i,this._faceForward=e.faceForward??!n}Object.defineProperties(Wp.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}}});Wp.VERTEX_FORMAT=We.POSITION_AND_NORMAL;Wp.FLAT_VERTEX_FORMAT=We.POSITION_ONLY;Wp.prototype.getFragmentShaderSource=no.prototype.getFragmentShaderSource;Wp.prototype.isTranslucent=no.prototype.isTranslucent;Wp.prototype.getRenderState=no.prototype.getRenderState;var an=Wp;var cjt=_(T(),1);function fC(e){this._definitionChanged=new ye,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(fC.prototype,{isConstant:{get:function(){return J.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:fe("color")});fC.prototype.getType=function(e){return"Color"};var wIe=new ee;fC.prototype.getValue=function(e,t){return c(e)||(e=ee.now(wIe)),c(t)||(t={}),t.color=J.getValueOrClonedDefault(this._color,e,Y.WHITE,t.color),t};fC.prototype.equals=function(e){return this===e||e instanceof fC&&J.equals(this._color,e._color)};var Ut=fC;var aqt=_(T(),1);var N6t=_(T(),1);var Wjt=_(T(),1);var gjt=_(T(),1);function K0(e){e=e??z.EMPTY_OBJECT,this._ellipsoid=e.ellipsoid??re.default,this._rectangle=e.rectangle??de.MAX_VALUE,this._projection=new Xi(this._ellipsoid),this._numberOfLevelZeroTilesX=e.numberOfLevelZeroTilesX??2,this._numberOfLevelZeroTilesY=e.numberOfLevelZeroTilesY??1}Object.defineProperties(K0.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},rectangle:{get:function(){return this._rectangle}},projection:{get:function(){return this._projection}}});K0.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),c(n)?(n.x=d,n.y=u,n):new D(d,u)};var Ki=K0;var pne=new m,bne=new m,yne=new pe,AY=new m,PIe=new m,gne=new ue,vIe=new Ki,JE=[new pe,new pe,new pe,new pe],QE=new D,Vr={};Vr.initialize=function(){let e=Vr._initPromise;return c(e)||(e=Ge.fetchJson(on("Assets/approximateTerrainHeights.json")).then(function(t){Vr._terrainHeights=t}),Vr._initPromise=e),e};Vr.getMinimumMaximumHeights=function(e,t){if(C.defined("rectangle",e),!c(Vr._terrainHeights))throw new L("You must call ApproximateTerrainHeights.initialize and wait for the promise to resolve before using this function");t=t??re.default;let n=xne(e),i=Vr._defaultMinTerrainHeight,o=Vr._defaultMaxTerrainHeight;if(c(n)){let r=`${n.level}-${n.x}-${n.y}`,s=Vr._terrainHeights[r];c(s)&&(i=s[0],o=s[1]),t.cartographicToCartesian(de.northeast(e,yne),pne),t.cartographicToCartesian(de.southwest(e,yne),bne),m.midpoint(bne,pne,AY);let a=t.scaleToGeodeticSurface(AY,PIe);if(c(a)){let l=m.distance(AY,a);i=Math.min(i,-l)}else i=Vr._defaultMinTerrainHeight}return i=Math.max(Vr._defaultMinTerrainHeight,i),{minimumTerrainHeight:i,maximumTerrainHeight:o}};Vr.getBoundingSphere=function(e,t){if(C.defined("rectangle",e),!c(Vr._terrainHeights))throw new L("You must call ApproximateTerrainHeights.initialize and wait for the promise to resolve before using this function");t=t??re.default;let n=xne(e),i=Vr._defaultMaxTerrainHeight;if(c(n)){let r=`${n.level}-${n.x}-${n.y}`,s=Vr._terrainHeights[r];c(s)&&(i=s[1])}let o=ue.fromRectangle3D(e,t,0);return ue.fromRectangle3D(e,t,i,gne),ue.union(o,gne,o)};function xne(e){pe.fromRadians(e.east,e.north,0,JE[0]),pe.fromRadians(e.west,e.north,0,JE[1]),pe.fromRadians(e.east,e.south,0,JE[2]),pe.fromRadians(e.west,e.south,0,JE[3]);let t=0,n=0,i=0,o=0,r=Vr._terrainHeightsMaxLevel,s;for(s=0;s<=r;++s){let a=!1;for(let l=0;l<4;++l){let d=JE[l];if(vIe.positionToTileXY(d,s,QE),l===0)i=QE.x,o=QE.y;else if(i!==QE.x||o!==QE.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}}Vr._terrainHeightsMaxLevel=6;Vr._defaultMaxTerrainHeight=9e3;Vr._defaultMinTerrainHeight=-1e5;Vr._terrainHeights=void 0;Vr._initPromise=void 0;Object.defineProperties(Vr,{initialized:{get:function(){return c(Vr._terrainHeights)}}});var ui=Vr;var y4t=_(T(),1);var $jt=_(T(),1);var Mjt=_(T(),1);function Nc(e,t,n){this.minimum=m.clone(e??m.ZERO),this.maximum=m.clone(t??m.ZERO),c(n)?n=m.clone(n):n=m.midpoint(this.minimum,this.maximum,new m),this.center=n}Nc.fromCorners=function(e,t,n){return C.defined("minimum",e),C.defined("maximum",t),c(n)||(n=new Nc),n.minimum=m.clone(e,n.minimum),n.maximum=m.clone(t,n.maximum),n.center=m.midpoint(e,t,n.center),n};Nc.fromPoints=function(e,t){if(c(t)||(t=new Nc),!c(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,l=e.length;for(let f=1;f0?zt.INSIDE:r+o<0?zt.OUTSIDE:zt.INTERSECTING};Nc.prototype.clone=function(e){return Nc.clone(this,e)};Nc.prototype.intersectPlane=function(e){return Nc.intersectPlane(this,e)};Nc.prototype.equals=function(e){return Nc.equals(this,e)};var J0=Nc;var MY=new ce;function fh(e,t){if(C.defined("origin",e),t=t??re.default,e=t.scaleToGeodeticSurface(e),!c(e))throw new L("origin must not be at the center of the ellipsoid.");let n=wt.eastNorthUpToFixedFrame(e,t);this._ellipsoid=t,this._origin=e,this._xAxis=m.fromCartesian4(M.getColumn(n,0,MY)),this._yAxis=m.fromCartesian4(M.getColumn(n,1,MY));let i=m.fromCartesian4(M.getColumn(n,2,MY));this._plane=cn.fromPointNormal(e,i)}Object.defineProperties(fh.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 FIe=new J0;fh.fromPoints=function(e,t){C.defined("cartesians",e);let n=J0.fromPoints(e,FIe);return new fh(n.center,t)};var _ne=new bn,u5=new m;fh.prototype.projectPointOntoPlane=function(e,t){C.defined("cartesian",e);let n=_ne;n.origin=e,m.normalize(e,n.direction);let i=qn.rayPlane(n,this._plane,u5);if(c(i)||(m.negate(n.direction,n.direction),i=qn.rayPlane(n,this._plane,u5)),c(i)){let o=m.subtract(i,this._origin,i),r=m.dot(this._xAxis,o),s=m.dot(this._yAxis,o);return c(t)?(t.x=r,t.y=s,t):new D(r,s)}};fh.prototype.projectPointsOntoPlane=function(e,t){C.defined("cartesians",e),c(t)||(t=[]);let n=0,i=e.length;for(let o=0;ow.TWO_PI)throw new L("Rectangle width must be between 0 and 2 * pi");if(e.height<0||e.height>w.PI)throw new L("Rectangle height must be between 0 and pi");if(c(i)&&!w.equalsEpsilon(i.radii.x,i.radii.y,w.EPSILON15))throw new L("Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)");t=t??0,n=n??0,i=i??re.default;let r,s,a,l,d,u,f;if(e.width<=w.PI){let v=de.center(e,Sne),P=i.cartographicToCartesian(v,zIe),F=new $r(P,i);f=F.plane;let N=v.longitude,b=e.south<0&&e.north>0?0:v.latitude,G=pe.fromRadians(N,e.north,n,KIe),X=pe.fromRadians(e.west,e.north,n,JIe),W=pe.fromRadians(e.west,b,n,QIe),A=pe.fromRadians(e.west,e.south,n,jIe),k=pe.fromRadians(N,e.south,n,qIe),B=i.cartographicToCartesian(G,$Ie),O=i.cartographicToCartesian(X,Cne),H=i.cartographicToCartesian(W,eWe),U=i.cartographicToCartesian(A,Vne),K=i.cartographicToCartesian(k,tWe),Q=F.projectPointToNearestOnPlane(B,nWe),ie=F.projectPointToNearestOnPlane(O,iWe),j=F.projectPointToNearestOnPlane(H,oWe),$=F.projectPointToNearestOnPlane(U,rWe),ne=F.projectPointToNearestOnPlane(K,sWe);return r=Math.min(ie.x,j.x,$.x),s=-r,l=Math.max(ie.y,Q.y),a=Math.min($.y,ne.y),X.height=A.height=t,O=i.cartographicToCartesian(X,Cne),U=i.cartographicToCartesian(A,Vne),d=Math.min(cn.getPointDistance(f,O),cn.getPointDistance(f,U)),u=n,Tne(F.origin,F.xAxis,F.yAxis,F.zAxis,r,s,a,l,d,u,o)}let p=e.south>0,y=e.north<0,h=p?e.south:y?e.north:0,g=de.center(e,Sne).longitude,x=m.fromRadians(g,h,n,i,aWe);x.z=0;let V=Math.abs(x.x)=l?zt.INSIDE:zt.INTERSECTING};var Rne=new m,Gne=new m,Ene=new m,bWe=new m,Lne=new m,yWe=new m;ki.distanceSquaredTo=function(e,t){if(!c(e))throw new L("box is required.");if(!c(t))throw new L("cartesian is required.");let n=m.subtract(t,e.center,Zne),i=e.halfAxes,o=te.getColumn(i,0,Rne),r=te.getColumn(i,1,Gne),s=te.getColumn(i,2,Ene),a=m.magnitude(o),l=m.magnitude(r),d=m.magnitude(s),u=!0,f=!0,p=!0;a>0?m.divideByScalar(o,a,o):u=!1,l>0?m.divideByScalar(r,l,r):f=!1,d>0?m.divideByScalar(s,d,s):p=!1;let y=!u+!f+!p,h,g,x;if(y===1){let R=o;h=r,g=s,f?p||(R=s,g=o):(R=r,h=o),x=m.cross(h,g,Lne),R===o?o=x:R===r?r=x:R===s&&(s=x)}else if(y===2){h=o,f?h=r:p&&(h=s);let R=m.UNIT_Y;R.equalsEpsilon(h,w.EPSILON3)&&(R=m.UNIT_X),g=m.cross(h,R,bWe),m.normalize(g,g),x=m.cross(h,g,Lne),m.normalize(x,x),h===o?(r=g,s=x):h===r?(s=g,o=x):h===s&&(o=g,r=x)}else y===3&&(o=m.UNIT_X,r=m.UNIT_Y,s=m.UNIT_Z);let S=yWe;S.x=m.dot(n,o),S.y=m.dot(n,r),S.z=m.dot(n,s);let V=0,Z;return S.x<-a?(Z=S.x+a,V+=Z*Z):S.x>a&&(Z=S.x-a,V+=Z*Z),S.y<-l?(Z=S.y+l,V+=Z*Z):S.y>l&&(Z=S.y-l,V+=Z*Z),S.z<-d?(Z=S.z+d,V+=Z*Z):S.z>d&&(Z=S.z-d,V+=Z*Z),V};var gWe=new m,xWe=new m;ki.computePlaneDistances=function(e,t,n,i){if(!c(e))throw new L("box is required.");if(!c(t))throw new L("position is required.");if(!c(n))throw new L("direction is required.");c(i)||(i=new Ia);let o=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,s=e.center,a=e.halfAxes,l=te.getColumn(a,0,Rne),d=te.getColumn(a,1,Gne),u=te.getColumn(a,2,Ene),f=m.add(l,d,gWe);m.add(f,u,f),m.add(f,s,f);let p=m.subtract(f,t,xWe),y=m.dot(n,p);return o=Math.min(y,o),r=Math.max(y,r),m.add(s,l,f),m.add(f,d,f),m.subtract(f,u,f),m.subtract(f,t,p),y=m.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),m.add(s,l,f),m.subtract(f,d,f),m.add(f,u,f),m.subtract(f,t,p),y=m.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),m.add(s,l,f),m.subtract(f,d,f),m.subtract(f,u,f),m.subtract(f,t,p),y=m.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),m.subtract(s,l,f),m.add(f,d,f),m.add(f,u,f),m.subtract(f,t,p),y=m.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),m.subtract(s,l,f),m.add(f,d,f),m.subtract(f,u,f),m.subtract(f,t,p),y=m.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),m.subtract(s,l,f),m.subtract(f,d,f),m.add(f,u,f),m.subtract(f,t,p),y=m.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),m.subtract(s,l,f),m.subtract(f,d,f),m.subtract(f,u,f),m.subtract(f,t,p),y=m.dot(n,p),o=Math.min(y,o),r=Math.max(y,r),i.start=o,i.stop=r,i};var _We=new m,TWe=new m,SWe=new m;ki.computeCorners=function(e,t){C.typeOf.object("box",e),c(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=te.getColumn(i,0,_We),r=te.getColumn(i,1,TWe),s=te.getColumn(i,2,SWe);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 CWe=new te;ki.computeTransformation=function(e,t){C.typeOf.object("box",e),c(t)||(t=new M);let n=e.center,i=te.multiplyByUniformScale(e.halfAxes,2,CWe);return M.fromRotationTranslation(i,n,t)};var VWe=new ue;ki.isOccluded=function(e,t){if(!c(e))throw new L("box is required.");if(!c(t))throw new L("occluder is required.");let n=ue.fromOrientedBoundingBox(e,VWe);return!t.isBoundingSphereVisible(n)};ki.prototype.intersectPlane=function(e){return ki.intersectPlane(this,e)};ki.prototype.distanceSquaredTo=function(e){return ki.distanceSquaredTo(this,e)};ki.prototype.computePlaneDistances=function(e,t,n){return ki.computePlaneDistances(this,e,t,n)};ki.prototype.computeCorners=function(e){return ki.computeCorners(this,e)};ki.prototype.computeTransformation=function(e){return ki.computeTransformation(this,e)};ki.prototype.isOccluded=function(e){return ki.isOccluded(this,e)};ki.equals=function(e,t){return e===t||c(e)&&c(t)&&m.equals(e.center,t.center)&&te.equals(e.halfAxes,t.halfAxes)};ki.prototype.clone=function(e){return ki.clone(this,e)};ki.prototype.equals=function(e){return ki.equals(this,e)};var Xn=ki;var C4t=_(T(),1);var m5={};m5.getHeight=function(e,t,n){if(!Number.isFinite(t))throw new L("scale must be a finite number.");if(!Number.isFinite(n))throw new L("relativeHeight must be a finite number.");return(e-n)*t+n};var LWe=new pe;m5.getPosition=function(e,t,n,i,o){let r=t.cartesianToCartographic(e,LWe);if(!c(r))return m.clone(e,o);let s=m5.getHeight(r.height,n,i);return m.fromRadians(r.longitude,r.latitude,s,t,o)};var Lr=m5;var x6t=_(T(),1);var L4t=_(T(),1),jE=`in vec3 position3DHigh; in vec3 position3DLow; in float batchId; #ifdef EXTRUDED_GEOMETRY in vec3 extrudeDirection; uniform float u_globeMinimumAltitude; #endif // EXTRUDED_GEOMETRY #ifdef PER_INSTANCE_COLOR out vec4 v_color; #endif // PER_INSTANCE_COLOR #ifdef TEXTURE_COORDINATES #ifdef SPHERICAL out vec4 v_sphericalExtents; #else // SPHERICAL out vec2 v_inversePlaneExtents; out vec4 v_westPlane; out vec4 v_southPlane; #endif // SPHERICAL out vec3 v_uvMinAndSphericalLongitudeRotation; out vec3 v_uMaxAndInverseDistance; out vec3 v_vMaxAndInverseDistance; #endif // TEXTURE_COORDINATES void main() { vec4 position = czm_computePosition(); #ifdef EXTRUDED_GEOMETRY float delta = min(u_globeMinimumAltitude, czm_geometricToleranceOverMeter * length(position.xyz)); delta *= czm_sceneMode == czm_sceneMode3D ? 1.0 : 0.0; position = position + vec4(extrudeDirection * delta, 0.0); #endif #ifdef TEXTURE_COORDINATES #ifdef SPHERICAL v_sphericalExtents = czm_batchTable_sphericalExtents(batchId); v_uvMinAndSphericalLongitudeRotation.z = czm_batchTable_longitudeRotation(batchId); #else // SPHERICAL #ifdef COLUMBUS_VIEW_2D vec4 planes2D_high = czm_batchTable_planes2D_HIGH(batchId); vec4 planes2D_low = czm_batchTable_planes2D_LOW(batchId); 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); 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 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 R4t=_(T(),1),Q0=`#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 E4t=_(T(),1),Xne={TERRAIN:0,CESIUM_3D_TILE:1,BOTH:2};Xne.NUMBER_OF_CLASSIFICATION_TYPES=3;var Un=Object.freeze(Xne);var W4t=_(T(),1);var ZWe={NEVER:oe.NEVER,LESS:oe.LESS,EQUAL:oe.EQUAL,LESS_OR_EQUAL:oe.LEQUAL,GREATER:oe.GREATER,NOT_EQUAL:oe.NOTEQUAL,GREATER_OR_EQUAL:oe.GEQUAL,ALWAYS:oe.ALWAYS},lc=Object.freeze(ZWe);var f7t=_(T(),1);var F4t=_(T(),1);function RWe(e,t){if(!c(e))throw new L("array is required.");if(!c(t)||t<1)throw new L("numberOfArrays must be greater than 0.");let n=[],i=e.length,o=0;for(;o=this._numberOfInstances)throw new L("instanceIndex is out of range.");if(t<0||t>=this._attributes.length)throw new L("attributeIndex is out of range");let i=this._attributes,o=this._offsets[t],s=4*this._stride*e+4*o,a;this._packFloats&&i[t].componentDatatype!==Ue.UNSIGNED_BYTE?a=IWe(this._batchValues,s,Ine):a=ce.unpack(this._batchValues,s,Ine);let l=Wne(i,t);return c(l.fromCartesian4)?l.fromCartesian4(a,n):c(l.clone)?l.clone(a,n):a.x};var wWe=[void 0,void 0,new D,new m,new ce],PWe=new ce;wp.prototype.setBatchedAttribute=function(e,t,n){if(e<0||e>=this._numberOfInstances)throw new L("instanceIndex is out of range.");if(t<0||t>=this._attributes.length)throw new L("attributeIndex is out of range");if(!c(n))throw new L("value is required.");let i=this._attributes,o=wWe[i[t].componentsPerAttribute],r=this.getBatchedAttribute(e,t,o),s=Wne(this._attributes,t);if(c(s.equals)?s.equals(r,n):r===n)return;let l=PWe;l.x=c(n.x)?n.x:n,l.y=c(n.y)?n.y:0,l.z=c(n.z)?n.z:0,l.w=c(n.w)?n.w:0;let d=this._offsets[t],f=4*this._stride*e+4*d;this._packFloats&&i[t].componentDatatype!==Ue.UNSIGNED_BYTE?WWe(l,this._batchValues,f):ce.pack(l,this._batchValues,f),this._batchValuesDirty=!0};function vWe(e,t){let n=e._textureDimensions;e._texture=new Pt({context:t,pixelFormat:ke.RGBA,pixelDatatype:e._pixelDatatype,width:n.x,height:n.y,sampler:en.NEAREST,flipY:!1})}function FWe(e){let t=e._textureDimensions;e._texture.copyFrom({source:{width:t.x,height:t.y,arrayBufferView:e._batchValues}})}wp.prototype.update=function(e){c(this._texture)&&!this._batchValuesDirty||this._attributes.length===0||(this._batchValuesDirty=!1,c(this._texture)||vWe(this,e.context),FWe(this))};wp.prototype.getUniformMapCallback=function(){let e=this;return function(t){return e._attributes.length===0?t:St(t,{batchTexture:function(){return e._texture},batchTextureDimensions:function(){return e._textureDimensions},batchTextureStep:function(){return e._textureStep}})}};function AWe(e){let t=e._stride;return e._textureDimensions.y===1?`uniform vec4 batchTextureStep; vec2 computeSt(float batchId) { float stepX = batchTextureStep.x; float centerX = batchTextureStep.y; float numberOfAttributes = float(${t}); return vec2(centerX + (batchId * numberOfAttributes * stepX), 0.5); } `:`uniform vec4 batchTextureStep; uniform vec2 batchTextureDimensions; vec2 computeSt(float batchId) { float stepX = batchTextureStep.x; float centerX = batchTextureStep.y; float stepY = batchTextureStep.z; float centerY = batchTextureStep.w; float numberOfAttributes = float(${t}); float xId = mod(batchId * numberOfAttributes, batchTextureDimensions.x); float yId = floor(batchId * numberOfAttributes / batchTextureDimensions.x); return vec2(centerX + (xId * stepX), centerY + (yId * stepY)); } `}function MWe(e){return e===1?"float":`vec${e}`}function NWe(e){return e===1?".x":e===2?".xy":e===3?".xyz":""}function kWe(e,t){let i=e._attributes[t],o=i.componentsPerAttribute,r=i.functionName,s=MWe(o),a=NWe(o),l=e._offsets[t],d=`${s} ${r}(float batchId) { vec2 st = computeSt(batchId); st.x += batchTextureStep.x * float(${l}); `;return e._packFloats&&i.componentDatatype!==Ue.UNSIGNED_BYTE?d+=`vec4 textureValue; textureValue.x = czm_unpackFloat(texture(batchTexture, st)); textureValue.y = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x, 0.0))); textureValue.z = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x * 2.0, 0.0))); textureValue.w = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x * 3.0, 0.0))); `:d+=` vec4 textureValue = texture(batchTexture, st); `,d+=` ${s} value = textureValue${a}; `,e._pixelDatatype===Ue.UNSIGNED_BYTE&&i.componentDatatype===q.UNSIGNED_BYTE&&!i.normalize?d+=`value *= 255.0; `:e._pixelDatatype===Ue.FLOAT&&i.componentDatatype===q.UNSIGNED_BYTE&&i.normalize&&(d+=`value /= 255.0; `),d+=` return value; } `,d}wp.prototype.getVertexShaderCallback=function(){let e=this._attributes;if(e.length===0)return function(i){return i};let t=`uniform highp sampler2D batchTexture; `;t+=`${AWe(this)} `;let n=e.length;for(let i=0;iEl.MaximumLatitude?e=El.MaximumLatitude:e<-El.MaximumLatitude&&(e=-El.MaximumLatitude);let t=Math.sin(e);return .5*Math.log((1+t)/(1-t))};El.MaximumLatitude=El.mercatorAngleToGeodeticLatitude(Math.PI);El.prototype.project=function(e,t){let n=this._semimajorAxis,i=e.longitude*n,o=El.geodeticLatitudeToMercatorAngle(e.latitude)*n,r=e.height;return c(t)?(t.x=i,t.y=o,t.z=r,t):new m(i,o,r)};El.prototype.unproject=function(e,t){if(!c(e))throw new L("cartesian is required");let n=this._oneOverSemimajorAxis,i=e.x*n,o=El.mercatorAngleToGeodeticLatitude(e.y*n),r=e.z;return c(t)?(t.longitude=i,t.latitude=o,t.height=r,t):new pe(i,o,r)};var Wi=El;function UWe(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 l=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 BWe(e,t){let n=[];return kY(e,"geometry",t,n),kY(e,"westHemisphereGeometry",t,n),kY(e,"eastHemisphereGeometry",t,n),n}var Pp={};Pp.combineGeometry=function(e){let t,n,i=e.instances,o=i.length,r,s,a=!1;o>0&&(t=DWe(e),t.length>0&&(n=An.createAttributeLocations(t[0]),e.createPickOffsets&&(r=BWe(i,t))),c(i[0].attributes)&&c(i[0].attributes.offset)&&(s=new Array(o),a=!0));let l=new Array(o),d=new Array(o);for(let u=0;u0&&(n.set(l.indices,s),s+=h)}return t.push(n.buffer),{stringTable:i,packedData:n}};Pp.unpackCreateGeometryResults=function(e){let t=e.stringTable,n=e.packedData,i,o=new Array(n[0]),r=0,s=1;for(;s0){let E=x.length/S;for(R=Me.createTypedArray(E,g),i=0;i= nearSq && distanceSq <= farSq) ? 1.0 : 0.0; gl_Position *= show; }`,`${i} ${o}`};function Ane(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",l="compressedAttributes",d=`in ${a} ${l};`,u="",f="";if(i){u+=`vec2 st; `;let h=s>1?`${l}.x`:l;f+=` st = czm_decompressTextureCoordinates(${h}); `}n&&o&&r?(u+=`vec3 normal; vec3 tangent; vec3 bitangent; `,f+=` czm_octDecode(${l}.${i?"yz":"xy"}, normal, tangent, bitangent); `):(n&&(u+=`vec3 normal; `,f+=` normal = czm_octDecode(${l}${s>1?`.${i?"y":"x"}`:""}); `),o&&(u+=`vec3 tangent; `,f+=` tangent = czm_octDecode(${l}.${i&&n?"z":"y"}); `),r&&(u+=`vec3 bitangent; `,f+=` bitangent = czm_octDecode(${l}.${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=Be.replaceMain(p,"czm_non_compressed_main");let y=`void main() { ${f} czm_non_compressed_main(); }`;return[d,u,p,y].join(` `)}function rwe(e){let t=Be.replaceMain(e,"czm_non_depth_clamp_main");return t+=`void main() { czm_non_depth_clamp_main(); gl_Position = czm_depthClamp(gl_Position);} `,t}function swe(e){let t=Be.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 Mne(e,t){let n=e.vertexAttributes;for(let i in n)if(n.hasOwnProperty(i)&&!c(t[i]))throw new L(`Appearance/Geometry mismatch. The appearance requires vertex shader attribute input '${i}', which was not computed as part of the Geometry. Use the appearance's vertexFormat property when constructing the geometry.`)}function awe(e,t){return function(){return e[t]}}var UY=Math.max(Ot.hardwareConcurrency-1,1),f5,cwe=new gi("combineGeometry");function lwe(e,t){let n,i,o,r,s=e._instanceIds;if(e._state===Zr.READY){n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances];let a=e._numberOfInstances=n.length,l=[],d=[];for(o=0;o0){let g=new Float64Array(f);for(h=[g.buffer],r=0;r0?(e._recomputeBoundingSpheres=!0,e._state=Zr.COMBINED):tX(e,t,Zr.FAILED,void 0)}).catch(function(f){tX(e,t,Zr.FAILED,f)})}}function dwe(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,l=0;for(a=0;a0?(e._recomputeBoundingSpheres=!0,e._state=Zr.COMBINED):tX(e,t,Zr.FAILED,void 0)}function uwe(e,t){let n=e._batchTableAttributeIndices.offset;if(!e._recomputeBoundingSpheres||!c(n)){e._recomputeBoundingSpheres=!1;return}let i,o=e._offsetInstanceExtend,r=e._instanceBoundingSpheres,s=r.length,a=e._tempBoundingSpheres;if(!c(a)){for(a=new Array(s),i=0;i0||ue.intersectPlane(g,cn.ORIGIN_ZX_PLANE)!==zt.INTERSECTING?l.push(g):(d.push(g),u.push(g))}let f=l[0],p=u[0],y=d[0];for(i=1;i0){if(mt.maximumVertexTextureImageUnits===0)throw new le("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!==Zr.COMPLETE&&this._state!==Zr.COMBINED&&(this.asynchronous?lwe(this,e):dwe(this,e)),this._state===Zr.COMBINED&&(mwe(this,e),kne(this,e),hwe(this,e)),!this.show||this._state!==Zr.COMPLETE)return;this._batchTableOffsetsUpdated||kne(this,e),this._recomputeBoundingSpheres&&uwe(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=c(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 l=this._appearance.isTranslucent();this._translucent!==l&&(this._translucent=l,o=!0),c(this._material)&&this._material.update(t);let d=n.closed&&l;o&&(this._createRenderStatesFunction??pwe)(this,t,n,d),r&&(this._createShaderProgramFunction??bwe)(this,e,n),(o||r)&&(this._createCommandsFunction??ywe)(this,n,i,l,d,this._colorCommands,this._pickCommands,e),(this._updateAndQueueCommandsFunction??gwe)(this,e,this._colorCommands,this._pickCommands,this.modelMatrix,this.cull,this.debugShowBoundingVolume,d)};var xwe=new ue,_we=new ue;function Kne(e,t,n){if(n===$t.TOP){let i=ue.clone(e,xwe),o=ue.clone(e,_we);o.center=m.add(o.center,t,o.center),e=ue.union(i,o,e)}else n===$t.ALL&&(e.center=m.add(e.center,t,e.center));return e}function Twe(e,t,n){return function(){let i=e.getBatchedAttribute(t,n),o=e.attributes[n],r=o.componentsPerAttribute,s=q.createTypedArray(o.componentDatatype,r);return c(i.constructor.pack)?i.constructor.pack(i,s,0):s[0]=i,s}}function Swe(e,t,n,i,o){return function(r){if(!c(r)||!c(r.length)||r.length<1||r.length>4)throw new L("value must be and array with length between 1 and 4.");let s=Bne(r);e.setBatchedAttribute(t,n,s),o==="offset"&&(i._recomputeBoundingSpheres=!0,i._batchTableOffsetsUpdated=!1)}}var Cwe=new m;function Vwe(e,t,n){t.boundingSphere={get:function(){let i=e._instanceBoundingSpheres[n];if(c(i)){i=i.clone();let o=e.modelMatrix,r=t.offset;c(r)&&Kne(i,m.fromArray(r.get(),0,Cwe),e._offsetInstanceExtend[n]),c(o)&&(i=ue.transform(i,o))}return i}},t.boundingSphereCV={get:function(){return e._instanceBoundingSpheresCV[n]}}}function Lwe(e,t,n){t.pickId={get:function(){return e._pickIds[n]}}}Rr.prototype.getGeometryInstanceAttributes=function(e){if(!c(e))throw new L("id is required");if(!c(this._batchTable))throw new L("must call update before calling getGeometryInstanceAttributes");let t=this._perInstanceAttributeCache.get(e);if(c(t))return t;let n=-1,i=this._lastPerInstanceAttributeIndex,o=this._instanceIds,r=o.length;for(let d=0;d4)throw new L("options.componentsPerAttribute must be between 1 and 4.");if(!c(e.value))throw new L("options.value is required.");this.componentDatatype=e.componentDatatype,this.componentsPerAttribute=e.componentsPerAttribute,this.normalize=e.normalize??!1,this.value=e.value}var dc=Zwe;var _7t=_(T(),1),hC=`#ifdef TEXTURE_COORDINATES #ifdef SPHERICAL in vec4 v_sphericalExtents; #else // SPHERICAL in vec2 v_inversePlaneExtents; in vec4 v_westPlane; in vec4 v_southPlane; #endif // SPHERICAL in vec3 v_uvMinAndSphericalLongitudeRotation; in vec3 v_uMaxAndInverseDistance; in vec3 v_vMaxAndInverseDistance; #endif // TEXTURE_COORDINATES #ifdef PER_INSTANCE_COLOR in vec4 v_color; #endif #ifdef NORMAL_EC vec3 getEyeCoordinate3FromWindowCoordinate(vec2 fragCoord, float logDepthOrDepth) { vec4 eyeCoordinate = czm_windowToEyeCoordinates(fragCoord, logDepthOrDepth); return eyeCoordinate.xyz / eyeCoordinate.w; } vec3 vectorFromOffset(vec4 eyeCoordinate, vec2 positiveOffset) { vec2 glFragCoordXY = gl_FragCoord.xy; float upOrRightLogDepth = czm_unpackDepth(texture(czm_globeDepthTexture, (glFragCoordXY + positiveOffset) / czm_viewport.zw)); float downOrLeftLogDepth = czm_unpackDepth(texture(czm_globeDepthTexture, (glFragCoordXY - positiveOffset) / czm_viewport.zw)); bvec2 upOrRightInBounds = lessThan(glFragCoordXY + positiveOffset, czm_viewport.zw); float useUpOrRight = float(upOrRightLogDepth > 0.0 && upOrRightInBounds.x && upOrRightInBounds.y); float useDownOrLeft = float(useUpOrRight == 0.0); vec3 upOrRightEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY + positiveOffset, upOrRightLogDepth); vec3 downOrLeftEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY - positiveOffset, downOrLeftLogDepth); return (upOrRightEC - (eyeCoordinate.xyz / eyeCoordinate.w)) * useUpOrRight + ((eyeCoordinate.xyz / eyeCoordinate.w) - downOrLeftEC) * useDownOrLeft; } #endif // NORMAL_EC void main(void) { #ifdef REQUIRES_EC float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw)); vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); #endif #ifdef REQUIRES_WC vec4 worldCoordinate4 = czm_inverseView * eyeCoordinate; vec3 worldCoordinate = worldCoordinate4.xyz / worldCoordinate4.w; #endif #ifdef TEXTURE_COORDINATES vec2 uv; #ifdef SPHERICAL 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 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 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; czm_writeDepthClamp(); } #else // CULL_FRAGMENTS out_FragColor.a = 1.0; #endif // CULL_FRAGMENTS #else // PICK #ifdef CULL_FRAGMENTS 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 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 out_FragColor.rgb *= out_FragColor.a; #else // PER_INSTANCE_COLOR 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 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 out_FragColor.rgb *= out_FragColor.a; #endif // PER_INSTANCE_COLOR czm_writeDepthClamp(); #endif // PICK } `;function Zu(e,t,n){C.typeOf.bool("extentsCulling",e),C.typeOf.bool("planarExtents",t),C.typeOf.object("appearance",n),this._projectionExtentDefines={eastMostYhighDefine:"",eastMostYlowDefine:"",westMostYhighDefine:"",westMostYlowDefine:""};let i=new DY;i.requiresTextureCoordinates=e,i.requiresEC=!n.flat;let o=new DY;if(o.requiresTextureCoordinates=e,n instanceof an)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}Zu.prototype.createFragmentShader=function(e){C.typeOf.bool("columbusView2D",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 an&&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 an||(o=t.material.shaderSource),new Be({defines:i,sources:[o,hC]})};Zu.prototype.createPickFragmentShader=function(e){C.typeOf.bool("columbusView2D",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 Be({defines:n,sources:[hC],pickColorQualifier:"in"})};Zu.prototype.createVertexShader=function(e,t,n,i){return C.defined("defines",e),C.typeOf.string("vertexShaderSource",t),C.typeOf.bool("columbusView2D",n),C.defined("mapProjection",i),nie(this._colorShaderDependencies,this._planarExtents,n,e,t,this._appearance,i,this._projectionExtentDefines)};Zu.prototype.createPickVertexShader=function(e,t,n,i){return C.defined("defines",e),C.typeOf.string("vertexShaderSource",t),C.typeOf.bool("columbusView2D",n),C.defined("mapProjection",i),nie(this._pickShaderDependencies,this._planarExtents,n,e,t,void 0,i,this._projectionExtentDefines)};var Jne=new m,Qne=new pe,jne={high:0,low:0};function nie(e,t,n,i,o,r,s,a){let l=i.slice();if(a.eastMostYhighDefine===""){let d=Qne;d.longitude=w.PI,d.latitude=0,d.height=0;let u=s.project(d,Jne),f=Bn.encode(u.x,jne);a.eastMostYhighDefine=`EAST_MOST_X_HIGH ${f.high.toFixed(`${f.high}`.length+1)}`,a.eastMostYlowDefine=`EAST_MOST_X_LOW ${f.low.toFixed(`${f.low}`.length+1)}`;let p=Qne;p.longitude=-w.PI,p.latitude=0,p.height=0;let y=s.project(p,Jne);f=Bn.encode(y.x,jne),a.westMostYhighDefine=`WEST_MOST_X_HIGH ${f.high.toFixed(`${f.high}`.length+1)}`,a.westMostYlowDefine=`WEST_MOST_X_LOW ${f.low.toFixed(`${f.low}`.length+1)}`}return n&&(l.push(a.eastMostYhighDefine),l.push(a.eastMostYlowDefine),l.push(a.westMostYhighDefine),l.push(a.westMostYlowDefine)),c(r)&&r instanceof an&&l.push("PER_INSTANCE_COLOR"),e.requiresTextureCoordinates&&(l.push("TEXTURE_COORDINATES"),t||n||l.push("SPHERICAL"),n&&l.push("COLUMBUS_VIEW_2D")),new Be({defines:l,sources:[o]})}function DY(){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(DY.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 qne(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 Rwe=[new D,new D,new D,new D];function iie(e,t){let n=Rwe,i=D.unpack(t,0,n[0]),o=D.unpack(t,2,n[1]),r=D.unpack(t,4,n[2]);e.uMaxVmax=new dc({componentDatatype:q.FLOAT,componentsPerAttribute:4,normalize:!1,value:[o.x,o.y,r.x,r.y]});let s=1/qne(i,o,r),a=1/qne(i,r,o);e.uvMinAndExtents=new dc({componentDatatype:q.FLOAT,componentsPerAttribute:4,normalize:!1,value:[i.x,i.y,s,a]})}var oie=new pe,rie=new m,Gwe=new m,Ewe=new m,h5={high:0,low:0};function sie(e,t,n){let i=oie;i.height=0,i.longitude=e.west,i.latitude=e.south;let o=t.project(i,rie);i.latitude=e.north;let r=t.project(i,Gwe);i.longitude=e.east,i.latitude=e.south;let s=t.project(i,Ewe),a=[0,0,0,0],l=[0,0,0,0],d=Bn.encode(o.x,h5);a[0]=d.high,l[0]=d.low,d=Bn.encode(o.y,h5),a[1]=d.high,l[1]=d.low,d=Bn.encode(r.y,h5),a[2]=d.high,l[2]=d.low,d=Bn.encode(s.x,h5),a[3]=d.high,l[3]=d.low,n.planes2D_HIGH=new dc({componentDatatype:q.FLOAT,componentsPerAttribute:4,normalize:!1,value:a}),n.planes2D_LOW=new dc({componentDatatype:q.FLOAT,componentsPerAttribute:4,normalize:!1,value:l})}var Xwe=new M,Iwe=new M,$ne=new m,Wwe=new pe,wwe=[new pe,new pe,new pe,new pe,new pe,new pe,new pe,new pe];function Pwe(e,t,n,i,o,r){let s=de.center(e,Wwe);s.height=n;let a=pe.toCartesian(s,t,$ne),l=wt.eastNorthUpToFixedFrame(a,t,Xwe),d=M.inverse(l,Iwe),u=e.west,f=e.east,p=e.north,y=e.south,h=wwe;h[0].latitude=y,h[0].longitude=u,h[1].latitude=p,h[1].longitude=u,h[2].latitude=p,h[2].longitude=f,h[3].latitude=y,h[3].longitude=f;let g=(u+f)*.5,x=(p+y)*.5;h[4].latitude=y,h[4].longitude=g,h[5].latitude=p,h[5].longitude=g,h[6].latitude=x,h[6].longitude=u,h[7].latitude=x,h[7].longitude=f;let S=Number.POSITIVE_INFINITY,V=Number.NEGATIVE_INFINITY,Z=Number.POSITIVE_INFINITY,R=Number.NEGATIVE_INFINITY;for(let P=0;P<8;P++){h[P].height=n;let F=pe.toCartesian(h[P],t,$ne);M.multiplyByPoint(d,F,F),F.z=0,S=Math.min(S,F.x),V=Math.max(V,F.x),Z=Math.min(Z,F.y),R=Math.max(R,F.y)}let E=i;E.x=S,E.y=Z,E.z=0,M.multiplyByPoint(l,E,E);let I=o;I.x=V,I.y=Z,I.z=0,M.multiplyByPoint(l,I,I),m.subtract(I,E,o);let v=r;v.x=S,v.y=R,v.z=0,M.multiplyByPoint(l,v,v),m.subtract(v,E,r)}var vwe=new m,Fwe=new m,Awe=new Bn;Zu.getPlanarTextureCoordinateAttributes=function(e,t,n,i,o){C.typeOf.object("boundingRectangle",e),C.defined("textureCoordinateRotationPoints",t),C.typeOf.object("ellipsoid",n),C.typeOf.object("projection",i);let r=rie,s=vwe,a=Fwe;Pwe(e,n,o??0,r,s,a);let l={};iie(l,t);let d=Bn.fromCartesian(r,Awe);return l.southWest_HIGH=new dc({componentDatatype:q.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(d.high,[0,0,0])}),l.southWest_LOW=new dc({componentDatatype:q.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(d.low,[0,0,0])}),l.eastward=new dc({componentDatatype:q.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(s,[0,0,0])}),l.northward=new dc({componentDatatype:q.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(a,[0,0,0])}),sie(e,i,l),l};var Mwe=new m;function eie(e,t,n,i){let o=oie;o.latitude=e,o.longitude=t,o.height=0;let r=pe.toCartesian(o,n,Mwe),s=Math.sqrt(r.x*r.x+r.y*r.y),a=w.fastApproximateAtan2(s,r.z),l=w.fastApproximateAtan2(r.x,r.y);return i.x=a,i.y=l,i}var tie=new D;Zu.getSphericalExtentGeometryInstanceAttributes=function(e,t,n,i){C.typeOf.object("boundingRectangle",e),C.defined("textureCoordinateRotationPoints",t),C.typeOf.object("ellipsoid",n),C.typeOf.object("projection",i);let o=eie(e.south,e.west,n,tie),r=o.x,s=o.y,a=eie(e.north,e.east,n,tie),l=a.x,d=a.y,u=0;s>d&&(u=w.PI-s,s=-w.PI,d+=u),r-=w.EPSILON5,s-=w.EPSILON5,l+=w.EPSILON5,d+=w.EPSILON5;let f=1/(d-s),p=1/(l-r),y={sphericalExtents:new dc({componentDatatype:q.FLOAT,componentsPerAttribute:4,normalize:!1,value:[r,s,p,f]}),longitudeRotation:new dc({componentDatatype:q.FLOAT,componentsPerAttribute:1,normalize:!1,value:[u]})};return iie(y,t),sie(e,i,y),y};Zu.hasAttributesForTextureCoordinatePlanes=function(e){return c(e.southWest_HIGH)&&c(e.southWest_LOW)&&c(e.northward)&&c(e.eastward)&&c(e.planes2D_HIGH)&&c(e.planes2D_LOW)&&c(e.uMaxVmax)&&c(e.uvMinAndExtents)};Zu.hasAttributesForSphericalExtents=function(e){return c(e.sphericalExtents)&&c(e.longitudeRotation)&&c(e.planes2D_HIGH)&&c(e.planes2D_LOW)&&c(e.uMaxVmax)&&c(e.uvMinAndExtents)};function Nwe(e){return Math.max(e.width,e.height)>Zu.MAX_WIDTH_FOR_PLANAR_EXTENTS}Zu.shouldUseSphericalCoordinates=function(e){return C.typeOf.object("rectangle",e),Nwe(e)};Zu.MAX_WIDTH_FOR_PLANAR_EXTENTS=w.toRadians(1);var pd=Zu;var z7t=_(T(),1);var k7t=_(T(),1);var kwe={NEVER:oe.NEVER,LESS:oe.LESS,EQUAL:oe.EQUAL,LESS_OR_EQUAL:oe.LEQUAL,GREATER:oe.GREATER,NOT_EQUAL:oe.NOTEQUAL,GREATER_OR_EQUAL:oe.GEQUAL,ALWAYS:oe.ALWAYS},On=Object.freeze(kwe);var D7t=_(T(),1);var Uwe={ZERO:oe.ZERO,KEEP:oe.KEEP,REPLACE:oe.REPLACE,INCREMENT:oe.INCR,DECREMENT:oe.DECR,INVERT:oe.INVERT,INCREMENT_WRAP:oe.INCR_WRAP,DECREMENT_WRAP:oe.DECR_WRAP},ft=Object.freeze(Uwe);var p5={CESIUM_3D_TILE_MASK:128,SKIP_LOD_MASK:112,SKIP_LOD_BIT_SHIFT:4,CLASSIFICATION_MASK:15};p5.setCesium3DTileBit=function(){return{enabled:!0,frontFunction:On.ALWAYS,frontOperation:{fail:ft.KEEP,zFail:ft.KEEP,zPass:ft.REPLACE},backFunction:On.ALWAYS,backOperation:{fail:ft.KEEP,zFail:ft.KEEP,zPass:ft.REPLACE},reference:p5.CESIUM_3D_TILE_MASK,mask:p5.CESIUM_3D_TILE_MASK}};var kt=Object.freeze(p5);function wx(e){e=e??z.EMPTY_OBJECT;let t=e.geometryInstances;this.geometryInstances=t,this.show=e.show??!0,this.classificationType=e.classificationType??Un.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(wx.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}}});wx.isSupported=function(e){return e.context.stencilBuffer};function pC(e,t){let n=t?On.EQUAL:On.ALWAYS;return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:e,frontFunction:n,frontOperation:{fail:ft.KEEP,zFail:ft.DECREMENT_WRAP,zPass:ft.KEEP},backFunction:n,backOperation:{fail:ft.KEEP,zFail:ft.INCREMENT_WRAP,zPass:ft.KEEP},reference:kt.CESIUM_3D_TILE_MASK,mask:kt.CESIUM_3D_TILE_MASK},stencilMask:kt.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:lc.LESS_OR_EQUAL},depthMask:!1}}function YY(e){return{stencilTest:{enabled:e,frontFunction:On.NOT_EQUAL,frontOperation:{fail:ft.ZERO,zFail:ft.ZERO,zPass:ft.ZERO},backFunction:On.NOT_EQUAL,backOperation:{fail:ft.ZERO,zFail:ft.ZERO,zPass:ft.ZERO},reference:0,mask:kt.CLASSIFICATION_MASK},stencilMask:kt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:un.PRE_MULTIPLIED_ALPHA_BLEND}}var Owe={stencilTest:{enabled:!0,frontFunction:On.NOT_EQUAL,frontOperation:{fail:ft.ZERO,zFail:ft.ZERO,zPass:ft.ZERO},backFunction:On.NOT_EQUAL,backOperation:{fail:ft.ZERO,zFail:ft.ZERO,zPass:ft.ZERO},reference:0,mask:kt.CLASSIFICATION_MASK},stencilMask:kt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};function Dwe(e,t,n,i){if(c(e._rsStencilDepthPass))return;let o=!e.debugShowShadowVolume;e._rsStencilDepthPass=Oe.fromCache(pC(o,!1)),e._rsStencilDepthPass3DTiles=Oe.fromCache(pC(o,!0)),e._rsColorPass=Oe.fromCache(YY(o,!1)),e._rsPickPass=Oe.fromCache(Owe)}function Bwe(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=Be.replaceMain(s,"czm_non_compressed_main");let a=`void main() { ${r} czm_non_compressed_main(); }`;return[i,o,s,a].join(` `)}}function Ywe(e,t){let n=t.context,i=e._primitive,o=jE;o=e._primitive._batchTable.getVertexShaderCallback()(o),o=In._appendDistanceDisplayConditionToShader(i,o),o=In._modifyShaderPosition(e,o,t.scene3DOnly),o=In._updateColorAttribute(i,o);let r=e._hasPlanarExtentsAttributes,s=r||e._hasSphericalExtentsAttribute;e._extruded&&(o=Bwe(i,o));let a=e._extruded?"EXTRUDED_GEOMETRY":"",l=new Be({defines:[a],sources:[o]}),d=new Be({sources:[Q0]}),u=e._primitive._attributeLocations,f=new pd(s,r,e.appearance);if(e._spStencil=tn.replaceCache({context:n,shaderProgram:e._spStencil,vertexShaderSource:l,fragmentShaderSource:d,attributeLocations:u}),e._primitive.allowPicking){let h=Be.createPickVertexShaderSource(o);h=In._appendShowToShader(i,h),h=In._updatePickColorAttribute(h);let g=f.createPickFragmentShader(!1),x=f.createPickVertexShader([a],h,!1,t.mapProjection);if(e._spPick=tn.replaceCache({context:n,shaderProgram:e._spPick,vertexShaderSource:x,fragmentShaderSource:g,attributeLocations:u}),s){let S=n.shaderCache.getDerivedShaderProgram(e._spPick,"2dPick");if(!c(S)){let V=f.createPickFragmentShader(!0),Z=f.createPickVertexShader([a],h,!0,t.mapProjection);S=n.shaderCache.createDerivedShaderProgram(e._spPick,"2dPick",{vertexShaderSource:Z,fragmentShaderSource:V,attributeLocations:u})}e._spPick2D=S}}else e._spPick=tn.fromCache({context:n,vertexShaderSource:l,fragmentShaderSource:d,attributeLocations:u});o=In._appendShowToShader(i,o),l=new Be({defines:[a],sources:[o]}),e._sp=tn.replaceCache({context:n,shaderProgram:e._sp,vertexShaderSource:l,fragmentShaderSource:d,attributeLocations:u});let p=f.createFragmentShader(!1),y=f.createVertexShader([a],o,!1,t.mapProjection);if(e._spColor=tn.replaceCache({context:n,shaderProgram:e._spColor,vertexShaderSource:y,fragmentShaderSource:p,attributeLocations:u}),s){let h=n.shaderCache.getDerivedShaderProgram(e._spColor,"2dColor");if(!c(h)){let g=f.createFragmentShader(!0),x=f.createVertexShader([a],o,!0,t.mapProjection);h=n.shaderCache.createDerivedShaderProgram(e._spColor,"2dColor",{vertexShaderSource:x,fragmentShaderSource:g,attributeLocations:u})}e._spColor2D=h}}function Hwe(e,t){let n=e._primitive,i=n._va.length*2;t.length=i;let o,r,s,a=0,l=n._batchTable.getUniformMapCallback()(e._uniformMap),d=e._needs2DShader;for(o=0;o0&&(l=o[0].attributes,p=pd.hasAttributesForSphericalExtents(l),y=pd.hasAttributesForTextureCoordinatePlanes(l),f=l.color),s=0;s{c(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};wx.prototype.getGeometryInstanceAttributes=function(e){if(!c(this._primitive))throw new L("must call update before calling getGeometryInstanceAttributes");return this._primitive.getGeometryInstanceAttributes(e)};wx.prototype.isDestroyed=function(){return!1};wx.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,he(this)};var bC=wx;var Qwe={u_globeMinimumAltitude:function(){return 55e3}};function Xl(e){e=e??z.EMPTY_OBJECT;let t=e.appearance,n=e.geometryInstances;if(!c(t)&&c(n)){let o=Array.isArray(n)?n:[n],r=o.length;for(let s=0;s{!this._ready&&c(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};Xl.prototype.getBoundingSphere=function(e){let t=this._boundingSpheresKeys.indexOf(e);if(t!==-1)return this._boundingSpheres[t]};Xl.prototype.getGeometryInstanceAttributes=function(e){if(!c(this._primitive))throw new L("must call update before calling getGeometryInstanceAttributes");return this._primitive.getGeometryInstanceAttributes(e)};Xl.prototype.isDestroyed=function(){return!1};Xl.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};Xl._supportsMaterials=function(e){return e.depthTexture};Xl.supportsMaterials=function(e){return C.typeOf.object("scene",e),Xl._supportsMaterials(e.frameState.context)};var kc=Xl;var H6t=_(T(),1);function yC(){L.throwInstantiationError()}Object.defineProperties(yC.prototype,{isConstant:{get:L.throwInstantiationError},definitionChanged:{get:L.throwInstantiationError}});yC.prototype.getType=L.throwInstantiationError;yC.prototype.getValue=L.throwInstantiationError;yC.prototype.equals=L.throwInstantiationError;var rPe=new ee;yC.getValue=function(e,t,n){let i;return c(e)||(e=ee.now(rPe)),c(t)&&(i=t.getType(e),c(i))?((!c(n)||n.type!==i)&&(n=zi.fromType(i)),t.getValue(e,n.uniforms),n):((!c(n)||n.type!==zi.ColorType)&&(n=zi.fromType(zi.ColorType)),Y.clone(Y.WHITE,n.uniforms.color),n)};var qo=yC;function Px(e,t,n){C.defined("geometryUpdater",e),C.defined("primitives",t),C.defined("orderedGroundPrimitives",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}Px.prototype._isHidden=function(e,t,n){return!e.isShowing||!e.isAvailable(n)||!J.getValueOrDefault(t.show,n,!0)};Px.prototype._setOptions=L.throwInstantiationError;Px.prototype.update=function(e){C.defined("time",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),l=this._options;if(!c(s.fill)||s.fill.getValue(e)){let d=t.fillMaterialProperty,u=d instanceof Ut,f,p=t._getIsClosed(l);if(u)f=new an({closed:p,flat:n&&!t._supportsMaterialsforEntitiesOnTerrain});else{let y=qo.getValue(e,d,this._material);this._material=y,f=new so({material:y,translucent:y.isTranslucent(),closed:p})}if(n)l.vertexFormat=an.VERTEX_FORMAT,this._primitive=o.add(new kc({geometryInstances:this._geometryUpdater.createFillGeometryInstance(e),appearance:f,asynchronous:!1,shadows:a,classificationType:this._geometryUpdater.classificationTypeProperty.getValue(e)}),J.getValueOrUndefined(this._geometryUpdater.zIndex,e));else{l.vertexFormat=f.vertexFormat;let y=this._geometryUpdater.createFillGeometryInstance(e);u&&(f.translucent=y.attributes.color.value[3]!==255),this._primitive=i.add(new In({geometryInstances:y,appearance:f,asynchronous:!1,shadows:a}))}}if(!n&&c(s.outline)&&s.outline.getValue(e)){let d=this._geometryUpdater.createOutlineGeometryInstance(e),u=J.getValueOrDefault(s.outlineWidth,e,1);this._outlinePrimitive=i.add(new In({geometryInstances:d,appearance:new an({flat:!0,translucent:d.attributes.color.value[3]!==255,renderState:{lineWidth:t._scene.clampLineWidth(u)}}),asynchronous:!1,shadows:a}))}};Px.prototype.getBoundingSphere=function(e){if(!c(e))throw new L("result is required.");let t=this._entity,n=this._primitive,i=this._outlinePrimitive,o;return c(n)&&n.show&&n.ready&&(o=n.getGeometryInstanceAttributes(t),c(o)&&c(o.boundingSphere))?(ue.clone(o.boundingSphere,e),ut.DONE):c(i)&&i.show&&i.ready&&(o=i.getGeometryInstanceAttributes(t),c(o)&&c(o.boundingSphere))?(ue.clone(o.boundingSphere,e),ut.DONE):c(n)&&!n.ready||c(i)&&!i.ready?ut.PENDING:ut.FAILED};Px.prototype.isDestroyed=function(){return!1};Px.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),he(this)};var ii=Px;var orn=_(T(),1);var uqt=_(T(),1);var mie={};function nX(e,t){if(!c(e))throw new L("identifier is required.");c(mie[e])||(mie[e]=!0,console.warn(t??e))}nX.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.";nX.geometryZIndex="Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored";nX.geometryHeightReference="Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored";nX.geometryExtrudedHeightReference="Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored";var ht=nX;var Uon=_(T(),1);var fqt=_(T(),1),sPe={AUTODETECT:0,ENU:1,INERTIAL:2,VELOCITY:3},vp=Object.freeze(sPe);var Sen=_(T(),1);var d$t=_(T(),1);var pqt=_(T(),1),aPe={NONE:0,GEODESIC:1,RHUMB:2},Kt=Object.freeze(aPe);var _qt=_(T(),1);var fie=w.EPSILON10;function cPe(e,t,n,i){if(C.defined("equalsEpsilon",t),!c(e))return;n=n??!1;let o=c(i),r=e.length;if(r<2)return e;let s,a=e[0],l,d,u=0,f=-1;for(s=1;sw.EPSILON12);let G=N*(t*t-n*n)/(n*n),X=1+G*(4096+G*(G*(320-175*G)-768))/16384,W=G*(256+G*(G*(74-47*G)-128))/1024,A=b*b,k=W*F*(b+W*(P*(2*A-1)-W*b*(4*F*F-3)*(4*A-3)/6)/4),B=n*X*(v-k),O=Math.atan2(y*I,x-V*E),H=Math.atan2(f*I,x*E-V);e._distance=B,e._startHeading=O,e._endHeading=H,e._uSquared=G}var mPe=new m,KY=new m;function pie(e,t,n,i){let o=m.normalize(i.cartographicToCartesian(t,KY),mPe),r=m.normalize(i.cartographicToCartesian(n,KY),KY);C.typeOf.number.greaterThanOrEquals("value",Math.abs(Math.abs(m.angleBetween(o,r))-Math.PI),.0125),uPe(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude),e._start=pe.clone(t,e._start),e._end=pe.clone(n,e._end),e._start.height=0,e._end.height=0,lPe(e)}function iX(e,t,n){let i=n??re.default;this._ellipsoid=i,this._start=new pe,this._end=new pe,this._constants={},this._startHeading=void 0,this._endHeading=void 0,this._distance=void 0,this._uSquared=void 0,c(e)&&c(t)&&pie(this,e,t,i)}Object.defineProperties(iX.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return C.defined("distance",this._distance),this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},startHeading:{get:function(){return C.defined("distance",this._distance),this._startHeading}},endHeading:{get:function(){return C.defined("distance",this._distance),this._endHeading}}});iX.prototype.setEndPoints=function(e,t){C.defined("start",e),C.defined("end",t),pie(this,e,t,this._ellipsoid)};iX.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(this._distance*e,t)};iX.prototype.interpolateUsingSurfaceDistance=function(e,t){C.defined("distance",this._distance);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),l=Math.sin(4*i),d=Math.sin(6*i),u=Math.sin(8*i),f=i*i,p=i*f,y=n.u8Over256,h=n.u2Over4,g=n.u6Over64,x=n.u4Over16,S=2*p*y*o/3+i*(1-h+7*x/4-15*g/4+579*y/64-(x-15*g/4+187*y/16)*o-(5*g/4-115*y/16)*r-29*y*s/16)+(h/2-x+71*g/32-85*y/16)*a+(5*x/16-5*g/4+383*y/96)*l-f*((g-11*y/2)*a+5*y*l/2)+(29*g/96-29*y/16)*d+539*y*u/1536,V=Math.asin(Math.sin(S)*n.cosineAlpha),Z=Math.atan(n.a/n.b*Math.tan(V));S=S-n.sigma;let R=Math.cos(2*n.sigma+S),E=Math.sin(S),I=Math.cos(S),v=n.cosineU*I,P=n.sineU*E,N=Math.atan2(E*n.sineHeading,v-P*n.cosineHeading)-hie(n.f,n.sineAlpha,n.cosineSquaredAlpha,S,E,I,R);return c(t)?(t.longitude=this._start.longitude+N,t.latitude=Z,t.height=0,t):new pe(this._start.longitude+N,Z,0)};var Fp=iX;var Aqt=_(T(),1);function QY(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,l=a*i,d=n,u=Math.sin(2*d),f=Math.sin(4*d),p=Math.sin(6*d),y=Math.sin(8*d),h=Math.sin(10*d),g=Math.sin(12*d);return t*((1-i/4-3*o/64-5*r/256-175*s/16384-441*a/65536-4851*l/1048576)*d-(3*i/8+3*o/32+45*r/1024+105*s/4096+2205*a/131072+6237*l/524288)*u+(15*o/256+45*r/1024+525*s/16384+1575*a/65536+155925*l/8388608)*f-(35*r/3072+175*s/12288+3675*a/262144+13475*l/1048576)*p+(315*s/131072+2205*a/524288+43659*l/8388608)*y-(693*a/1310720+6237*l/5242880)*h+1001*l/8388608*g)}function fPe(e,t,n){let i=e/n;if(t===0)return i;let o=i*i,r=o*i,s=r*i,a=t,l=a*a,d=l*l,u=d*l,f=u*l,p=f*l,y=p*l,h=Math.sin(2*i),g=Math.cos(2*i),x=Math.sin(4*i),S=Math.cos(4*i),V=Math.sin(6*i),Z=Math.cos(6*i),R=Math.sin(8*i),E=Math.cos(8*i),I=Math.sin(10*i),v=Math.cos(10*i),P=Math.sin(12*i);return i+i*l/4+7*i*d/64+15*i*u/256+579*i*f/16384+1515*i*p/65536+16837*i*y/1048576+(3*i*d/16+45*i*u/256-i*(32*o-561)*f/4096-i*(232*o-1677)*p/16384+i*(399985-90560*o+512*s)*y/5242880)*g+(21*i*u/256+483*i*f/4096-i*(224*o-1969)*p/16384-i*(33152*o-112599)*y/1048576)*S+(151*i*f/4096+4681*i*p/65536+1479*i*y/16384-453*r*y/32768)*Z+(1097*i*p/65536+42783*i*y/1048576)*E+8011*i*y/1048576*v+(3*l/8+3*d/16+213*u/2048-3*o*u/64+255*f/4096-33*o*f/512+20861*p/524288-33*o*p/512+s*p/1024+28273*y/1048576-471*o*y/8192+9*s*y/4096)*h+(21*d/256+21*u/256+533*f/8192-21*o*f/512+197*p/4096-315*o*p/4096+584039*y/16777216-12517*o*y/131072+7*s*y/2048)*x+(151*u/6144+151*f/4096+5019*p/131072-453*o*p/16384+26965*y/786432-8607*o*y/131072)*V+(1097*f/131072+1097*p/65536+225797*y/10485760-1097*o*y/65536)*R+(8011*p/2621440+8011*y/1048576)*I+293393*y/251658240*P}function gC(e,t){if(e===0)return Math.log(Math.tan(.5*(w.PI_OVER_TWO+t)));let n=e*Math.sin(t);return Math.log(Math.tan(.5*(w.PI_OVER_TWO+t)))-e/2*Math.log((1+n)/(1-n))}function hPe(e,t,n,i,o){let r=gC(e._ellipticity,n),s=gC(e._ellipticity,o);return Math.atan2(w.negativePiToPi(i-t),s-r)}function pPe(e,t,n,i,o,r,s){let a=e._heading,l=r-i,d=0;if(w.equalsEpsilon(Math.abs(a),w.PI_OVER_TWO,w.EPSILON8))if(t===n)d=t*Math.cos(o)*w.negativePiToPi(l);else{let u=Math.sin(o);d=t*Math.cos(o)*w.negativePiToPi(l)/Math.sqrt(1-e._ellipticitySquared*u*u)}else{let u=QY(e._ellipticity,t,o);d=(QY(e._ellipticity,t,s)-u)/Math.cos(a)}return Math.abs(d)}var bPe=new m,JY=new m;function bie(e,t,n,i){let o=m.normalize(i.cartographicToCartesian(t,JY),bPe),r=m.normalize(i.cartographicToCartesian(n,JY),JY);C.typeOf.number.greaterThanOrEquals("value",Math.abs(Math.abs(m.angleBetween(o,r))-Math.PI),.0125);let s=i.maximumRadius,a=i.minimumRadius,l=s*s,d=a*a;e._ellipticitySquared=(l-d)/l,e._ellipticity=Math.sqrt(e._ellipticitySquared),e._start=pe.clone(t,e._start),e._start.height=0,e._end=pe.clone(n,e._end),e._end.height=0,e._heading=hPe(e,t.longitude,t.latitude,n.longitude,n.latitude),e._distance=pPe(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude)}function yie(e,t,n,i,o,r){if(n===0)return pe.clone(e,r);let s=o*o,a,l,d;if(Math.abs(w.PI_OVER_TWO-Math.abs(t))>w.EPSILON8){let u=QY(o,i,e.latitude),f=n*Math.cos(t),p=u+f;if(l=fPe(p,o,i),Math.abs(t)0?a=w.negativePiToPi(e.longitude+d):a=w.negativePiToPi(e.longitude-d)}return c(r)?(r.longitude=a,r.latitude=l,r.height=0,r):new pe(a,l,0)}function Ap(e,t,n){let i=n??re.default;this._ellipsoid=i,this._start=new pe,this._end=new pe,this._heading=void 0,this._distance=void 0,this._ellipticity=void 0,this._ellipticitySquared=void 0,c(e)&&c(t)&&bie(this,e,t,i)}Object.defineProperties(Ap.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return C.defined("distance",this._distance),this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},heading:{get:function(){return C.defined("distance",this._distance),this._heading}}});Ap.fromStartHeadingDistance=function(e,t,n,i,o){C.defined("start",e),C.defined("heading",t),C.defined("distance",n),C.typeOf.number.greaterThan("distance",n,0);let r=i??re.default,s=r.maximumRadius,a=r.minimumRadius,l=s*s,d=a*a,u=Math.sqrt((l-d)/l);t=w.negativePiToPi(t);let f=yie(e,t,n,r.maximumRadius,u);return!c(o)||c(i)&&!i.equals(o.ellipsoid)?new Ap(e,f,r):(o.setEndPoints(e,f),o)};Ap.prototype.setEndPoints=function(e,t){C.defined("start",e),C.defined("end",t),bie(this,e,t,this._ellipsoid)};Ap.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(e*this._distance,t)};Ap.prototype.interpolateUsingSurfaceDistance=function(e,t){if(C.typeOf.number("distance",e),!c(this._distance)||this._distance===0)throw new L("EllipsoidRhumbLine must have distinct start and end set.");return yie(this._start,this._heading,e,this._ellipsoid.maximumRadius,this._ellipticity,t)};Ap.prototype.findIntersectionWithLongitude=function(e,t){if(C.typeOf.number("intersectionLongitude",e),!c(this._distance)||this._distance===0)throw new L("EllipsoidRhumbLine must have distinct start and end set.");let n=this._ellipticity,i=this._heading,o=Math.abs(i),r=this._start;if(e=w.negativePiToPi(e),w.equalsEpsilon(Math.abs(e),Math.PI,w.EPSILON14)&&(e=w.sign(r.longitude)*Math.PI),c(t)||(t=new pe),Math.abs(w.PI_OVER_TWO-o)<=w.EPSILON8)return t.longitude=e,t.latitude=r.latitude,t.height=0,t;if(w.equalsEpsilon(Math.abs(w.PI_OVER_TWO-o),w.PI_OVER_TWO,w.EPSILON8))return w.equalsEpsilon(e,r.longitude,w.EPSILON12)?void 0:(t.longitude=e,t.latitude=w.PI_OVER_TWO*w.sign(w.PI_OVER_TWO-i),t.height=0,t);let s=r.latitude,a=n*Math.sin(s),l=Math.tan(.5*(w.PI_OVER_TWO+s))*Math.exp((e-r.longitude)/Math.tan(i)),d=(1+a)/(1-a),u=r.latitude,f;do{f=u;let p=n*Math.sin(f),y=(1+p)/(1-p);u=2*Math.atan(l*Math.pow(y/d,n/2))-w.PI_OVER_TWO}while(!w.equalsEpsilon(u,f,w.EPSILON12));return t.longitude=e,t.latitude=u,t.height=0,t};Ap.prototype.findIntersectionWithLatitude=function(e,t){if(C.typeOf.number("intersectionLatitude",e),!c(this._distance)||this._distance===0)throw new L("EllipsoidRhumbLine must have distinct start and end set.");let n=this._ellipticity,i=this._heading,o=this._start;if(w.equalsEpsilon(Math.abs(i),w.PI_OVER_TWO,w.EPSILON8))return;let r=gC(n,o.latitude),s=gC(n,e),a=Math.tan(i)*(s-r),l=w.negativePiToPi(o.longitude+a);return c(t)?(t.longitude=l,t.latitude=e,t.height=0,t):new pe(l,e,0)};var va=Ap;var oH=[Xi,Wi],yPe=oH.length,Aie=Math.cos(w.toRadians(30)),gie=Math.cos(w.toRadians(150)),Mie=0,Nie=1e3;function q0(e){e=e??z.EMPTY_OBJECT;let t=e.positions;if(!c(t)||t.length<2)throw new L("At least two positions are required.");if(c(e.arcType)&&e.arcType!==Kt.GEODESIC&&e.arcType!==Kt.RHUMB)throw new L("Valid options for arcType are ArcType.GEODESIC and ArcType.RHUMB.");this.width=e.width??1,this._positions=t,this.granularity=e.granularity??9999,this.loop=e.loop??!1,this.arcType=e.arcType??Kt.GEODESIC,this._ellipsoid=re.default,this._projectionIndex=0,this._workerName="createGroundPolylineGeometry",this._scene3DOnly=!1}Object.defineProperties(q0.prototype,{packedLength:{get:function(){return 1+this._positions.length*3+1+1+1+re.packedLength+1+1}}});q0.setProjectionAndEllipsoid=function(e,t){let n=0;for(let i=0;iAie||rw.PI_OVER_TWO&&(a=!0,s=m.subtract(r,n,Zie),d=l.cartesianToCartographic(s,Lie)),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 APe=new m,Rie=new m;function Gie(e,t,n,i,o,r){let s=m.subtract(t,e,APe);m.normalize(s,s);let a=n-Mie,l=m.multiplyByScalar(s,a,Rie);m.add(e,l,o);let d=i-Nie;l=m.multiplyByScalar(s,d,Rie),m.add(t,l,r)}var MPe=new m;function x5(e,t){let n=cn.getPointDistance(_5,e),i=cn.getPointDistance(_5,t),o=MPe;w.equalsEpsilon(n,0,w.EPSILON2)?(o=Mp(t,e,o),m.multiplyByScalar(o,w.EPSILON2,o),m.add(e,o,e)):w.equalsEpsilon(i,0,w.EPSILON2)&&(o=Mp(e,t,o),m.multiplyByScalar(o,w.EPSILON2,o),m.add(t,o,t))}function NPe(e,t){let n=Math.abs(e.longitude),i=Math.abs(t.longitude);if(w.equalsEpsilon(n,w.PI,w.EPSILON11)){let o=w.sign(t.longitude);return e.longitude=o*(n-w.EPSILON11),1}else if(w.equalsEpsilon(i,w.PI,w.EPSILON11)){let o=w.sign(e.longitude);return t.longitude=o*(i-w.EPSILON11),2}return 0}var Uie=new pe,Oie=new pe,Eie=new m,eH=new m,Xie=new m,Iie=new m,kPe=new m,Wie=new m,UPe=[Uie,Oie],OPe=new de,DPe=new m,BPe=new m,YPe=new m,HPe=new m,zPe=new m,KPe=new m,tH=new m,nH=new m,JPe=new m,QPe=new m,jPe=new m,wie=new m,qPe=new m,$Pe=new m,e2e=new Bn,t2e=new Bn,Pie=new m,n2e=new m,vie=new m,i2e=[new ue,new ue],Die=[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],Fie=Die.length;function o2e(e,t,n,i,o,r,s){let a,l,d=t._ellipsoid,u=n.length/3-1,f=u*8,p=f*4,y=u*36,h=f>65535?new Uint32Array(y):new Uint16Array(y),g=new Float64Array(f*3),x=new Float32Array(p),S=new Float32Array(p),V=new Float32Array(p),Z=new Float32Array(p),R=new Float32Array(p),E,I,v,P;s&&(E=new Float32Array(p),I=new Float32Array(p),v=new Float32Array(p),P=new Float32Array(f*2));let F=r.length/2,N=0,b=Uie;b.height=0;let G=Oie;G.height=0;let X=Eie,W=eH;if(s)for(l=0,a=1;aAie?(Ht=oX(t,b,Ke,rt,tH),qe=oX(t,G,$,Xt,nH)):bi===1?(qe=oX(t,G,$,Xt,nH),Ht.x=0,Ht.y=w.sign(b.longitude-Math.abs(G.longitude)),Ht.z=0):(Ht=oX(t,b,Ke,rt,tH),qe.x=0,qe.y=w.sign(b.longitude-G.longitude),qe.z=0)}let mn=m.distance(De,j),Dt=Bn.fromCartesian(Ze,e2e),Lt=m.subtract(ie,Ze,JPe),Vi=m.normalize(Lt,wie),ln=m.subtract(De,Ze,QPe);ln=m.normalize(ln,ln);let ge=m.cross(Vi,ln,wie);ge=m.normalize(ge,ge);let Le=m.cross(ln,Ke,qPe);Le=m.normalize(Le,Le);let yn=m.subtract(j,ie,jPe);yn=m.normalize(yn,yn);let bt=m.cross($,yn,$Pe);bt=m.normalize(bt,bt);let ro=mn/k,Xo=ne/k,ra=0,Wr,_s,Ae,st=0,Qe=0;if(s){ra=m.distance(rt,Xt),Wr=Bn.fromCartesian(rt,t2e),_s=m.subtract(Xt,rt,Pie),Ae=m.normalize(_s,n2e);let bi=Ae.x;Ae.x=Ae.y,Ae.y=-bi,st=ra/N,Qe=be/N}for(B=0;B<8;B++){let bi=K+B*4,sa=H+B*2,Qr=bi+3,xl=B<4?1:-1,yo=B===2||B===3||B===6||B===7?1:-1;m.pack(Dt.high,x,bi),x[Qr]=Lt.x,m.pack(Dt.low,S,bi),S[Qr]=Lt.y,m.pack(Le,V,bi),V[Qr]=Lt.z,m.pack(bt,Z,bi),Z[Qr]=ro*xl,m.pack(ge,R,bi);let wr=Xo*yo;wr===0&&yo<0&&(wr=9),R[Qr]=wr,s&&(E[bi]=Wr.high.x,E[bi+1]=Wr.high.y,E[bi+2]=Wr.low.x,E[bi+3]=Wr.low.y,v[bi]=-Ht.y,v[bi+1]=Ht.x,v[bi+2]=qe.y,v[bi+3]=-qe.x,I[bi]=_s.x,I[bi+1]=_s.y,I[bi+2]=Ae.x,I[bi+3]=Ae.y,P[sa]=st*xl,wr=Qe*yo,wr===0&&yo<0&&(wr=9),P[sa+1]=wr)}let $e=YPe,yt=HPe,Bt=DPe,Ln=BPe,Io=de.fromCartographicArray(UPe,OPe),To=ui.getMinimumMaximumHeights(Io,d),Ka=To.minimumTerrainHeight,Ja=To.maximumTerrainHeight;Ce+=Math.abs(Ka),Ce+=Math.abs(Ja),Gie(Ze,De,Ka,Ja,$e,Bt),Gie(ie,j,Ka,Ja,yt,Ln);let Li=m.multiplyByScalar(ge,w.EPSILON5,vie);m.add($e,Li,$e),m.add(yt,Li,yt),m.add(Bt,Li,Bt),m.add(Ln,Li,Ln),x5($e,yt),x5(Bt,Ln),m.pack($e,g,U),m.pack(yt,g,U+3),m.pack(Ln,g,U+6),m.pack(Bt,g,U+9),Li=m.multiplyByScalar(ge,-2*w.EPSILON5,vie),m.add($e,Li,$e),m.add(yt,Li,yt),m.add(Bt,Li,Bt),m.add(Ln,Li,Ln),x5($e,yt),x5(Bt,Ln),m.pack($e,g,U+12),m.pack(yt,g,U+15),m.pack(Ln,g,U+18),m.pack(Bt,g,U+21),O+=2,l+=3,H+=16,U+=24,K+=32,ne+=mn,be+=ra}l=0;let me=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 } vec3 alignedPlaneNormal; alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_startPlaneNormalEcAndHalfWidth.xyz); alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz)); distanceFromStart = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, ecStart), eyeCoordinate.xyz); 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 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 out_FragColor.rgb *= out_FragColor.a; czm_writeDepthClamp(); } `;var h$t=_(T(),1),sX=`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) { 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 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); 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 b$t=_(T(),1),aX=`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; #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 void main() { v_batchId = batchId; 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; 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); 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); 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)); 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); 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 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 vec4 positionEc3D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position3DHigh, position3DLow); 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)); vec3 normalEC = normalize(cross(planeDirection, upOrDown)); vec3 geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc3D)); geodeticSurfaceNormal *= float(0.0 <= rightNormalAndTextureCoordinateNormalizationY.w && rightNormalAndTextureCoordinateNormalizationY.w <= 1.0); geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT; positionEc3D.xyz += geodeticSurfaceNormal; normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w); positionEc3D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc3D)) * normalEC; vec4 positionEc2D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy); 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)); normalEC = normalize(cross(planeDirection, upOrDown)); geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc2D)); geodeticSurfaceNormal *= float(0.0 <= texcoordNormalization2D.y && texcoordNormalization2D.y <= 1.0); geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT; positionEc2D.xyz += geodeticSurfaceNormal; normalEC *= sign(texcoordNormalization2D.x); #ifndef PER_INSTANCE_COLOR v_texcoordT = clamp(sign(texcoordNormalization2D.x), 0.0, 1.0); #endif positionEc2D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc2D)) * normalEC; gl_Position = czm_projection * mix(positionEc2D, positionEc3D, czm_morphTime); #ifdef ANGLE_VARYING 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 g$t=_(T(),1),cX=`in vec3 position3DHigh; in vec3 position3DLow; #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; #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); v_rightPlaneEC.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw); v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart); vec4 startPlaneEC; startPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy); startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart); 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); vec4 startPlaneEC; startPlaneEC.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz; startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart); vec4 endPlaneEC; endPlaneEC.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz; endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd); 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 vec4 positionRelativeToEye = czm_computePosition(); vec4 positionEC = czm_modelViewRelativeToEye * positionRelativeToEye; 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)); vec3 normalEC = normalize(cross(planeDirection, upOrDown)); 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)); 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 = width / dot(normalEC, v_rightPlaneEC.xyz); #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 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 I$t=_(T(),1);var _$t=_(T(),1),lX=`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 S$t=_(T(),1),bd=`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); float endPoint0Distance = czm_currentFrustum.x + p0.z; float denominator = -direction.z; if (endPoint0Distance > 0.0 && abs(denominator) < czm_epsilon7) { culledByNearPlane = true; } else if (endPoint0Distance > 0.0) { float t = endPoint0Distance / denominator; if (t < 0.0 || t > magnitude) { culledByNearPlane = true; } else { p0 = p0 + t * direction; 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) { #ifdef POLYLINE_DASH vec4 positionWindow = czm_eyeToWindowCoordinates(positionEC); vec4 previousWindow = czm_eyeToWindowCoordinates(prevEC); vec4 nextWindow = czm_eyeToWindowCoordinates(nextEC); 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; 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 (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; 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); 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 rH=`${bd} ${lX}`,r2e=Xx;Ot.isInternetExplorer()||(rH=`#define CLIP_POLYLINE ${rH}`);function Fx(e){e=e??z.EMPTY_OBJECT;let t=e.translucent??!0,n=!1,i=Fx.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??rH,this._fragmentShaderSource=e.fragmentShaderSource??r2e,this._renderState=no.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(Fx.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}}});Fx.VERTEX_FORMAT=We.POSITION_ONLY;Fx.prototype.getFragmentShaderSource=no.prototype.getFragmentShaderSource;Fx.prototype.isTranslucent=no.prototype.isTranslucent;Fx.prototype.getRenderState=no.prototype.getRenderState;var es=Fx;var H$t=_(T(),1);var w$t=_(T(),1),dX=`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 v$t=_(T(),1),Ax=`#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 sH=`${bd} ${dX}`,s2e=Ax;Ot.isInternetExplorer()||(sH=`#define CLIP_POLYLINE ${sH}`);function Mx(e){e=e??z.EMPTY_OBJECT;let t=e.translucent??!0,n=!1,i=Mx.VERTEX_FORMAT;this.material=c(e.material)?e.material:zi.fromType(zi.ColorType),this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??sH,this._fragmentShaderSource=e.fragmentShaderSource??s2e,this._renderState=no.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(Mx.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}}});Mx.VERTEX_FORMAT=We.POSITION_AND_ST;Mx.prototype.getFragmentShaderSource=no.prototype.getFragmentShaderSource;Mx.prototype.isTranslucent=no.prototype.isTranslucent;Mx.prototype.getRenderState=no.prototype.getRenderState;var ua=Mx;function Np(e){e=e??z.EMPTY_OBJECT,this.geometryInstances=e.geometryInstances,this._hasPerInstanceColors=!0;let t=e.appearance;c(t)||(t=new ua),this.appearance=t,this.show=e.show??!0,this.classificationType=e.classificationType??Un.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=Bie(!1),this._renderState3DTiles=Bie(!0),this._renderStateMorph=Oe.fromCache({cull:{enabled:!0,face:_i.FRONT},depthTest:{enabled:!0},blending:un.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1})}Object.defineProperties(Np.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}}});Np.initializeTerrainHeights=function(){return ui.initialize()};function a2e(e,t,n){let i=t.context,o=e._primitive,r=o._attributeLocations,s=o._batchTable.getVertexShaderCallback()(cX);s=In._appendShowToShader(o,s),s=In._appendDistanceDisplayConditionToShader(o,s),s=In._modifyShaderPosition(e,s,t.scene3DOnly);let a=o._batchTable.getVertexShaderCallback()(aX);a=In._appendShowToShader(o,a),a=In._appendDistanceDisplayConditionToShader(o,a),a=In._modifyShaderPosition(e,a,t.scene3DOnly);let l=o._batchTable.getVertexShaderCallback()(rX),d=[`GLOBE_MINIMUM_ALTITUDE ${t.mapProjection.ellipsoid.minimumRadius.toFixed(1)}`],u="",f="";c(n.material)?(f=c(n.material)?n.material.shaderSource:"",f.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&d.push("ANGLE_VARYING"),f.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],y=new Be({defines:d,sources:[s]}),h=new Be({defines:p,sources:[f,l]});e._sp=tn.replaceCache({context:i,shaderProgram:o._sp,vertexShaderSource:y,fragmentShaderSource:h,attributeLocations:r});let g=i.shaderCache.getDerivedShaderProgram(e._sp,"2dColor");if(!c(g)){let S=new Be({defines:d.concat(["COLUMBUS_VIEW_2D"]),sources:[s]});g=i.shaderCache.createDerivedShaderProgram(e._sp,"2dColor",{context:i,shaderProgram:e._sp2D,vertexShaderSource:S,fragmentShaderSource:h,attributeLocations:r})}e._sp2D=g;let x=i.shaderCache.getDerivedShaderProgram(e._sp,"MorphColor");if(!c(x)){let S=new Be({defines:d.concat([`MAX_TERRAIN_HEIGHT ${ui._defaultMaxTerrainHeight.toFixed(1)}`]),sources:[a]});l=o._batchTable.getVertexShaderCallback()(sX);let V=new Be({defines:p,sources:[f,l]});x=i.shaderCache.createDerivedShaderProgram(e._sp,"MorphColor",{context:i,shaderProgram:e._spMorph,vertexShaderSource:S,fragmentShaderSource:V,attributeLocations:r})}e._spMorph=x}function Bie(e){return Oe.fromCache({cull:{enabled:!0},blending:un.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:On.EQUAL,frontOperation:{fail:ft.KEEP,zFail:ft.KEEP,zPass:ft.KEEP},backFunction:On.EQUAL,backOperation:{fail:ft.KEEP,zFail:ft.KEEP,zPass:ft.KEEP},reference:kt.CESIUM_3D_TILE_MASK,mask:kt.CESIUM_3D_TILE_MASK}})}function c2e(e,t,n,i,o,r){let s=e._primitive,a=s._va.length;o.length=a,r.length=a;let d=t instanceof es?{}:n._uniforms,u=s._batchTable.getUniformMapCallback()(d);for(let f=0;f{!this._ready&&c(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};Np.prototype.getGeometryInstanceAttributes=function(e){if(!c(this._primitive))throw new L("must call update before calling getGeometryInstanceAttributes");return this._primitive.getGeometryInstanceAttributes(e)};Np.isSupported=function(e){return e.frameState.context.depthTexture};Np.prototype.isDestroyed=function(){return!1};Np.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,he(this)};var Am=Np;var Ken=_(T(),1);var ken=_(T(),1);var Wen=_(T(),1);var d2e=new D(1,1),u2e=!1,m2e=Y.WHITE;function xC(e){e=e??z.EMPTY_OBJECT,this._definitionChanged=new ye,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(xC.prototype,{isConstant:{get:function(){return J.isConstant(this._image)&&J.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},image:fe("image"),repeat:fe("repeat"),color:fe("color"),transparent:fe("transparent")});xC.prototype.getType=function(e){return"Image"};var f2e=new ee;xC.prototype.getValue=function(e,t){return c(e)||(e=ee.now(f2e)),c(t)||(t={}),t.image=J.getValueOrUndefined(this._image,e),t.repeat=J.getValueOrClonedDefault(this._repeat,e,d2e,t.repeat),t.color=J.getValueOrClonedDefault(this._color,e,m2e,t.color),J.getValueOrDefault(this._transparent,e,u2e)&&(t.color.alpha=Math.min(.99,t.color.alpha)),t};xC.prototype.equals=function(e){return this===e||e instanceof xC&&J.equals(this._image,e._image)&&J.equals(this._repeat,e._repeat)&&J.equals(this._color,e._color)&&J.equals(this._transparent,e._transparent)};var $0=xC;function h2e(e){if(e instanceof Y)return new Ut(e);if(typeof e=="string"||e instanceof Ge||e instanceof HTMLCanvasElement||e instanceof HTMLVideoElement){let t=new $0;return t.image=e,t}throw new L(`Unable to infer material type: ${e}`)}function p2e(e,t){return fe(e,t,h2e)}var wo=p2e;function uX(e){this._definitionChanged=new ye,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??z.EMPTY_OBJECT)}Object.defineProperties(uX.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:fe("show"),dimensions:fe("dimensions"),heightReference:fe("heightReference"),fill:fe("fill"),material:wo("material"),outline:fe("outline"),outlineColor:fe("outlineColor"),outlineWidth:fe("outlineWidth"),shadows:fe("shadows"),distanceDisplayCondition:fe("distanceDisplayCondition")});uX.prototype.clone=function(e){return c(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 uX(this)};uX.prototype.merge=function(e){if(!c(e))throw new L("source is required.");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 Nx=uX;var ftn=_(T(),1);var Qen=_(T(),1),b2e={FIXED:0,INERTIAL:1},Ui=Object.freeze(b2e);var otn=_(T(),1);function _C(){L.throwInstantiationError()}Object.defineProperties(_C.prototype,{isConstant:{get:L.throwInstantiationError},definitionChanged:{get:L.throwInstantiationError},referenceFrame:{get:L.throwInstantiationError}});_C.prototype.getValue=L.throwInstantiationError;_C.prototype.getValueInReferenceFrame=L.throwInstantiationError;_C.prototype.equals=L.throwInstantiationError;var Hie=new te;_C.convertToReferenceFrame=function(e,t,n,i,o){if(!c(t))return t;if(c(o)||(o=new m),n===i)return m.clone(t,o);let r=wt.computeIcrfToCentralBodyFixedMatrix(e,Hie);if(n===Ui.INERTIAL)return te.multiplyByVector(r,t,o);if(n===Ui.FIXED)return te.multiplyByVector(te.transpose(r,Hie),t,o)};var Mm=_C;function kx(e,t){this._definitionChanged=new ye,this._value=m.clone(e),this._referenceFrame=t??Ui.FIXED}Object.defineProperties(kx.prototype,{isConstant:{get:function(){return!c(this._value)||this._referenceFrame===Ui.FIXED}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var y2e=new ee;kx.prototype.getValue=function(e,t){return c(e)||(e=ee.now(y2e)),this.getValueInReferenceFrame(e,Ui.FIXED,t)};kx.prototype.setValue=function(e,t){let n=!1;m.equals(this._value,e)||(n=!0,this._value=m.clone(e)),c(t)&&this._referenceFrame!==t&&(n=!0,this._referenceFrame=t),n&&this._definitionChanged.raiseEvent(this)};kx.prototype.getValueInReferenceFrame=function(e,t,n){if(!c(e))throw new L("time is required.");if(!c(t))throw new L("referenceFrame is required.");return Mm.convertToReferenceFrame(e,this._value,this._referenceFrame,t,n)};kx.prototype.equals=function(e){return this===e||e instanceof kx&&m.equals(this._value,e._value)&&this._referenceFrame===e._referenceFrame};var Oc=kx;var Ttn=_(T(),1);function mX(e){this._definitionChanged=new ye,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??z.EMPTY_OBJECT)}Object.defineProperties(mX.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:wo("material"),outline:fe("outline"),outlineColor:fe("outlineColor"),outlineWidth:fe("outlineWidth"),shadows:fe("shadows"),distanceDisplayCondition:fe("distanceDisplayCondition"),classificationType:fe("classificationType"),zIndex:fe("zIndex")});mX.prototype.clone=function(e){return c(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 mX(this)};mX.prototype.merge=function(e){if(!c(e))throw new L("source is required.");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 Ux=mX;var Vtn=_(T(),1);function g2e(e){return e}function x2e(e,t){return fe(e,t,g2e)}var Dc=x2e;var Wtn=_(T(),1);function fX(e){this._definitionChanged=new ye,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??z.EMPTY_OBJECT)}Object.defineProperties(fX.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:wo("material"),outline:fe("outline"),outlineColor:fe("outlineColor"),outlineWidth:fe("outlineWidth"),numberOfVerticalLines:fe("numberOfVerticalLines"),slices:fe("slices"),shadows:fe("shadows"),distanceDisplayCondition:fe("distanceDisplayCondition")});fX.prototype.clone=function(e){return c(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 fX(this)};fX.prototype.merge=function(e){if(!c(e))throw new L("source is required.");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 Ox=fX;var ktn=_(T(),1);function hX(e){this._definitionChanged=new ye,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??z.EMPTY_OBJECT)}Object.defineProperties(hX.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:wo("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")});hX.prototype.clone=function(e){return c(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 hX(this)};hX.prototype.merge=function(e){if(!c(e))throw new L("source is required.");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 Dx=hX;var Ktn=_(T(),1);function pX(e){this._definitionChanged=new ye,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??z.EMPTY_OBJECT)}Object.defineProperties(pX.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:wo("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")});pX.prototype.clone=function(e){return c(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 pX(this)};pX.prototype.merge=function(e){if(!c(e))throw new L("source is required.");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 Bx=pX;var tnn=_(T(),1);function bX(e){this._definitionChanged=new ye,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??z.EMPTY_OBJECT)}Object.defineProperties(bX.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")});bX.prototype.clone=function(e){return c(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 bX(this)};bX.prototype.merge=function(e){if(!c(e))throw new L("source is required.");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 Nm=bX;var wnn=_(T(),1);var pnn=_(T(),1);var snn=_(T(),1);var _2e=new m(1,1,1),T2e=m.ZERO,S2e=Fe.IDENTITY;function zie(e,t,n){this.translation=m.clone(e??T2e),this.rotation=Fe.clone(t??S2e),this.scale=m.clone(n??_2e)}zie.prototype.equals=function(e){return this===e||c(e)&&m.equals(this.translation,e.translation)&&Fe.equals(this.rotation,e.rotation)&&m.equals(this.scale,e.scale)};var ey=zie;var aH=new ey;function yX(e){e=e??z.EMPTY_OBJECT,this._definitionChanged=new ye,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(yX.prototype,{isConstant:{get:function(){return J.isConstant(this._translation)&&J.isConstant(this._rotation)&&J.isConstant(this._scale)}},definitionChanged:{get:function(){return this._definitionChanged}},translation:fe("translation"),rotation:fe("rotation"),scale:fe("scale")});var C2e=new ee;yX.prototype.getValue=function(e,t){return c(e)||(e=ee.now(C2e)),c(t)||(t=new ey),t.translation=J.getValueOrClonedDefault(this._translation,e,aH.translation,t.translation),t.rotation=J.getValueOrClonedDefault(this._rotation,e,aH.rotation,t.rotation),t.scale=J.getValueOrClonedDefault(this._scale,e,aH.scale,t.scale),t};yX.prototype.equals=function(e){return this===e||e instanceof yX&&J.equals(this._translation,e._translation)&&J.equals(this._rotation,e._rotation)&&J.equals(this._scale,e._scale)};var Yx=yX;var Vnn=_(T(),1);function kp(e,t){this._propertyNames=[],this._definitionChanged=new ye,c(e)&&this.merge(e,t)}Object.defineProperties(kp.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 B2e=new ee;SC.prototype.getValue=function(e,t){c(e)||(e=ee.now(B2e));let n=J.getValueOrDefault(this._heightReference,e,ze.NONE),i=J.getValueOrDefault(this._extrudedHeightReference,e,ze.NONE);if(n===ze.NONE&&!lC(i))return this._position=m.clone(m.ZERO,this._position),m.clone(m.ZERO,t);if(this._positionProperty.isConstant&&n!==ze.CLIP_TO_GROUND)return m.multiplyByScalar(this._normal,this._terrainHeight,t);let o=this._scene,r=this._positionProperty.getValue(e,qie);if(!c(r)||m.equals(r,m.ZERO)||!c(o.globe))return m.clone(m.ZERO,t);if(m.equalsEpsilon(this._position,r,w.EPSILON10)&&n!==ze.CLIP_TO_GROUND)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);if(n===ze.CLIP_TO_GROUND){let l=o.globe.ellipsoid.cartesianToCartographic(r,scratchCarto);return this._terrainHeight>=l.height?m.multiplyByScalar(s,this._terrainHeight-l.height,t):m.clone(m.ZERO,t)}return m.multiplyByScalar(s,this._terrainHeight,t)};SC.prototype.isDestroyed=function(){return!1};SC.prototype.destroy=function(){return c(this._removeEventListener)&&this._removeEventListener(),c(this._removeModeListener)&&this._removeModeListener(),c(this._removeCallbackFunc)&&this._removeCallbackFunc(),he(this)};var Jx=SC;function Y2e(e,t,n,i){if(oi.prototype._onEntityPropertyChanged.call(this,e,t,n,i),this._observedPropertyNames.indexOf(t)===-1)return;let o=this._entity[this._geometryPropertyName];if(!c(o))return;c(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0);let r=o.heightReference;if(c(r)){let s=new Om(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new Jx(this._scene,s,r)}}var Bp=Y2e;var $ie=m.ZERO,eoe=new m,H2e=new m,toe=new Y;function z2e(e){this.id=e,this.vertexFormat=void 0,this.dimensions=void 0,this.offsetAttribute=void 0}function yd(e,t){oi.call(this,{entity:e,scene:t,geometryOptions:new z2e(e),geometryPropertyName:"box",observedPropertyNames:["availability","position","orientation","box"]}),this._onEntityPropertyChanged(e,"box",e.box,void 0)}c(Object.create)&&(yd.prototype=Object.create(oi.prototype),yd.prototype.constructor=yd);Object.defineProperties(yd.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});yd.prototype.createFillGeometryInstance=function(e){if(C.defined("time",e),!this._fillEnabled)throw new L("This instance does not represent a filled geometry.");let t=this._entity,n=t.isAvailable(e),i=new Tn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=kn.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r,color:void 0,offset:void 0};if(this._materialProperty instanceof Ut){let a;c(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,toe)),c(a)||(a=Y.WHITE),s.color=Yt.fromColor(a)}return c(this._options.offsetAttribute)&&(s.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,$ie,eoe))),new Rt({id:t,geometry:Wa.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.ellipsoid),attributes:s})};yd.prototype.createOutlineGeometryInstance=function(e){if(C.defined("time",e),!this._outlineEnabled)throw new L("This instance does not represent an outlined geometry.");let t=this._entity,n=t.isAvailable(e),i=J.getValueOrDefault(this._outlineColorProperty,e,Y.BLACK,toe),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new Tn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Yt.fromColor(i),distanceDisplayCondition:kn.fromDistanceDisplayCondition(o),offset:void 0};return c(this._options.offsetAttribute)&&(r.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,$ie,eoe))),new Rt({id:t,geometry:Fm.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.ellipsoid),attributes:r})};yd.prototype._computeCenter=function(e,t){return J.getValueOrUndefined(this._entity.position,e,t)};yd.prototype._isHidden=function(e,t){return!c(t.dimensions)||!c(e.position)||oi.prototype._isHidden.call(this,e,t)};yd.prototype._isDynamic=function(e,t){return!e.position.isConstant||!J.isConstant(e.orientation)||!t.dimensions.isConstant||!J.isConstant(t.outlineWidth)};yd.prototype._setStaticOptions=function(e,t){let n=J.getValueOrDefault(t.heightReference,Ye.MINIMUM_VALUE,ze.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Ut?an.VERTEX_FORMAT:so.MaterialSupport.TEXTURED.vertexFormat,i.dimensions=t.dimensions.getValue(Ye.MINIMUM_VALUE,i.dimensions),i.offsetAttribute=n!==ze.NONE?$t.ALL:void 0};yd.prototype._onEntityPropertyChanged=Bp;yd.DynamicGeometryUpdater=CC;function CC(e,t,n){ii.call(this,e,t,n)}c(Object.create)&&(CC.prototype=Object.create(ii.prototype),CC.prototype.constructor=CC);CC.prototype._isHidden=function(e,t,n){let i=J.getValueOrUndefined(e.position,n,H2e),o=this._options.dimensions;return!c(i)||!c(o)||ii.prototype._isHidden.call(this,e,t,n)};CC.prototype._setOptions=function(e,t,n){let i=J.getValueOrDefault(t.heightReference,n,ze.NONE),o=this._options;o.dimensions=J.getValueOrUndefined(t.dimensions,n,o.dimensions),o.offsetAttribute=i!==ze.NONE?$t.ALL:void 0};var EX=yd;var asn=_(T(),1);function Qx(e,t,n){this._callback=void 0,this._isConstant=void 0,this._referenceFrame=n??Ui.FIXED,this._definitionChanged=new ye,this.setCallback(e,t)}Object.defineProperties(Qx.prototype,{isConstant:{get:function(){return this._isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var K2e=new ee;Qx.prototype.getValue=function(e,t){return c(e)||(e=ee.now(K2e)),this.getValueInReferenceFrame(e,Ui.FIXED,t)};Qx.prototype.setCallback=function(e,t){if(!c(e))throw new L("callback is required.");if(!c(t))throw new L("isConstant is required.");let n=this._callback!==e||this._isConstant!==t;this._callback=e,this._isConstant=t,n&&this._definitionChanged.raiseEvent(this)};Qx.prototype.getValueInReferenceFrame=function(e,t,n){if(!c(e))throw new L("time is required.");if(!c(t))throw new L("referenceFrame is required.");let i=this._callback(e,n);return Mm.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};Qx.prototype.equals=function(e){return this===e||e instanceof Qx&&this._callback===e._callback&&this._isConstant===e._isConstant&&this._referenceFrame===e._referenceFrame};var XX=Qx;var m4n=_(T(),1);var e4n=_(T(),1);var hsn=_(T(),1);var lsn=_(T(),1);/*! @license DOMPurify 3.2.3 | (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.3/LICENSE */var{entries:uoe,setPrototypeOf:noe,isFrozen:J2e,getPrototypeOf:Q2e,getOwnPropertyDescriptor:j2e}=Object,{freeze:zc,seal:Gu,create:moe}=Object,{apply:pH,construct:bH}=typeof Reflect<"u"&&Reflect;zc||(zc=function(t){return t});Gu||(Gu=function(t){return t});pH||(pH=function(t,n,i){return t.apply(n,i)});bH||(bH=function(t,n){return new t(...n)});var T5=gd(Array.prototype.forEach),ioe=gd(Array.prototype.pop),IX=gd(Array.prototype.push),C5=gd(String.prototype.toLowerCase),dH=gd(String.prototype.toString),ooe=gd(String.prototype.match),WX=gd(String.prototype.replace),q2e=gd(String.prototype.indexOf),$2e=gd(String.prototype.trim),Dm=gd(Object.prototype.hasOwnProperty),Hc=gd(RegExp.prototype.test),wX=eve(TypeError);function gd(e){return function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),o=1;o2&&arguments[2]!==void 0?arguments[2]:C5;noe&&noe(e,null);let i=t.length;for(;i--;){let o=t[i];if(typeof o=="string"){let r=n(o);r!==o&&(J2e(t)||(t[i]=r),o=r)}e[o]=!0}return e}function tve(e){for(let t=0;t/gm),sve=Gu(/\$\{[\w\W]*}/gm),ave=Gu(/^data-[\-\w.\u00B7-\uFFFF]+$/),cve=Gu(/^aria-[\-\w]+$/),foe=Gu(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),lve=Gu(/^(?:\w+script|data):/i),dve=Gu(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),hoe=Gu(/^html$/i),uve=Gu(/^[a-z][.\w]*(-[.\w]+)+$/i),loe=Object.freeze({__proto__:null,ARIA_ATTR:cve,ATTR_WHITESPACE:dve,CUSTOM_ELEMENT:uve,DATA_ATTR:ave,DOCTYPE_NAME:hoe,ERB_EXPR:rve,IS_ALLOWED_URI:foe,IS_SCRIPT_OR_DATA:lve,MUSTACHE_EXPR:ove,TMPLIT_EXPR:sve}),vX={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},mve=function(){return typeof window>"u"?null:window},fve=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}},doe=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function poe(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:mve(),t=dn=>poe(dn);if(t.version="3.2.3",t.removed=[],!e||!e.document||e.document.nodeType!==vX.document)return t.isSupported=!1,t;let{document:n}=e,i=n,o=i.currentScript,{DocumentFragment:r,HTMLTemplateElement:s,Node:a,Element:l,NodeFilter:d,NamedNodeMap:u=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:f,DOMParser:p,trustedTypes:y}=e,h=l.prototype,g=PX(h,"cloneNode"),x=PX(h,"remove"),S=PX(h,"nextSibling"),V=PX(h,"childNodes"),Z=PX(h,"parentNode");if(typeof s=="function"){let dn=n.createElement("template");dn.content&&dn.content.ownerDocument&&(n=dn.content.ownerDocument)}let R,E="",{implementation:I,createNodeIterator:v,createDocumentFragment:P,getElementsByTagName:F}=n,{importNode:N}=i,b=doe();t.isSupported=typeof uoe=="function"&&typeof Z=="function"&&I&&I.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:G,ERB_EXPR:X,TMPLIT_EXPR:W,DATA_ATTR:A,ARIA_ATTR:k,IS_SCRIPT_OR_DATA:B,ATTR_WHITESPACE:O,CUSTOM_ELEMENT:H}=loe,{IS_ALLOWED_URI:U}=loe,K=null,Q=wi({},[...roe,...uH,...mH,...fH,...soe]),ie=null,j=wi({},[...aoe,...hH,...coe,...S5]),$=Object.seal(moe(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}})),ne=null,be=null,Ce=!0,me=!0,_e=!1,Ve=!0,Ie=!1,Ze=!0,De=!1,Ke=!1,rt=!1,Xt=!1,Ht=!1,qe=!1,mn=!0,Dt=!1,Lt="user-content-",Vi=!0,ln=!1,ge={},Le=null,yn=wi({},["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"]),bt=null,ro=wi({},["audio","video","img","source","image","track"]),Xo=null,ra=wi({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Wr="http://www.w3.org/1998/Math/MathML",_s="http://www.w3.org/2000/svg",Ae="http://www.w3.org/1999/xhtml",st=Ae,Qe=!1,$e=null,yt=wi({},[Wr,_s,Ae],dH),Bt=wi({},["mi","mo","mn","ms","mtext"]),Ln=wi({},["annotation-xml"]),Io=wi({},["title","style","font","a","script"]),To=null,Ka=["application/xhtml+xml","text/html"],Ja="text/html",Li=null,bi=null,sa=n.createElement("form"),Qr=function(Re){return Re instanceof RegExp||Re instanceof Function},xl=function(){let Re=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(bi&&bi===Re)){if((!Re||typeof Re!="object")&&(Re={}),Re=jx(Re),To=Ka.indexOf(Re.PARSER_MEDIA_TYPE)===-1?Ja:Re.PARSER_MEDIA_TYPE,Li=To==="application/xhtml+xml"?dH:C5,K=Dm(Re,"ALLOWED_TAGS")?wi({},Re.ALLOWED_TAGS,Li):Q,ie=Dm(Re,"ALLOWED_ATTR")?wi({},Re.ALLOWED_ATTR,Li):j,$e=Dm(Re,"ALLOWED_NAMESPACES")?wi({},Re.ALLOWED_NAMESPACES,dH):yt,Xo=Dm(Re,"ADD_URI_SAFE_ATTR")?wi(jx(ra),Re.ADD_URI_SAFE_ATTR,Li):ra,bt=Dm(Re,"ADD_DATA_URI_TAGS")?wi(jx(ro),Re.ADD_DATA_URI_TAGS,Li):ro,Le=Dm(Re,"FORBID_CONTENTS")?wi({},Re.FORBID_CONTENTS,Li):yn,ne=Dm(Re,"FORBID_TAGS")?wi({},Re.FORBID_TAGS,Li):{},be=Dm(Re,"FORBID_ATTR")?wi({},Re.FORBID_ATTR,Li):{},ge=Dm(Re,"USE_PROFILES")?Re.USE_PROFILES:!1,Ce=Re.ALLOW_ARIA_ATTR!==!1,me=Re.ALLOW_DATA_ATTR!==!1,_e=Re.ALLOW_UNKNOWN_PROTOCOLS||!1,Ve=Re.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Ie=Re.SAFE_FOR_TEMPLATES||!1,Ze=Re.SAFE_FOR_XML!==!1,De=Re.WHOLE_DOCUMENT||!1,Xt=Re.RETURN_DOM||!1,Ht=Re.RETURN_DOM_FRAGMENT||!1,qe=Re.RETURN_TRUSTED_TYPE||!1,rt=Re.FORCE_BODY||!1,mn=Re.SANITIZE_DOM!==!1,Dt=Re.SANITIZE_NAMED_PROPS||!1,Vi=Re.KEEP_CONTENT!==!1,ln=Re.IN_PLACE||!1,U=Re.ALLOWED_URI_REGEXP||foe,st=Re.NAMESPACE||Ae,Bt=Re.MATHML_TEXT_INTEGRATION_POINTS||Bt,Ln=Re.HTML_INTEGRATION_POINTS||Ln,$=Re.CUSTOM_ELEMENT_HANDLING||{},Re.CUSTOM_ELEMENT_HANDLING&&Qr(Re.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&($.tagNameCheck=Re.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Re.CUSTOM_ELEMENT_HANDLING&&Qr(Re.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&($.attributeNameCheck=Re.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Re.CUSTOM_ELEMENT_HANDLING&&typeof Re.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&($.allowCustomizedBuiltInElements=Re.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ie&&(me=!1),Ht&&(Xt=!0),ge&&(K=wi({},soe),ie=[],ge.html===!0&&(wi(K,roe),wi(ie,aoe)),ge.svg===!0&&(wi(K,uH),wi(ie,hH),wi(ie,S5)),ge.svgFilters===!0&&(wi(K,mH),wi(ie,hH),wi(ie,S5)),ge.mathMl===!0&&(wi(K,fH),wi(ie,coe),wi(ie,S5))),Re.ADD_TAGS&&(K===Q&&(K=jx(K)),wi(K,Re.ADD_TAGS,Li)),Re.ADD_ATTR&&(ie===j&&(ie=jx(ie)),wi(ie,Re.ADD_ATTR,Li)),Re.ADD_URI_SAFE_ATTR&&wi(Xo,Re.ADD_URI_SAFE_ATTR,Li),Re.FORBID_CONTENTS&&(Le===yn&&(Le=jx(Le)),wi(Le,Re.FORBID_CONTENTS,Li)),Vi&&(K["#text"]=!0),De&&wi(K,["html","head","body"]),K.table&&(wi(K,["tbody"]),delete ne.tbody),Re.TRUSTED_TYPES_POLICY){if(typeof Re.TRUSTED_TYPES_POLICY.createHTML!="function")throw wX('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Re.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw wX('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');R=Re.TRUSTED_TYPES_POLICY,E=R.createHTML("")}else R===void 0&&(R=fve(y,o)),R!==null&&typeof E=="string"&&(E=R.createHTML(""));zc&&zc(Re),bi=Re}},yo=wi({},[...uH,...mH,...nve]),wr=wi({},[...fH,...ive]),gp=function(Re){let It=Z(Re);(!It||!It.tagName)&&(It={namespaceURI:st,tagName:"template"});let gn=C5(Re.tagName),xr=C5(It.tagName);return $e[Re.namespaceURI]?Re.namespaceURI===_s?It.namespaceURI===Ae?gn==="svg":It.namespaceURI===Wr?gn==="svg"&&(xr==="annotation-xml"||Bt[xr]):!!yo[gn]:Re.namespaceURI===Wr?It.namespaceURI===Ae?gn==="math":It.namespaceURI===_s?gn==="math"&&Ln[xr]:!!wr[gn]:Re.namespaceURI===Ae?It.namespaceURI===_s&&!Ln[xr]||It.namespaceURI===Wr&&!Bt[xr]?!1:!wr[gn]&&(Io[gn]||!yo[gn]):!!(To==="application/xhtml+xml"&&$e[Re.namespaceURI]):!1},jr=function(Re){IX(t.removed,{element:Re});try{Z(Re).removeChild(Re)}catch{x(Re)}},du=function(Re,It){try{IX(t.removed,{attribute:It.getAttributeNode(Re),from:It})}catch{IX(t.removed,{attribute:null,from:It})}if(It.removeAttribute(Re),Re==="is")if(Xt||Ht)try{jr(It)}catch{}else try{It.setAttribute(Re,"")}catch{}},Qa=function(Re){let It=null,gn=null;if(rt)Re=""+Re;else{let Ga=ooe(Re,/^[\r\n\t ]+/);gn=Ga&&Ga[0]}To==="application/xhtml+xml"&&st===Ae&&(Re=''+Re+"");let xr=R?R.createHTML(Re):Re;if(st===Ae)try{It=new p().parseFromString(xr,To)}catch{}if(!It||!It.documentElement){It=I.createDocument(st,"template",null);try{It.documentElement.innerHTML=Qe?E:xr}catch{}}let qa=It.body||It.documentElement;return Re&&gn&&qa.insertBefore(n.createTextNode(gn),qa.childNodes[0]||null),st===Ae?F.call(It,De?"html":"body")[0]:De?It.documentElement:qa},ex=function(Re){return v.call(Re.ownerDocument||Re,Re,d.SHOW_ELEMENT|d.SHOW_COMMENT|d.SHOW_TEXT|d.SHOW_PROCESSING_INSTRUCTION|d.SHOW_CDATA_SECTION,null)},aa=function(Re){return Re instanceof f&&(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")},_l=function(Re){return typeof a=="function"&&Re instanceof a};function ja(dn,Re,It){T5(dn,gn=>{gn.call(t,Re,It,bi)})}let ds=function(Re){let It=null;if(ja(b.beforeSanitizeElements,Re,null),aa(Re))return jr(Re),!0;let gn=Li(Re.nodeName);if(ja(b.uponSanitizeElement,Re,{tagName:gn,allowedTags:K}),Re.hasChildNodes()&&!_l(Re.firstElementChild)&&Hc(/<[/\w]/g,Re.innerHTML)&&Hc(/<[/\w]/g,Re.textContent)||Re.nodeType===vX.progressingInstruction||Ze&&Re.nodeType===vX.comment&&Hc(/<[/\w]/g,Re.data))return jr(Re),!0;if(!K[gn]||ne[gn]){if(!ne[gn]&&mu(gn)&&($.tagNameCheck instanceof RegExp&&Hc($.tagNameCheck,gn)||$.tagNameCheck instanceof Function&&$.tagNameCheck(gn)))return!1;if(Vi&&!Le[gn]){let xr=Z(Re)||Re.parentNode,qa=V(Re)||Re.childNodes;if(qa&&xr){let Ga=qa.length;for(let Tl=Ga-1;Tl>=0;--Tl){let $f=g(qa[Tl],!0);$f.__removalCount=(Re.__removalCount||0)+1,xr.insertBefore($f,S(Re))}}}return jr(Re),!0}return Re instanceof l&&!gp(Re)||(gn==="noscript"||gn==="noembed"||gn==="noframes")&&Hc(/<\/no(script|embed|frames)/i,Re.innerHTML)?(jr(Re),!0):(Ie&&Re.nodeType===vX.text&&(It=Re.textContent,T5([G,X,W],xr=>{It=WX(It,xr," ")}),Re.textContent!==It&&(IX(t.removed,{element:Re.cloneNode()}),Re.textContent=It)),ja(b.afterSanitizeElements,Re,null),!1)},uu=function(Re,It,gn){if(mn&&(It==="id"||It==="name")&&(gn in n||gn in sa))return!1;if(!(me&&!be[It]&&Hc(A,It))){if(!(Ce&&Hc(k,It))){if(!ie[It]||be[It]){if(!(mu(Re)&&($.tagNameCheck instanceof RegExp&&Hc($.tagNameCheck,Re)||$.tagNameCheck instanceof Function&&$.tagNameCheck(Re))&&($.attributeNameCheck instanceof RegExp&&Hc($.attributeNameCheck,It)||$.attributeNameCheck instanceof Function&&$.attributeNameCheck(It))||It==="is"&&$.allowCustomizedBuiltInElements&&($.tagNameCheck instanceof RegExp&&Hc($.tagNameCheck,gn)||$.tagNameCheck instanceof Function&&$.tagNameCheck(gn))))return!1}else if(!Xo[It]){if(!Hc(U,WX(gn,O,""))){if(!((It==="src"||It==="xlink:href"||It==="href")&&Re!=="script"&&q2e(gn,"data:")===0&&bt[Re])){if(!(_e&&!Hc(B,WX(gn,O,"")))){if(gn)return!1}}}}}}return!0},mu=function(Re){return Re!=="annotation-xml"&&ooe(Re,H)},fu=function(Re){ja(b.beforeSanitizeAttributes,Re,null);let{attributes:It}=Re;if(!It||aa(Re))return;let gn={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:ie,forceKeepAttr:void 0},xr=It.length;for(;xr--;){let qa=It[xr],{name:Ga,namespaceURI:Tl,value:$f}=qa,JL=Li(Ga),Pc=Ga==="value"?$f:$2e($f);if(gn.attrName=JL,gn.attrValue=Pc,gn.keepAttr=!0,gn.forceKeepAttr=void 0,ja(b.uponSanitizeAttribute,Re,gn),Pc=gn.attrValue,Dt&&(JL==="id"||JL==="name")&&(du(Ga,Re),Pc=Lt+Pc),Ze&&Hc(/((--!?|])>)|<\/(style|title)/i,Pc)){du(Ga,Re);continue}if(gn.forceKeepAttr||(du(Ga,Re),!gn.keepAttr))continue;if(!Ve&&Hc(/\/>/i,Pc)){du(Ga,Re);continue}Ie&&T5([G,X,W],_q=>{Pc=WX(Pc,_q," ")});let xq=Li(Re.nodeName);if(uu(xq,JL,Pc)){if(R&&typeof y=="object"&&typeof y.getAttributeType=="function"&&!Tl)switch(y.getAttributeType(xq,JL)){case"TrustedHTML":{Pc=R.createHTML(Pc);break}case"TrustedScriptURL":{Pc=R.createScriptURL(Pc);break}}try{Tl?Re.setAttributeNS(Tl,Ga,Pc):Re.setAttribute(Ga,Pc),aa(Re)?jr(Re):ioe(t.removed)}catch{}}}ja(b.afterSanitizeAttributes,Re,null)},Ao=function dn(Re){let It=null,gn=ex(Re);for(ja(b.beforeSanitizeShadowDOM,Re,null);It=gn.nextNode();)ja(b.uponSanitizeShadowNode,It,null),ds(It),fu(It),It.content instanceof r&&dn(It.content);ja(b.afterSanitizeShadowDOM,Re,null)};return t.sanitize=function(dn){let Re=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},It=null,gn=null,xr=null,qa=null;if(Qe=!dn,Qe&&(dn=""),typeof dn!="string"&&!_l(dn))if(typeof dn.toString=="function"){if(dn=dn.toString(),typeof dn!="string")throw wX("dirty is not a string, aborting")}else throw wX("toString is not a function");if(!t.isSupported)return dn;if(Ke||xl(Re),t.removed=[],typeof dn=="string"&&(ln=!1),ln){if(dn.nodeName){let $f=Li(dn.nodeName);if(!K[$f]||ne[$f])throw wX("root node is forbidden and cannot be sanitized in-place")}}else if(dn instanceof a)It=Qa(""),gn=It.ownerDocument.importNode(dn,!0),gn.nodeType===vX.element&&gn.nodeName==="BODY"||gn.nodeName==="HTML"?It=gn:It.appendChild(gn);else{if(!Xt&&!Ie&&!De&&dn.indexOf("<")===-1)return R&&qe?R.createHTML(dn):dn;if(It=Qa(dn),!It)return Xt?null:qe?E:""}It&&rt&&jr(It.firstChild);let Ga=ex(ln?dn:It);for(;xr=Ga.nextNode();)ds(xr),fu(xr),xr.content instanceof r&&Ao(xr.content);if(ln)return dn;if(Xt){if(Ht)for(qa=P.call(It.ownerDocument);It.firstChild;)qa.appendChild(It.firstChild);else qa=It;return(ie.shadowroot||ie.shadowrootmode)&&(qa=N.call(i,qa,!0)),qa}let Tl=De?It.outerHTML:It.innerHTML;return De&&K["!doctype"]&&It.ownerDocument&&It.ownerDocument.doctype&&It.ownerDocument.doctype.name&&Hc(hoe,It.ownerDocument.doctype.name)&&(Tl=" `+Tl),Ie&&T5([G,X,W],$f=>{Tl=WX(Tl,$f," ")}),R&&qe?R.createHTML(Tl):Tl},t.setConfig=function(){let dn=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};xl(dn),Ke=!0},t.clearConfig=function(){bi=null,Ke=!1},t.isValidAttribute=function(dn,Re,It){bi||xl({});let gn=Li(dn),xr=Li(Re);return uu(gn,xr,It)},t.addHook=function(dn,Re){typeof Re=="function"&&IX(b[dn],Re)},t.removeHook=function(dn){return ioe(b[dn])},t.removeHooks=function(dn){b[dn]=[]},t.removeAllHooks=function(){b=doe()},t}var boe=poe();var hve=0,yH={};function hh(e,t){C.typeOf.string("html",e);let n,i=e;c(yH[i])?n=yH[i]:(n=hve++,yH[i]=n),t=t??!1,this._id=n,this._html=e,this._showOnScreen=t,this._element=void 0}Object.defineProperties(hh.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(!c(this._element)){let e=boe.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[f]=void 0});for(let f=r;f0||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 c(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.ready||this._useDefaultSpecularMaps}}});function bve(e,t){if(Bm.isSupported(t)){if(e._specularEnvironmentCubeMap=e._specularEnvironmentCubeMap&&e._specularEnvironmentCubeMap.destroy(),c(e._specularEnvironmentMaps)){let n=new Bm(e._specularEnvironmentMaps);e._specularEnvironmentCubeMap=n,e._removeErrorListener=n.errorEvent.addEventListener(i=>{console.error(`Error loading specularEnvironmentMaps: ${i}`)})}e._shouldRegenerateShaders=!0}}FX.prototype.update=function(e){if(e.frameNumber===this._previousFrameNumber)return;this._previousFrameNumber=e.frameNumber;let t=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||c(this._previousSphericalHarmonicCoefficients)!==c(this._sphericalHarmonicCoefficients),this._previousSphericalHarmonicCoefficients=this._sphericalHarmonicCoefficients),this._shouldRegenerateShaders=this._shouldRegenerateShaders||this._previousSpecularEnvironmentMapLoaded!==this._specularEnvironmentMapLoaded,this._previousSpecularEnvironmentMapLoaded=this._specularEnvironmentMapLoaded,this._specularEnvironmentCubeMapDirty&&(bve(this,t),this._specularEnvironmentCubeMapDirty=!1),c(this._specularEnvironmentCubeMap)&&(this._specularEnvironmentCubeMap.update(e),this._specularEnvironmentCubeMap.ready&&(this._specularEnvironmentMapLoaded=!0));let o=!c(this._specularEnvironmentCubeMap)&&c(e.specularEnvironmentMaps)&&!this._useDefaultSpecularMaps,r=!c(e.specularEnvironmentMaps)&&this._useDefaultSpecularMaps,s=!c(this._sphericalHarmonicCoefficients)&&c(e.sphericalHarmonicCoefficients)&&!this._useDefaultSphericalHarmonics,a=!c(e.sphericalHarmonicCoefficients)&&this._useDefaultSphericalHarmonics;this._shouldRegenerateShaders=this._shouldRegenerateShaders||o||r||s||a,this._useDefaultSpecularMaps=!c(this._specularEnvironmentCubeMap)&&c(e.specularEnvironmentMaps),this._useDefaultSphericalHarmonics=!c(this._sphericalHarmonicCoefficients)&&c(e.sphericalHarmonicCoefficients)};FX.prototype.isDestroyed=function(){return!1};FX.prototype.destroy=function(){return this._specularEnvironmentCubeMap=this._specularEnvironmentCubeMap&&this._specularEnvironmentCubeMap.destroy(),this._removeErrorListener=this._removeErrorListener&&this._removeErrorListener(),he(this)};var $x=FX;var $sn=_(T(),1),_H=_(cd(),1);var Bsn=_(T(),1);var xH,yoe="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjNjVkZDYxOC01NmEwLTQ1ZmEtOGE2ZS1lYWUyODM4ZWQxYzQiLCJpZCI6MjU5LCJpYXQiOjE3NDYxMTA0Njl9.uyhPpCQKB1dodfbqTx0ZUPOLhnrSXd-qWixDxc4GYXk",V5={};V5.defaultAccessToken=yoe;V5.defaultServer=new Ge({url:"https://api.cesium.com/"});V5.getDefaultTokenCredit=function(e){if(e===yoe){if(!c(xH)){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.`;xH=new Ct(t,!0)}return xH}};var Ym=V5;function Kc(e,t){C.defined("endpoint",e),C.defined("endpointResource",t);let n,i=e.externalType,o=c(i);if(!o)n={url:e.url,retryAttempts:1,retryCallback:yve};else if(i==="3DTILES"||i==="STK_TERRAIN_SERVER")n={url:e.options.url};else throw new le("Ion.createResource does not support external imagery assets; use IonImageryProvider instead.");Ge.call(this,n),this._ionEndpoint=e,this._ionEndpointDomain=o?void 0:new _H.default(e.url).authority(),this._ionEndpointResource=t,this._ionRoot=void 0,this._pendingPromise=void 0,this._credits=void 0,this._isExternal=o}c(Object.create)&&(Kc.prototype=Object.create(Ge.prototype),Kc.prototype.constructor=Kc);Kc.fromAssetId=function(e,t){let n=Kc._createEndpointResource(e,t);return n.fetchJson().then(function(i){return new Kc(i,n)})};Object.defineProperties(Kc.prototype,{credits:{get:function(){return c(this._ionRoot)?this._ionRoot.credits:c(this._credits)?this._credits:(this._credits=Kc.getCreditsFromEndpoint(this._ionEndpoint,this._ionEndpointResource),this._credits)}}});Kc.getCreditsFromEndpoint=function(e,t){let n=e.attributions.map(Ct.getIonCredit),i=Ym.getDefaultTokenCredit(t.queryParameters.access_token);return c(i)&&n.push(Ct.clone(i)),n};Kc.prototype.clone=function(e){let t=this._ionRoot??this;return c(e)||(e=new Kc(t._ionEndpoint,t._ionEndpointResource)),e=Ge.prototype.clone.call(this,e),e._ionRoot=t,e._isExternal=this._isExternal,e};Kc.prototype.fetchImage=function(e){if(!this._isExternal){let t=e;e={preferBlob:!0},c(t)&&(e.flipY=t.flipY,e.preferImageBitmap=t.preferImageBitmap)}return Ge.prototype.fetchImage.call(this,e)};Kc.prototype._makeRequest=function(e){return this._isExternal||new _H.default(this.url).authority()!==this._ionEndpointDomain?Ge.prototype._makeRequest.call(this,e):(c(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),Ge.prototype._makeRequest.call(this,e))};Kc._createEndpointResource=function(e,t){C.defined("assetId",e),t=t??z.EMPTY_OBJECT;let n=t.server??Ym.defaultServer,i=t.accessToken??Ym.defaultAccessToken;n=Ge.createIfNeeded(n);let o={url:`v1/assets/${e}/endpoint`};return c(i)&&(o.queryParameters={access_token:i}),n.getDerivedResource(o)};function yve(e,t){let n=e._ionRoot??e,i=n._ionEndpointResource,o=typeof Image<"u";return!c(t)||t.statusCode!==401&&!(o&&t.target instanceof Image)?Promise.resolve(!1):(c(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 xd=Kc;var nan=_(T(),1);function ph(e){e=e??0,this._array=new Array(e),this._length=e}Object.defineProperties(ph.prototype,{length:{get:function(){return this._length},set:function(e){C.typeOf.number.greaterThanOrEquals("length",e,0);let t=this._array,n=this._length;if(et.length&&(t.length=e);this._length=e}},values:{get:function(){return this._array}}});ph.prototype.get=function(e){return C.typeOf.number.lessThan("index",e,this._array.length),this._array[e]};ph.prototype.set=function(e,t){C.typeOf.number("index",e),e>=this._length&&(this.length=e+1),this._array[e]=t};ph.prototype.peek=function(){return this._array[this._length-1]};ph.prototype.push=function(e){let t=this.length++;this._array[t]=e};ph.prototype.pop=function(){if(this._length===0)return;let e=this._array[this._length-1];return--this.length,e};ph.prototype.reserve=function(e){C.typeOf.number.greaterThanOrEquals("length",e,0),e>this._array.length&&(this._array.length=e)};ph.prototype.resize=function(e){C.typeOf.number.greaterThanOrEquals("length",e,0),this.length=e};ph.prototype.trim=function(e){e=e??this._length,this._array.length=e};var Jc=ph;var aan=_(T(),1);var Yp={X:0,Y:1,Z:2};Yp.Y_UP_TO_Z_UP=M.fromRotationTranslation(te.fromArray([1,0,0,0,0,1,0,-1,0]));Yp.Z_UP_TO_Y_UP=M.fromRotationTranslation(te.fromArray([1,0,0,0,0,-1,0,1,0]));Yp.X_UP_TO_Z_UP=M.fromRotationTranslation(te.fromArray([0,0,1,0,1,0,-1,0,0]));Yp.Z_UP_TO_X_UP=M.fromRotationTranslation(te.fromArray([0,0,-1,0,1,0,1,0,0]));Yp.X_UP_TO_Y_UP=M.fromRotationTranslation(te.fromArray([0,1,0,-1,0,0,0,0,1]));Yp.Y_UP_TO_X_UP=M.fromRotationTranslation(te.fromArray([0,-1,0,1,0,0,0,0,1]));Yp.fromName=function(e){return C.typeOf.string("name",e),Yp[e]};var Po=Object.freeze(Yp);var oJn=_(T(),1);var uan=_(T(),1);function goe(e){e=e??z.EMPTY_OBJECT,C.typeOf.object("options.metadata",e.metadata),this._metadata=e.metadata}Object.defineProperties(goe.prototype,{metadata:{get:function(){return this._metadata}}});var e_=goe;var S3n=_(T(),1);var Zan=_(T(),1);var xan=_(T(),1);var ban=_(T(),1);function ty(e,t,n){if(!c(e))throw new L("uint8Array is required.");if(t<0)throw new L("byteOffset cannot be negative.");if(n<0)throw new L("byteLength cannot be negative.");if(t+n>e.byteLength)throw new L("sub-region exceeds array bounds.");return t=t??0,n=n??e.byteLength-t,e=e.subarray(t,t+n),ty.decode(e)}ty.decodeWithTextDecoder=function(e){return new TextDecoder("utf-8").decode(e)};ty.decodeWithFromCharCode=function(e){let t="",n=gve(e),i=n.length;for(let o=0;o>10)+55296,(r&1023)+56320))}return t};function AX(e,t,n){return t<=e&&e<=n}function gve(e){let t=0,n=0,i=0,o=128,r=191,s=[],a=e.length;for(let l=0;l0){let o=Math.min(t,mt.maximumTextureSize),r=Math.ceil(t/mt.maximumTextureSize),s=1/o,a=s*.5,l=1/r,d=l*.5;n=new D(o,r),i=new ce(s,a,l,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(mc.prototype,{translucentFeaturesLength:{get:function(){return this._translucentFeaturesLength}},byteLength:{get:function(){let e=0;return c(this._pickTexture)&&(e+=this._pickTexture.sizeInBytes),c(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}}});mc.DEFAULT_COLOR_VALUE=Y.WHITE;mc.DEFAULT_SHOW_VALUE=!0;function xoe(e){let t=e._textureDimensions;return t.x*t.y*4}function _oe(e){if(!c(e._batchValues)){let t=xoe(e),n=new Uint8Array(t).fill(255);e._batchValues=n}return e._batchValues}function Toe(e){if(!c(e._showAlphaProperties)){let t=2*e._featuresLength,n=new Uint8Array(t).fill(255);e._showAlphaProperties=n}return e._showAlphaProperties}function kX(e,t){if(!c(e)||e<0||e>=t)throw new L(`batchId is required and between zero and featuresLength - 1 (${t}`-+").")}mc.prototype.setShow=function(e,t){if(kX(e,this._featuresLength),C.typeOf.bool("show",t),t&&!c(this._showAlphaProperties))return;let n=Toe(this),i=e*2,o=t?255:0;if(n[i]!==o){n[i]=o;let r=_oe(this),s=e*4+3;r[s]=t?n[i+1]:0,this._batchValuesDirty=!0}};mc.prototype.setAllShow=function(e){C.typeOf.bool("show",e);let t=this._featuresLength;for(let n=0;n0){let i=e._pickIds,o=xoe(e),r=new Uint8Array(o),s=e._owner,a=e._statistics;for(let l=0;l=a)throw new L(`Parent index ${t} exceeds the total number of instances: ${a}`);if(n.indexOf(t)>-1)throw new L("Circular dependency detected in the batch table hierarchy.");n.push(t);let l=c(i)?i[t]:1,d=c(i)?r[t]:t;for(let u=0;u0;){if(t=u.pop(),l[t]===d)continue;l[t]=d;let f=n(e,t);if(c(f))return f;let p=o[t],y=s[t];for(let h=0;h=t)throw new L(`batchId is required and must be between zero and featuresLength - 1 (${t}`-+").")}_o.prototype.isClass=function(e,t){VC(e,this.featuresLength),C.typeOf.string("className",t);let n=this._batchTableHierarchy;return c(n)?n.isClass(e,t):!1};_o.prototype.isExactClass=function(e,t){return C.typeOf.string("className",t),this.getExactClassName(e)===t};_o.prototype.getExactClassName=function(e){VC(e,this.featuresLength);let t=this._batchTableHierarchy;if(c(t))return t.getClassName(e)};_o.prototype.hasProperty=function(e,t){return VC(e,this.featuresLength),C.typeOf.string("name",t),c(this._properties[t])||c(this._batchTableHierarchy)&&this._batchTableHierarchy.hasProperty(e,t)};_o.prototype.hasPropertyBySemantic=function(){return!1};_o.prototype.getPropertyIds=function(e,t){VC(e,this.featuresLength),t=c(t)?t:[],t.length=0;let n=Object.keys(this._properties);return t.push.apply(t,n),c(this._batchTableHierarchy)&&t.push.apply(t,this._batchTableHierarchy.getPropertyIds(e,n)),t};_o.prototype.getPropertyBySemantic=function(e,t){};_o.prototype.getProperty=function(e,t){if(VC(e,this.featuresLength),C.typeOf.string("name",t),c(this._batchTableBinaryProperties)){let i=this._batchTableBinaryProperties[t];if(c(i))return Bve(i,e)}let n=this._properties[t];if(c(n))return He(n[e],!0);if(c(this._batchTableHierarchy)){let i=this._batchTableHierarchy.getProperty(e,t);if(c(i))return i}};_o.prototype.setProperty=function(e,t,n){let i=this.featuresLength;if(VC(e,i),C.typeOf.string("name",t),c(this._batchTableBinaryProperties)){let r=this._batchTableBinaryProperties[t];if(c(r)){Yve(r,e,n);return}}if(c(this._batchTableHierarchy)&&this._batchTableHierarchy.setProperty(e,t,n))return;let o=this._properties[t];c(o)||(this._properties[t]=new Array(i),o=this._properties[t]),o[e]=He(n,!0)};function Hve(e){return e._batchTexture.textureDimensions.y===1?`uniform vec4 tile_textureStep; vec2 computeSt(float batchId) { float stepX = tile_textureStep.x; float centerX = tile_textureStep.y; return vec2(centerX + (batchId * stepX), 0.5); } `:`uniform vec4 tile_textureStep; uniform vec2 tile_textureDimensions; vec2 computeSt(float batchId) { float stepX = tile_textureStep.x; float centerX = tile_textureStep.y; float stepY = tile_textureStep.z; float centerY = tile_textureStep.w; float xId = mod(batchId, tile_textureDimensions.x); float yId = floor(batchId / tile_textureDimensions.x); return vec2(centerX + (xId * stepX), centerY + (yId * stepY)); } `}_o.prototype.getVertexShaderCallback=function(e,t,n){if(this.featuresLength===0)return;let i=this;return function(o){let r=Zoe(o,n,!1),s;return mt.maximumVertexTextureImageUnits>0?(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} ${Hve(i)}${s}`}};function Voe(e,t){return e=Be.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 zve(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 Kve(e){let t=e._content.tileset,n=t.colorBlendMode,i=t.colorBlendAmount;if(n===Wl.HIGHLIGHT)return 0;if(n===Wl.REPLACE)return 1;if(n===Wl.MIX)return w.clamp(i,w.EPSILON4,1);throw new L(`Invalid color blend mode "${n}".`)}_o.prototype.getUniformMapCallback=function(){if(this.featuresLength===0)return;let e=this;return function(t){return St(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 Kve(e)},tile_pickTexture:function(){return e._batchTexture.pickTexture}})}};_o.prototype.getPickId=function(){return"texture(tile_pickTexture, tile_featureSt)"};var ny={ALL_OPAQUE:0,ALL_TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2};_o.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,l=Jve(this);for(let d=t;d>>kt.SKIP_LOD_BIT_SHIFT}function iFe(e){let t=He(e,!0);return t.cull.enabled=!1,t.depthTest.enabled=!0,t.depthMask=!1,t.blending=un.ALPHA_BLEND,t.stencilTest=kt.setCesium3DTileBit(),t.stencilMask=kt.CESIUM_3D_TILE_MASK,Oe.fromCache(t)}function oFe(e){let t=He(e,!0);return t.stencilTest=kt.setCesium3DTileBit(),t.stencilMask=kt.CESIUM_3D_TILE_MASK,Oe.fromCache(t)}_o.prototype.update=function(e,t){this._batchTexture.update(e,t)};_o.prototype.isDestroyed=function(){return!1};_o.prototype.destroy=function(){return this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),he(this)};var zp=_o;var $ln=_(T(),1);var Ucn=_(T(),1);function rFe(e){this.offset=e.offset,this.count=e.count,this.color=e.color,this.batchIds=e.batchIds}var bh=rFe;var Uln=_(T(),1);var Dcn=_(T(),1),LC=`in vec3 position; in float a_batchId; uniform mat4 u_modifiedModelViewProjection; void main() { gl_Position = czm_depthClamp(u_modifiedModelViewProjection * vec4(position, 1.0)); } `;var zcn=_(T(),1);function Xu(e,t){this._content=e,this._batchId=t,this._color=void 0}Object.defineProperties(Xu.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 c(this._color)||(this._color=new Y),this._content.batchTable.getColor(this._batchId,this._color)},set:function(e){this._content.batchTable.setColor(this._batchId,e)}},polylinePositions:{get:function(){if(c(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)}}});Xu.prototype.hasProperty=function(e){return this._content.batchTable.hasProperty(this._batchId,e)};Xu.prototype.getPropertyIds=function(e){return this._content.batchTable.getPropertyIds(this._batchId,e)};Xu.prototype.getProperty=function(e){return this._content.batchTable.getProperty(this._batchId,e)};Xu.getPropertyInherited=function(e,t,n){let i=e.batchTable;if(c(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(c(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(c(s)){if(s.hasPropertyBySemantic(n))return s.getPropertyBySemantic(n);if(s.hasProperty(n))return s.getProperty(n)}let a;if(c(r.implicitSubtree)&&(a=r.implicitSubtree.metadata),c(a)){if(a.hasPropertyBySemantic(n))return a.getPropertyBySemantic(n);if(a.hasProperty(n))return a.getProperty(n)}let l=c(e.group)?e.group.metadata:void 0;if(c(l)){if(l.hasPropertyBySemantic(n))return l.getPropertyBySemantic(n);if(l.hasProperty(n))return l.getProperty(n)}let d=e.tileset.metadata;if(c(d)){if(d.hasPropertyBySemantic(n))return d.getPropertyBySemantic(n);if(d.hasProperty(n))return d.getProperty(n)}};Xu.prototype.getPropertyInherited=function(e){return Xu.getPropertyInherited(this._content,this._batchId,e)};Xu.prototype.setProperty=function(e,t){this._content.batchTable.setProperty(this._batchId,e,t),this._content.featurePropertiesDirty=!0};Xu.prototype.isExactClass=function(e){return this._content.batchTable.isExactClass(this._batchId,e)};Xu.prototype.isClass=function(e){return this._content.batchTable.isClass(this._batchId,e)};Xu.prototype.getExactClassName=function(){return this._content.batchTable.getExactClassName(this._batchId)};var Us=Xu;var uln=_(T(),1);var Qcn=_(T(),1),CH=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)})}},VH=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)})}},wl=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&&f.right_a?i>f.prec:i<=f.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(l=o.length-1,t=o[l];l>1;)t={type:e.BINARY_EXP,operator:o[l-1].value,left:o[l-2],right:t},l-=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"});wl.max_unop_len=wl.getMaxKeyLen(wl.unary_ops);wl.max_binop_len=wl.getMaxKeyLen(wl.binary_ops);var iy=e=>new wl(e).parse(),aFe=Object.getOwnPropertyNames(class{});Object.getOwnPropertyNames(wl).filter(e=>!aFe.includes(e)&&iy[e]===void 0).forEach(e=>{iy[e]=wl[e]});iy.Jsep=wl;var cFe="ConditionalExpression",lFe={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:cFe,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 :")}})}};iy.plugins.register(lFe);var qcn=_(T(),1),dFe={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},gt=Object.freeze(dFe);function zm(e,t){C.typeOf.string("expression",e),this._expression=e,e=CFe(e,t),e=LFe(VFe(e)),iy.addBinaryOp("=~",0),iy.addBinaryOp("!~",0);let n;try{n=iy(e)}catch(i){throw new le(i)}this._runtimeAst=Zi(this,n)}Object.defineProperties(zm.prototype,{expression:{get:function(){return this._expression}}});var Pn={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++]}};zm.prototype.evaluate=function(e,t){Pn.reset();let n=this._runtimeAst.evaluate(e);return t instanceof Y&&n instanceof ce?Y.fromCartesian4(n,t):n instanceof D||n instanceof m||n instanceof ce?n.clone(t):n};zm.prototype.evaluateColor=function(e,t){Pn.reset();let n=this._runtimeAst.evaluate(e);return Y.fromCartesian4(n,t)};zm.prototype.getShaderFunction=function(e,t,n,i){let o=this.getShaderExpression(t,n);return o=`${i} ${e} { return ${o}; } `,o};zm.prototype.getShaderExpression=function(e,t){return this._runtimeAst.getShaderExpression(e,t)};zm.prototype.getVariables=function(){let e=[];return this._runtimeAst.getVariables(e),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var uFe=["!","-","+"],Roe=["+","-","*","/","%","===","!==",">",">=","<","<=","&&","||","!~","=~"],OX=/\${(.*?)}/g,mFe=/\\/g,fFe="@#%",hFe=/@#%/g,R5=new Y,G5={abs:Os(Math.abs),sqrt:Os(Math.sqrt),cos:Os(Math.cos),sin:Os(Math.sin),tan:Os(Math.tan),acos:Os(Math.acos),asin:Os(Math.asin),atan:Os(Math.atan),radians:Os(w.toRadians),degrees:Os(w.toDegrees),sign:Os(w.sign),floor:Os(Math.floor),ceil:Os(Math.ceil),round:Os(Math.round),exp:Os(Math.exp),exp2:Os(bFe),log:Os(Math.log),log2:Os(yFe),fract:Os(pFe),length:gFe,normalize:xFe},E5={atan2:L5(Math.atan2,!1),pow:L5(Math.pow,!1),min:L5(Math.min,!0),max:L5(Math.max,!0),distance:_Fe,dot:TFe,cross:SFe},RH={clamp:Goe(w.clamp,!0),mix:Goe(w.lerp,!0)};function pFe(e){return e-Math.floor(e)}function bFe(e){return Math.pow(2,e)}function yFe(e){return w.log2(e)}function Os(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),Pn.getCartesian2());if(n instanceof m)return m.fromElements(e(n.x),e(n.y),e(n.z),Pn.getCartesian3());if(n instanceof ce)return ce.fromElements(e(n.x),e(n.y),e(n.z),e(n.w),Pn.getCartesian4());throw new le(`Function "${t}" requires a vector or number argument. Argument is ${n}.`)}}function L5(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),Pn.getCartesian2());if(i instanceof m)return m.fromElements(e(i.x,o),e(i.y,o),e(i.z,o),Pn.getCartesian3());if(i instanceof ce)return ce.fromElements(e(i.x,o),e(i.y,o),e(i.z,o),e(i.w,o),Pn.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),Pn.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),Pn.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),Pn.getCartesian4());throw new le(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i} and ${o}.`)}}function Goe(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),Pn.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),Pn.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),Pn.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),Pn.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),Pn.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),Pn.getCartesian4());throw new le(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i}, ${o}, and ${r}.`)}}function gFe(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 le(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function xFe(e,t){if(typeof t=="number")return 1;if(t instanceof D)return D.normalize(t,Pn.getCartesian2());if(t instanceof m)return m.normalize(t,Pn.getCartesian3());if(t instanceof ce)return ce.normalize(t,Pn.getCartesian4());throw new le(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function _Fe(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 le(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function TFe(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 le(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function SFe(e,t,n){if(t instanceof m&&n instanceof m)return m.cross(t,n,Pn.getCartesian3());throw new le(`Function "${e}" requires vec3 arguments. Arguments are ${t} and ${n}.`)}function Vt(e,t,n,i,o){this._type=e,this._value=t,this._left=n,this._right=i,this._test=o,this.evaluate=void 0,vFe(this)}function CFe(e,t){if(!c(t))return e;for(let n in t)if(t.hasOwnProperty(n)){let i=new RegExp(`\\$\\{${n}\\}`,"g"),o=`(${t[n]})`;c(o)&&(e=e.replace(i,o))}return e}function VFe(e){return e.replace(mFe,fFe)}function ZH(e){return e.replace(hFe,"\\")}function LFe(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 Vt(gt.VARIABLE_IN_STRING,e.value):new Vt(gt.LITERAL_STRING,ZH(e.value))}function RFe(e,t){let n=t.arguments,i=n.length,o,r,s,a;if(t.callee.type==="MemberExpression"){o=t.callee.property.name;let l=t.callee.object;if(o==="test"||o==="exec"){if(!c(l.callee)||l.callee.name!=="regExp")throw new le(`${o} is not a function.`);return i===0?o==="test"?new Vt(gt.LITERAL_BOOLEAN,!1):new Vt(gt.LITERAL_NULL,null):(s=Zi(e,l),a=Zi(e,n[0]),new Vt(gt.FUNCTION_CALL,o,s,a))}else if(o==="toString")return r=Zi(e,l),new Vt(gt.FUNCTION_CALL,o,r);throw new le(`Unexpected function call "${o}".`)}if(o=t.callee.name,o==="color"){if(i===0)return new Vt(gt.LITERAL_COLOR,o);if(r=Zi(e,n[0]),c(n[1])){let l=Zi(e,n[1]);return new Vt(gt.LITERAL_COLOR,o,[r,l])}return new Vt(gt.LITERAL_COLOR,o,[r])}else if(o==="rgb"||o==="hsl"){if(i<3)throw new le(`${o} requires three arguments.`);return r=[Zi(e,n[0]),Zi(e,n[1]),Zi(e,n[2])],new Vt(gt.LITERAL_COLOR,o,r)}else if(o==="rgba"||o==="hsla"){if(i<4)throw new le(`${o} requires four arguments.`);return r=[Zi(e,n[0]),Zi(e,n[1]),Zi(e,n[2]),Zi(e,n[3])],new Vt(gt.LITERAL_COLOR,o,r)}else if(o==="vec2"||o==="vec3"||o==="vec4"){r=new Array(i);for(let l=0;l1)throw new le(`${o} requires exactly one argument.`);return r=Zi(e,n[0]),new Vt(gt.UNARY,o,r)}else if(o==="getExactClassName"){if(i>0)throw new le(`${o} does not take any argument.`);return new Vt(gt.UNARY,o)}else if(c(G5[o])){if(i!==1)throw new le(`${o} requires exactly one argument.`);return r=Zi(e,n[0]),new Vt(gt.UNARY,o,r)}else if(c(E5[o])){if(i!==2)throw new le(`${o} requires exactly two arguments.`);return s=Zi(e,n[0]),a=Zi(e,n[1]),new Vt(gt.BINARY,o,s,a)}else if(c(RH[o])){if(i!==3)throw new le(`${o} requires exactly three arguments.`);s=Zi(e,n[0]),a=Zi(e,n[1]);let l=Zi(e,n[2]);return new Vt(gt.TERNARY,o,s,a,l)}else{if(o==="Boolean")return i===0?new Vt(gt.LITERAL_BOOLEAN,!1):(r=Zi(e,n[0]),new Vt(gt.UNARY,o,r));if(o==="Number")return i===0?new Vt(gt.LITERAL_NUMBER,0):(r=Zi(e,n[0]),new Vt(gt.UNARY,o,r));if(o==="String")return i===0?new Vt(gt.LITERAL_STRING,""):(r=Zi(e,n[0]),new Vt(gt.UNARY,o,r));if(o==="regExp")return GFe(e,t)}}throw new le(`Unexpected function call "${o}".`)}function GFe(e,t){let n=t.arguments;if(n.length===0)return new Vt(gt.LITERAL_REGEX,new RegExp);let i=Zi(e,n[0]),o;if(n.length>1){let r=Zi(e,n[1]);if(LH(i)&&LH(r)){try{o=new RegExp(ZH(String(i._value)),r._value)}catch(s){throw new le(s)}return new Vt(gt.LITERAL_REGEX,o)}return new Vt(gt.REGEX,i,r)}if(LH(i)){try{o=new RegExp(ZH(String(i._value)))}catch(r){throw new le(r)}return new Vt(gt.LITERAL_REGEX,o)}return new Vt(gt.REGEX,i)}function EFe(e){if(wFe(e.name)){let t=PFe(e.name);return t.substr(0,8)==="tiles3d_"?new Vt(gt.BUILTIN_VARIABLE,t):new Vt(gt.VARIABLE,t)}else{if(e.name==="NaN")return new Vt(gt.LITERAL_NUMBER,NaN);if(e.name==="Infinity")return new Vt(gt.LITERAL_NUMBER,1/0);if(e.name==="undefined")return new Vt(gt.LITERAL_UNDEFINED,void 0)}throw new le(`${e.name} is not defined.`)}function XFe(e){let t=e.property.name;if(t==="PI")return new Vt(gt.LITERAL_NUMBER,Math.PI);if(t==="E")return new Vt(gt.LITERAL_NUMBER,Math.E)}function IFe(e){if(e.property.name==="POSITIVE_INFINITY")return new Vt(gt.LITERAL_NUMBER,Number.POSITIVE_INFINITY)}function WFe(e,t){if(t.object.name==="Math")return XFe(t);if(t.object.name==="Number")return IFe(t);let n,i=Zi(e,t.object);return t.computed?(n=Zi(e,t.property),new Vt(gt.MEMBER,"brackets",i,n)):(n=new Vt(gt.LITERAL_STRING,t.property.name),new Vt(gt.MEMBER,"dot",i,n))}function LH(e){return e._type>=gt.LITERAL_NULL}function wFe(e){return e.substr(0,4)==="czm_"}function PFe(e){return e.substr(4)}function Zi(e,t){let n,i,o,r;if(t.type==="Literal")n=ZFe(t);else if(t.type==="CallExpression")n=RFe(e,t);else if(t.type==="Identifier")n=EFe(t);else if(t.type==="UnaryExpression"){i=t.operator;let s=Zi(e,t.argument);if(uFe.indexOf(i)>-1)n=new Vt(gt.UNARY,i,s);else throw new le(`Unexpected operator "${i}".`)}else if(t.type==="BinaryExpression")if(i=t.operator,o=Zi(e,t.left),r=Zi(e,t.right),Roe.indexOf(i)>-1)n=new Vt(gt.BINARY,i,o,r);else throw new le(`Unexpected operator "${i}".`);else if(t.type==="LogicalExpression")i=t.operator,o=Zi(e,t.left),r=Zi(e,t.right),Roe.indexOf(i)>-1&&(n=new Vt(gt.BINARY,i,o,r));else if(t.type==="ConditionalExpression"){let s=Zi(e,t.test);o=Zi(e,t.consequent),r=Zi(e,t.alternate),n=new Vt(gt.CONDITIONAL,"?",o,r,s)}else if(t.type==="MemberExpression")n=WFe(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:c(E5[e._value])&&(e.evaluate=MFe(e._value)):e._type===gt.TERNARY?e.evaluate=NFe(e._value):e._type===gt.MEMBER?e._value==="brackets"?e.evaluate=e._evaluateMemberBrackets:e.evaluate=e._evaluateMemberDot:e._type===gt.ARRAY?e.evaluate=e._evaluateArray:e._type===gt.VARIABLE?e.evaluate=e._evaluateVariable:e._type===gt.VARIABLE_IN_STRING?e.evaluate=e._evaluateVariableString:e._type===gt.LITERAL_COLOR?e.evaluate=e._evaluateLiteralColor:e._type===gt.LITERAL_VECTOR?e.evaluate=e._evaluateLiteralVector:e._type===gt.LITERAL_STRING?e.evaluate=e._evaluateLiteralString:e._type===gt.REGEX?e.evaluate=e._evaluateRegExp:e._type===gt.BUILTIN_VARIABLE?e._value==="tiles3d_tileset_time"&&(e.evaluate=FFe):e.evaluate=e._evaluateLiteral}function FFe(e){return c(e)?e.content.tileset.timeSinceLoad:0}function AFe(e){let t=G5[e];return function(n){let i=this._left.evaluate(n);return t(e,i)}}function MFe(e){let t=E5[e];return function(n){let i=this._left.evaluate(n),o=this._right.evaluate(n);return t(e,i,o)}}function NFe(e){let t=RH[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 X5(e,t){if(c(e))return e.getPropertyInherited(t)}Vt.prototype._evaluateLiteral=function(){return this._value};Vt.prototype._evaluateLiteralColor=function(e){let t=R5,n=this._left;if(this._value==="color")c(n)?n.length>1?(Y.fromCssColorString(n[0].evaluate(e),t),t.alpha=n[1].evaluate(e)):Y.fromCssColorString(n[0].evaluate(e),t):Y.fromBytes(255,255,255,255,t);else if(this._value==="rgb")Y.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;Y.fromBytes(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),i,t)}else this._value==="hsl"?Y.fromHsl(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),1,t):this._value==="hsla"&&Y.fromHsl(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),n[3].evaluate(e),t);return ce.fromColor(t,Pn.getCartesian4())};Vt.prototype._evaluateLiteralVector=function(e){let t=Pn.getArray(),n=this._value,i=this._left,o=i.length;for(let a=0;a1)throw new le(`Invalid ${n} constructor. Not enough arguments.`);if(r>s&&o>1)throw new le(`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,Pn.getCartesian2());if(n==="vec3")return m.fromArray(t,0,Pn.getCartesian3());if(n==="vec4")return ce.fromArray(t,0,Pn.getCartesian4())};Vt.prototype._evaluateLiteralString=function(){return this._value};Vt.prototype._evaluateVariableString=function(e){let t=this._value,n=OX.exec(t);for(;n!==null;){let i=n[0],o=n[1],r=X5(e,o);c(r)||(r=""),t=t.replace(i,r),OX.lastIndex+=r.length-i.length,n=OX.exec(t)}return t};Vt.prototype._evaluateVariable=function(e){return X5(e,this._value)};function n_(e){return e._value==="feature"}Vt.prototype._evaluateMemberDot=function(e){if(n_(this._left))return X5(e,this._right.evaluate(e));let t=this._left.evaluate(e);if(!c(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]};Vt.prototype._evaluateMemberBrackets=function(e){if(n_(this._left))return X5(e,this._right.evaluate(e));let t=this._left.evaluate(e);if(!c(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]};Vt.prototype._evaluateArray=function(e){let t=[];for(let n=0;n" requires number arguments. Arguments are ${t} and ${n}.`);return t>n};Vt.prototype._evaluateGreaterThanOrEquals=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new le(`Operator ">=" requires number arguments. Arguments are ${t} and ${n}.`);return t>=n};Vt.prototype._evaluateOr=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new le(`Operator "||" requires boolean arguments. First argument is ${t}.`);if(t)return!0;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new le(`Operator "||" requires boolean arguments. Second argument is ${n}.`);return t||n};Vt.prototype._evaluateAnd=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new le(`Operator "&&" requires boolean arguments. First argument is ${t}.`);if(!t)return!1;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new le(`Operator "&&" requires boolean arguments. Second argument is ${n}.`);return t&&n};Vt.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,Pn.getCartesian2());if(n instanceof m&&t instanceof m)return m.add(t,n,Pn.getCartesian3());if(n instanceof ce&&t instanceof ce)return ce.add(t,n,Pn.getCartesian4());if(typeof t=="string"||typeof n=="string")return t+n;if(typeof t=="number"&&typeof n=="number")return t+n;throw new le(`Operator "+" requires vector or number arguments of matching types, or at least one string argument. Arguments are ${t} and ${n}.`)};Vt.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,Pn.getCartesian2());if(n instanceof m&&t instanceof m)return m.subtract(t,n,Pn.getCartesian3());if(n instanceof ce&&t instanceof ce)return ce.subtract(t,n,Pn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t-n;throw new le(`Operator "-" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};Vt.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,Pn.getCartesian2());if(n instanceof D&&typeof t=="number")return D.multiplyByScalar(n,t,Pn.getCartesian2());if(t instanceof D&&typeof n=="number")return D.multiplyByScalar(t,n,Pn.getCartesian2());if(n instanceof m&&t instanceof m)return m.multiplyComponents(t,n,Pn.getCartesian3());if(n instanceof m&&typeof t=="number")return m.multiplyByScalar(n,t,Pn.getCartesian3());if(t instanceof m&&typeof n=="number")return m.multiplyByScalar(t,n,Pn.getCartesian3());if(n instanceof ce&&t instanceof ce)return ce.multiplyComponents(t,n,Pn.getCartesian4());if(n instanceof ce&&typeof t=="number")return ce.multiplyByScalar(n,t,Pn.getCartesian4());if(t instanceof ce&&typeof n=="number")return ce.multiplyByScalar(t,n,Pn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t*n;throw new le(`Operator "*" requires vector or number arguments. If both arguments are vectors they must be matching types. Arguments are ${t} and ${n}.`)};Vt.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,Pn.getCartesian2());if(t instanceof D&&typeof n=="number")return D.divideByScalar(t,n,Pn.getCartesian2());if(n instanceof m&&t instanceof m)return m.divideComponents(t,n,Pn.getCartesian3());if(t instanceof m&&typeof n=="number")return m.divideByScalar(t,n,Pn.getCartesian3());if(n instanceof ce&&t instanceof ce)return ce.divideComponents(t,n,Pn.getCartesian4());if(t instanceof ce&&typeof n=="number")return ce.divideByScalar(t,n,Pn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t/n;throw new le(`Operator "/" requires vector or number arguments of matching types, or a number as the second argument. Arguments are ${t} and ${n}.`)};Vt.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,Pn.getCartesian2());if(n instanceof m&&t instanceof m)return m.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,Pn.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,Pn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t%n;throw new le(`Operator "%" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};Vt.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};Vt.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};Vt.prototype._evaluateConditional=function(e){let t=this._test.evaluate(e);if(typeof t!="boolean")throw new le(`Conditional argument of conditional expression must be a boolean. Argument is ${t}.`);return t?this._left.evaluate(e):this._right.evaluate(e)};Vt.prototype._evaluateNaN=function(e){return isNaN(this._left.evaluate(e))};Vt.prototype._evaluateIsFinite=function(e){return isFinite(this._left.evaluate(e))};Vt.prototype._evaluateIsExactClass=function(e){return c(e)?e.isExactClass(this._left.evaluate(e)):!1};Vt.prototype._evaluateIsClass=function(e){return c(e)?e.isClass(this._left.evaluate(e)):!1};Vt.prototype._evaluateGetExactClassName=function(e){if(c(e))return e.getExactClassName()};Vt.prototype._evaluateBooleanConversion=function(e){return!!this._left.evaluate(e)};Vt.prototype._evaluateNumberConversion=function(e){return Number(this._left.evaluate(e))};Vt.prototype._evaluateStringConversion=function(e){return String(this._left.evaluate(e))};Vt.prototype._evaluateRegExp=function(e){let t=this._value.evaluate(e),n="";c(this._left)&&(n=this._left.evaluate(e));let i;try{i=new RegExp(t,n)}catch(o){throw new le(o)}return i};Vt.prototype._evaluateRegExpTest=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new le(`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)};Vt.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 le(`Operator "=~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};Vt.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 le(`Operator "!~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};Vt.prototype._evaluateRegExpExec=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new le(`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 c(i)?i[1]:null};Vt.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 le(`Unexpected function call "${this._value}".`)};function Eoe(e){let t=e._left,n=t.length;for(let a=0;a1){let p=d[0],y=d[1];return y!=="1.0"&&(t.translucent=!0),`vec4(${p}, ${y})`}}else return"vec4(1.0)";return`vec4(${d[0]}, 1.0)`}else{if(l==="rgb")return i=Xoe(this),c(i)?Z5(i):`vec4(${d[0]} / 255.0, ${d[1]} / 255.0, ${d[2]} / 255.0, 1.0)`;if(l==="rgba")return d[3]!=="1.0"&&(t.translucent=!0),i=Xoe(this),c(i)?Z5(i):`vec4(${d[0]} / 255.0, ${d[1]} / 255.0, ${d[2]} / 255.0, ${d[3]})`;if(l==="hsl")return i=Eoe(this),c(i)?Z5(i):`vec4(czm_HSLToRGB(vec3(${d[0]}, ${d[1]}, ${d[2]})), 1.0)`;if(l==="hsla")return i=Eoe(this),c(i)?(i.alpha!==1&&(t.translucent=!0),Z5(i)):(d[3]!=="1.0"&&(t.translucent=!0),`vec4(czm_HSLToRGB(vec3(${d[0]}, ${d[1]}, ${d[2]})), ${d[3]})`)}break;case gt.LITERAL_VECTOR:if(!c(o))throw new L("left should always be defined for type ExpressionNodeType.LITERAL_VECTOR");u=o.length,f=`${l}(`;for(let p=0;p0;){let u=t.pop();if(Y.equals(u.color,a.color))d=GH(n,s,d,i,o,u.batchIds,r),a.batchIds=a.batchIds.concat(u.batchIds),a.count=d-a.offset;else{let f=d;d=GH(n,s,d,i,o,u.batchIds,r),u.offset=f,u.count=d-f,l.push(u),a=u}}e._va.indexBuffer.copyFromArrayView(s),e._indices=s,e._batchedIndices=l}function EH(e,t,n,i,o,r,s){let a=e.bytesPerIndex,l=r.length;for(let d=0;d0;){let f=t.pop();if(Y.equals(f.color,r.color))d=EH(a,l,d,n,i,f.batchIds,o),r.batchIds=r.batchIds.concat(f.batchIds),r.count=d-r.offset;else{let p=d;d=EH(a,l,d,n,i,f.batchIds,o),f.offset=p,f.count=d-p,s.push(f),r=f}}let u=e._va;e._va=e._vaSwap,e._vaSwap=u,e._batchedIndices=s}function QFe(e,t){return t.color.toRgba()-e.color.toRgba()}function jFe(e,t){if(!e._batchDirty)return!1;let n=e._batchedIndices,i=n.length,o=!1,r={};for(let s=0;s=g&&s{e.isDestroyed()||(e._error=h)}):void 0}}function fAe(e){c(e._primitive)||(e._primitive=new o_({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)}Td.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};Td.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};Td.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};Td.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};Td.prototype.update=function(e){if(!this._ready){if(c(this._promise)||(this._promise=mAe(this)),c(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)};Td.prototype.isDestroyed=function(){return!1};Td.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};var Jp=Td;function yh(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,bAe(this,i,o)}Object.defineProperties(yh.prototype,{featuresLength:{get:function(){return c(this._batchTable)?this._batchTable.featuresLength:0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return c(this._geometries)?this._geometries.trianglesLength:0}},geometryByteLength:{get:function(){return c(this._geometries)?this._geometries.geometryByteLength:0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return c(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 hAe(e){return function(t,n){c(e._geometries)&&e._geometries.updateCommands(t,n)}}function pAe(e,t){let n,i,o,r,s,a=e.BOXES_LENGTH??0,l=e.CYLINDERS_LENGTH??0,d=e.ELLIPSOIDS_LENGTH??0,u=e.SPHERES_LENGTH??0;if(a>0&&c(e.BOX_BATCH_IDS)){let h=t.byteOffset+e.BOX_BATCH_IDS.byteOffset;n=new Uint16Array(t.buffer,h,a)}if(l>0&&c(e.CYLINDER_BATCH_IDS)){let h=t.byteOffset+e.CYLINDER_BATCH_IDS.byteOffset;i=new Uint16Array(t.buffer,h,l)}if(d>0&&c(e.ELLIPSOID_BATCH_IDS)){let h=t.byteOffset+e.ELLIPSOID_BATCH_IDS.byteOffset;o=new Uint16Array(t.buffer,h,d)}if(u>0&&c(e.SPHERE_BATCH_IDS)){let h=t.byteOffset+e.SPHERE_BATCH_IDS.byteOffset;r=new Uint16Array(t.buffer,h,u)}let f=c(n)||c(i)||c(o)||c(r),p=a>0&&!c(n)||l>0&&!c(i)||d>0&&!c(o)||u>0&&!c(r);if(f&&p)throw new le("If one group of batch ids is defined, then all batch ids must be defined");if(!c(n)&&!c(i)&&!c(o)&&!c(r)){let h=0;if(!c(n)&&a>0)for(n=new Uint16Array(a),s=0;s0)for(i=new Uint16Array(l),s=0;s0)for(o=new Uint16Array(d),s=0;s0)for(r=new Uint16Array(u),s=0;s0&&(y=er(i,n,d),n+=d,u>0&&(h=new Uint8Array(t,n,u),h=new Uint8Array(h)));let g=f.BOXES_LENGTH??0,x=f.CYLINDERS_LENGTH??0,S=f.ELLIPSOIDS_LENGTH??0,V=f.SPHERES_LENGTH??0,Z=g+x+S+V,R=new zp(e,Z,y,h,hAe(e));if(e._batchTable=R,Z===0)return;let E=e.tile.computedTransform,I;c(f.RTC_CENTER)&&(I=m.unpack(f.RTC_CENTER),M.multiplyByPoint(E,I,I));let v=pAe(f,p);if(g>0||x>0||S>0||V>0){let P,F,N,b;if(g>0){let G=p.byteOffset+f.BOXES.byteOffset;P=new Float32Array(p.buffer,G,Jp.packedBoxLength*g)}if(x>0){let G=p.byteOffset+f.CYLINDERS.byteOffset;F=new Float32Array(p.buffer,G,Jp.packedCylinderLength*x)}if(S>0){let G=p.byteOffset+f.ELLIPSOIDS.byteOffset;N=new Float32Array(p.buffer,G,Jp.packedEllipsoidLength*S)}if(V>0){let G=p.byteOffset+f.SPHERES.byteOffset;b=new Float32Array(p.buffer,G,Jp.packedSphereLength*V)}return e._geometries=new Jp({boxes:P,boxBatchIds:v.boxes,cylinders:F,cylinderBatchIds:v.cylinders,ellipsoids:N,ellipsoidBatchIds:v.ellipsoids,spheres:b,sphereBatchIds:v.spheres,center:I,modelMatrix:E,batchTable:R,boundingVolume:e.tile.boundingVolume.boundingVolume}),e}return Promise.resolve(e)}function Foe(e){let t=e.featuresLength;if(!c(e._features)&&t>0){let n=new Array(t);c(e._geometries)&&e._geometries.createFeatures(e,n),e._features=n}}yh.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)};yh.prototype.getFeature=function(e){let t=this.featuresLength;if(!c(e)||e<0||e>=t)throw new L(`batchId is required and between zero and featuresLength - 1 (${t-1}).`);return Foe(this),this._features[e]};yh.prototype.applyDebugSettings=function(e,t){c(this._geometries)&&this._geometries.applyDebugSettings(e,t)};yh.prototype.applyStyle=function(e){Foe(this),c(this._geometries)&&this._geometries.applyStyle(e,this._features)};yh.prototype.update=function(e,t){c(this._geometries)&&(this._geometries.classificationType=this._tileset.classificationType,this._geometries.debugWireframe=this._tileset.debugWireframe,this._geometries.update(t)),c(this._batchTable)&&this._geometries.ready&&(this._batchTable.update(e,t),this._ready=!0)};yh.prototype.pick=function(e,t,n){};yh.prototype.isDestroyed=function(){return!1};yh.prototype.destroy=function(){return this._geometries=this._geometries&&this._geometries.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),he(this)};var DX=yh;var Mgn=_(T(),1);var hdn=_(T(),1);var XH={};XH.encode2D=function(e,t,n){let i=Math.pow(2,e);if(C.typeOf.number("level",e),C.typeOf.number("x",t),C.typeOf.number("y",n),e<1)throw new L("Hilbert level cannot be less than 1.");if(t<0||t>=i||n<0||n>=i)throw new L("Invalid coordinates for given level.");let o={x:t,y:n},r,s,a,l=BigInt(0);for(a=i/2;a>0;a/=2)r=(o.x&a)>0?1:0,s=(o.y&a)>0?1:0,l+=BigInt((3*r^s)*a*a),Aoe(i,o,r,s);return l};XH.decode2D=function(e,t){if(C.typeOf.number("level",e),C.typeOf.bigint("index",t),e<1)throw new L("Hilbert level cannot be less than 1.");if(t=BigInt(Math.pow(4,e)))throw new L("Hilbert index exceeds valid maximum for given level.");let n=Math.pow(2,e),i={x:0,y:0},o,r,s,a;for(s=1,a=t;s>>0,IH=2*cy+1,ry=4,koe=[],Uoe=[],xAe=[[0,1,3,2],[0,2,3,1],[3,2,0,1],[3,1,0,2]],sy=1,RC=2,I5=[sy,0,0,sy|RC];function dr(e){if(!Ot.supportsBigInt())throw new le("S2 required BigInt support");if(!c(e))throw new L("cell ID is required.");if(!dr.isValidId(e))throw new L("cell ID is invalid.");this._cellId=e,this._level=dr.getLevel(e)}dr.fromToken=function(e){if(C.typeOf.string("token",e),!dr.isValidToken(e))throw new L("token is invalid.");return new dr(dr.getIdFromToken(e))};dr.isValidId=function(e){return C.typeOf.bigint("cellId",e),!(e<=0||e>>BigInt(IH)>5||!(e&~e+BigInt(1)&BigInt("0x1555555555555555")))};dr.isValidToken=function(e){return C.typeOf.string("token",e),/^[0-9a-fA-F]{1,16}$/.test(e)?dr.isValidId(dr.getIdFromToken(e)):!1};dr.getIdFromToken=function(e){return C.typeOf.string("token",e),BigInt("0x"+e+"0".repeat(16-e.length))};dr.getTokenFromId=function(e){C.typeOf.bigint("cellId",e);let t=Math.floor(EAe(e)/4),n=e.toString(16).replace(/0*$/,"");return Array(17-t-n.length).join("0")+n};dr.getLevel=function(e){if(C.typeOf.bigint("cellId",e),!dr.isValidId(e))throw new L;let t=0;for(;e!==BigInt(0)&&!(e&BigInt(1));)t++,e=e>>BigInt(1);return cy-(t>>1)};dr.prototype.getChild=function(e){if(C.typeOf.number("index",e),e<0||e>3)throw new L("child index must be in the range [0-3].");if(this._level===30)throw new L("cannot get child of leaf cell.");let t=Boe(this._cellId)>>BigInt(2),n=this._cellId+BigInt(2*e+1-4)*t;return new dr(n)};dr.prototype.getParent=function(){if(this._level===0)throw new L("cannot get parent of root cell.");let e=Boe(this._cellId)<3)throw new L("vertex index must be in the range [0-3].");t=t??re.WGS84;let n=TAe(this._cellId,this._level,e);n=m.normalize(n,n);let i=new pe.fromCartesian(n,re.UNIT_SPHERE);return pe.toCartesian(i,t,new m)};dr.fromFacePositionLevel=function(e,t,n){if(C.typeOf.bigint("position",t),e<0||e>5)throw new L("Invalid S2 Face (must be within 0-5)");if(n<0||n>cy)throw new L("Invalid level (must be within 0-30)");if(t<0||t>=Math.pow(4,n))throw new L("Invalid Hilbert position for level");let i=(e<4?"0":"")+(e<2?"0":"")+e.toString(2),o=t.toString(2),r=Array(2*n-o.length+1).join("0"),s=Array(IH-2*n).join("0"),a=BigInt(`0b${i}${r}${o}1${s}`);return new dr(a)};function _Ae(e,t){let n=SAe(e,t);return CAe(n[0],n[1],n[2])}function TAe(e,t,n){let i=Ooe(e,t),o=VAe([i[1],i[2]],t),r=n>>1&1;return Doe(i[0],o[0][r^n&1],o[1][r])}function SAe(e,t){let n=Ooe(e),i=n[0],o=n[1],r=n[2],s=t===30,a=!s&&(BigInt(o)^e>>BigInt(2))&BigInt(1),l=s?1:a?2:0,d=(o<<1)+l,u=(r<<1)+l;return[i,d,u]}function Ooe(e){koe.length===0&&ZAe();let t=Number(e>>BigInt(IH)),n=t&sy,i=(1<=0;s--){let l=(1<<2*(s===7?cy-7*ry:ry))-1;n+=Number(e>>BigInt(s*2*ry+1)&BigInt(l))<<2,n=Uoe[n];let d=s*ry;o+=n>>ry+2<>2&i)<=.5?1/3*(4*e*e-1):1/3*(1-4*(1-e)*(1-e))}function Moe(e){return 1/gAe*e}function VAe(e,t){let n=[[],[]],i=LAe(t);for(let o=0;o<2;++o){let r=e[o]&-i,s=r+i;n[o][0]=W5(Noe(r)),n[o][1]=W5(Noe(s))}return n}function LAe(e){return 1<>>0}function Noe(e){return 1/yAe*e}function ay(e,t,n,i,o,r){if(e===ry){let s=(t<>1),n+(s[0]&1),i,o,r^I5[0]),ay(e,t+(s[1]>>1),n+(s[1]&1),i,o+1,r^I5[1]),ay(e,t+(s[2]>>1),n+(s[2]&1),i,o+2,r^I5[2]),ay(e,t+(s[3]>>1),n+(s[3]&1),i,o+3,r^I5[3])}}function ZAe(){ay(0,0,0,0,0,0),ay(0,0,0,sy,0,sy),ay(0,0,0,RC,0,RC),ay(0,0,0,sy|RC,0,sy|RC)}function Boe(e){return e&~e+BigInt(1)}function RAe(e){return BigInt(1)<>3,r=i%8;n+=e[o]>>r&1}return n}Object.defineProperties(WH.prototype,{lengthBits:{get:function(){return this._lengthBits}},availableCount:{get:function(){return this._availableCount}}});WH.prototype.getBit=function(e){if(e<0||e>=this._lengthBits)throw new L("Bit index out of bounds.");if(c(this._constant))return this._constant;let t=e>>3,n=e%8;return(this._bitstream[t]>>n&1)===1};var GC=WH;var Adn=_(T(),1);function jp(e){e=e??z.EMPTY_OBJECT;let t=e.metadataTable,n=e.class,i=e.entityId,o=e.propertyTableJson;C.typeOf.object("options.metadataTable",t),C.typeOf.object("options.class",n),C.typeOf.number("options.entityId",i),C.typeOf.object("options.propertyTableJson",o),this._class=n,this._metadataTable=t,this._entityId=i,this._extensions=o.extensions,this._extras=o.extras}Object.defineProperties(jp.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});jp.prototype.hasProperty=function(e){return this._metadataTable.hasProperty(e)};jp.prototype.hasPropertyBySemantic=function(e){return this._metadataTable.hasPropertyBySemantic(e)};jp.prototype.getPropertyIds=function(e){return this._metadataTable.getPropertyIds(e)};jp.prototype.getProperty=function(e){return this._metadataTable.getProperty(this._entityId,e)};jp.prototype.setProperty=function(e,t){return this._metadataTable.setProperty(this._entityId,e,t)};jp.prototype.getPropertyBySemantic=function(e){return this._metadataTable.getPropertyBySemantic(this._entityId,e)};jp.prototype.setPropertyBySemantic=function(e,t){return this._metadataTable.setPropertyBySemantic(this._entityId,e,t)};var EC=jp;var kdn=_(T(),1);var w5={QUADTREE:"QUADTREE",OCTREE:"OCTREE"};w5.getBranchingFactor=function(e){switch(e){case w5.OCTREE:return 8;case w5.QUADTREE:return 4;default:throw new L("subdivisionScheme is not a valid value.")}};var tr=Object.freeze(w5);var qdn=_(T(),1);var Hdn=_(T(),1);function ma(){}Object.defineProperties(ma.prototype,{class:{get:function(){L.throwInstantiationError()}}});ma.prototype.hasProperty=function(e){L.throwInstantiationError()};ma.prototype.hasPropertyBySemantic=function(e){L.throwInstantiationError()};ma.prototype.getPropertyIds=function(e){L.throwInstantiationError()};ma.prototype.getProperty=function(e){L.throwInstantiationError()};ma.prototype.setProperty=function(e,t){L.throwInstantiationError()};ma.prototype.getPropertyBySemantic=function(e){L.throwInstantiationError()};ma.prototype.setPropertyBySemantic=function(e,t){L.throwInstantiationError()};ma.hasProperty=function(e,t,n){if(C.typeOf.string("propertyId",e),C.typeOf.object("properties",t),C.typeOf.object("classDefinition",n),c(t[e]))return!0;let i=n.properties;if(!c(i))return!1;let o=i[e];return!!(c(o)&&c(o.default))};ma.hasPropertyBySemantic=function(e,t,n){C.typeOf.string("semantic",e),C.typeOf.object("properties",t),C.typeOf.object("classDefinition",n);let i=n.propertiesBySemantic;if(!c(i))return!1;let o=i[e];return c(o)};ma.getPropertyIds=function(e,t,n){C.typeOf.object("properties",e),C.typeOf.object("classDefinition",t),n=c(n)?n:[],n.length=0;for(let o in e)e.hasOwnProperty(o)&&c(e[o])&&n.push(o);let i=t.properties;if(c(i))for(let o in i)i.hasOwnProperty(o)&&!c(e[o])&&c(i[o].default)&&n.push(o);return n};ma.getProperty=function(e,t,n){if(C.typeOf.string("propertyId",e),C.typeOf.object("properties",t),C.typeOf.object("classDefinition",n),!c(n.properties[e]))throw new L(`Class definition missing property ${e}`);let i=n.properties[e],o=t[e];Array.isArray(o)&&(o=o.slice());let r=!0;if(o=i.handleNoData(o),!c(o)&&c(i.default))return o=He(i.default,!0),i.unpackVectorAndMatrixTypes(o,r);if(c(o))return o=i.normalize(o),o=i.applyValueTransform(o),i.unpackVectorAndMatrixTypes(o,r)};ma.setProperty=function(e,t,n,i){if(C.typeOf.string("propertyId",e),C.defined("value",t),C.typeOf.object("properties",n),C.typeOf.object("classDefinition",i),!c(n[e]))return!1;Array.isArray(t)&&(t=t.slice());let o,r=i.properties;return c(r)&&(o=r[e]),c(o)&&(t=o.packVectorAndMatrixTypes(t,!0),t=o.unapplyValueTransform(t),t=o.unnormalize(t)),n[e]=t,!0};ma.getPropertyBySemantic=function(e,t,n){C.typeOf.string("semantic",e),C.typeOf.object("properties",t),C.typeOf.object("classDefinition",n);let i=n.propertiesBySemantic;if(!c(i))return;let o=i[e];if(c(o))return ma.getProperty(o.id,t,n)};ma.setPropertyBySemantic=function(e,t,n,i){C.typeOf.string("semantic",e),C.defined("value",t),C.typeOf.object("properties",n),C.typeOf.object("classDefinition",i);let o=i.propertiesBySemantic;if(!c(o))return!1;let r=i.propertiesBySemantic[e];return c(r)?ma.setProperty(r.id,t,n,i):!1};var Nn=ma;function qp(e){e=e??z.EMPTY_OBJECT;let t=e.subtreeMetadata,n=e.class;C.typeOf.object("options.subtreeMetadata",t),C.typeOf.object("options.class",n);let i=c(t.properties)?t.properties:{};this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(qp.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});qp.prototype.hasProperty=function(e){return Nn.hasProperty(e,this._properties,this._class)};qp.prototype.hasPropertyBySemantic=function(e){return Nn.hasPropertyBySemantic(e,this._properties,this._class)};qp.prototype.getPropertyIds=function(e){return Nn.getPropertyIds(this._properties,this._class,e)};qp.prototype.getProperty=function(e){return Nn.getProperty(e,this._properties,this._class)};qp.prototype.setProperty=function(e,t){return Nn.setProperty(e,t,this._properties,this._class)};qp.prototype.getPropertyBySemantic=function(e){return Nn.getPropertyBySemantic(e,this._properties,this._class)};qp.prototype.setPropertyBySemantic=function(e,t){return Nn.setPropertyBySemantic(e,t,this._properties,this._class)};var BX=qp;var qun=_(T(),1);var Bun=_(T(),1);var run=_(T(),1);var Ft={INT8:"INT8",UINT8:"UINT8",INT16:"INT16",UINT16:"UINT16",INT32:"INT32",UINT32:"UINT32",INT64:"INT64",UINT64:"UINT64",FLOAT32:"FLOAT32",FLOAT64:"FLOAT64"};Ft.getMinimum=function(e){switch(C.typeOf.string("type",e),e){case Ft.INT8:return-128;case Ft.UINT8:return 0;case Ft.INT16:return-32768;case Ft.UINT16:return 0;case Ft.INT32:return-2147483648;case Ft.UINT32:return 0;case Ft.INT64:return Ot.supportsBigInt()?BigInt("-9223372036854775808"):-Math.pow(2,63);case Ft.UINT64:return Ot.supportsBigInt()?BigInt(0):0;case Ft.FLOAT32:return-34028234663852886e22;case Ft.FLOAT64:return-Number.MAX_VALUE}};Ft.getMaximum=function(e){switch(C.typeOf.string("type",e),e){case Ft.INT8:return 127;case Ft.UINT8:return 255;case Ft.INT16:return 32767;case Ft.UINT16:return 65535;case Ft.INT32:return 2147483647;case Ft.UINT32:return 4294967295;case Ft.INT64:return Ot.supportsBigInt()?BigInt("9223372036854775807"):Math.pow(2,63)-1;case Ft.UINT64:return Ot.supportsBigInt()?BigInt("18446744073709551615"):Math.pow(2,64)-1;case Ft.FLOAT32:return 34028234663852886e22;case Ft.FLOAT64:return Number.MAX_VALUE}};Ft.isIntegerType=function(e){switch(C.typeOf.string("type",e),e){case Ft.INT8:case Ft.UINT8:case Ft.INT16:case Ft.UINT16:case Ft.INT32:case Ft.UINT32:case Ft.INT64:case Ft.UINT64:return!0;default:return!1}};Ft.isUnsignedIntegerType=function(e){switch(C.typeOf.string("type",e),e){case Ft.UINT8:case Ft.UINT16:case Ft.UINT32:case Ft.UINT64:return!0;default:return!1}};Ft.isVectorCompatible=function(e){switch(C.typeOf.string("type",e),e){case Ft.INT8:case Ft.UINT8:case Ft.INT16:case Ft.UINT16:case Ft.INT32:case Ft.UINT32:case Ft.FLOAT32:case Ft.FLOAT64:return!0;default:return!1}};Ft.normalize=function(e,t){if(typeof e!="number"&&typeof e!="bigint")throw new L("value must be a number or a BigInt");if(!Ft.isIntegerType(t))throw new L("type must be an integer type");return Math.max(Number(e)/Number(Ft.getMaximum(t)),-1)};Ft.unnormalize=function(e,t){if(C.typeOf.number("value",e),!Ft.isIntegerType(t))throw new L("type must be an integer type");let n=Ft.getMaximum(t),i=Ft.isUnsignedIntegerType(t)?0:-n;return e=w.sign(e)*Math.round(Math.abs(e)*Number(n)),(t===Ft.INT64||t===Ft.UINT64)&&Ot.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)};Aa.prototype.handleNoData=function(e){let t=this._noData;if(!c(t))return e;if(!Koe(e,t))return e};function Koe(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 c(n)?t&&r?e.map(function(s){return n.unpack(s)}):i?n.unpackArray(e):n.unpack(e):e};Aa.prototype.packVectorAndMatrixTypes=function(e,t){t=t??!1;let n=lt.getMathType(this._type),i=this._isArray,o=lt.getComponentCount(this._type),r=i&&o>1;return c(n)?t&&r?e.map(function(s){return n.pack(s,[])}):i?n.packArray(e,[]):n.pack(e,[]):e};Aa.prototype.validate=function(e){if(!(!c(e)&&c(this._default)))return this._required&&!c(e)?"required property must have a value":this._isArray?PAe(this,e):Joe(this,e)};function PAe(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?Yoe(e,t,n):void 0}if(eAt.getMaximum(t))return Yoe(e,t,n)}function zoe(e,t){return`value ${e} of type ${t} must be finite`}function wH(e,t,n){if(!Array.isArray(e))return n(e,t);for(let i=0;i=n){let i=n-1;throw new L(`index is required and between zero and count - 1. Actual value: ${i}`)}}function UAe(e,t){$oe(e)&&ere(e);let n=e._classProperty,i=n.isArray,o=n.type,r=lt.getComponentCount(o);if(c(e._unpackedValues)){let s=e._unpackedValues[t];return i?He(s,!0):s}return!i&&r===1?e._getValue(t):qoe(e,n,t)}function qoe(e,t,n){let i,o;if(t.isVariableLengthArray){i=e._arrayOffsets.get(n),o=e._arrayOffsets.get(n+1)-i;let s=lt.getComponentCount(t.type);i*=s,o*=s}else{let a=(t.arrayLength??1)*e._vectorComponentCount;i=n*a,o=a}let r=new Array(o);for(let s=0;s>3,i=e%8;return(t.typedArray[n]>>i&1)===1}function YAe(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 l=n.getUint8(i+a);r&&(s?l!==0&&(l=~(l-1)&255,s=!1):l=~l&255),o+=l*Math.pow(256,a)}return r&&(o=-o),o}function zAe(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 l=n.getUint8(i+a);r&&(s?l!==0&&(l=~(l-1)&255,s=!1):l=~l&255),o+=BigInt(l)*(BigInt(1)<96?x-97:x>64?x-39:x+4}for(var S=0,g=0;g=3),l(n.exports.meshopt_spatialSortRemap,y,y.length/h,h*4)},encodeVertexBuffer:function(y,h,g){r(g>0&&g<=256),r(g%4==0);var x=n.exports.meshopt_encodeVertexBufferBound(h,g);return d(n.exports.meshopt_encodeVertexBuffer,x,y,h,g)},encodeIndexBuffer:function(y,h,g){r(g==2||g==4),r(h%3==0);var x=f(y,g),S=n.exports.meshopt_encodeIndexBufferBound(h,u(x)+1);return d(n.exports.meshopt_encodeIndexBuffer,S,x,h,4)},encodeIndexSequence:function(y,h,g){r(g==2||g==4);var x=f(y,g),S=n.exports.meshopt_encodeIndexSequenceBound(h,u(x)+1);return d(n.exports.meshopt_encodeIndexSequence,S,x,h,4)},encodeGltfBuffer:function(y,h,g,x){var S={ATTRIBUTES:this.encodeVertexBuffer,TRIANGLES:this.encodeIndexBuffer,INDICES:this.encodeIndexSequence};return r(S[x]),S[x](y,h,g)},encodeFilterOct:function(y,h,g,x){return r(g==4||g==8),r(x>=1&&x<=16),p(n.exports.meshopt_encodeFilterOct,y,h,g,x,16)},encodeFilterQuat:function(y,h,g,x){return r(g==8),r(x>=4&&x<=16),p(n.exports.meshopt_encodeFilterQuat,y,h,g,x,16)},encodeFilterExp:function(y,h,g,x,S){r(g>0&&g%4==0),r(x>=1&&x<=24);var V={Separate:0,SharedVector:1,SharedComponent:2,Clamped:3};return p(n.exports.meshopt_encodeFilterExp,y,h,g,x,g,S?V[S]:1)}}}();var xmn=_(T()),tre=function(){var e="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:q:Odkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq;w8Wqdbk;esezu8Jjjjjbcj;eb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Radz1jjjbhwcj;abad9Uc;WFbGgocjdaocjd6EhDaicefhocbhqdnindndndnaeaq9nmbaDaeaq9RaqaDfae6Egkcsfglcl4cifcd4hxalc9WGgmTmecbhPawcjdfhsaohzinaraz9Rax6mvarazaxfgo9RcK6mvczhlcbhHinalgic9WfgOawcj;cbffhldndndndndnazaOco4fRbbaHcoG4ciGPlbedibkal9cb83ibalcwf9cb83ibxikalaoRblaoRbbgOco4gAaAciSgAE86bbawcj;cbfaifglcGfaoclfaAfgARbbaOcl4ciGgCaCciSgCE86bbalcVfaAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc7faAaCfgARbbaOciGgOaOciSgOE86bbalctfaAaOfgARbbaoRbegOco4gCaCciSgCE86bbalc91faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc4faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc93faAaCfgARbbaOciGgOaOciSgOE86bbalc94faAaOfgARbbaoRbdgOco4gCaCciSgCE86bbalc95faAaCfgARbbaOcl4ciGgCaCciSgCE86bbalc96faAaCfgARbbaOcd4ciGgCaCciSgCE86bbalc97faAaCfgARbbaOciGgOaOciSgOE86bbalc98faAaOfgORbbaoRbigoco4gAaAciSgAE86bbalc99faOaAfgORbbaocl4ciGgAaAciSgAE86bbalc9:faOaAfgORbbaocd4ciGgAaAciSgAE86bbalcufaOaAfglRbbaociGgoaociSgoE86bbalaofhoxdkalaoRbwaoRbbgOcl4gAaAcsSgAE86bbawcj;cbfaifglcGfaocwfaAfgARbbaOcsGgOaOcsSgOE86bbalcVfaAaOfgORbbaoRbegAcl4gCaCcsSgCE86bbalc7faOaCfgORbbaAcsGgAaAcsSgAE86bbalctfaOaAfgORbbaoRbdgAcl4gCaCcsSgCE86bbalc91faOaCfgORbbaAcsGgAaAcsSgAE86bbalc4faOaAfgORbbaoRbigAcl4gCaCcsSgCE86bbalc93faOaCfgORbbaAcsGgAaAcsSgAE86bbalc94faOaAfgORbbaoRblgAcl4gCaCcsSgCE86bbalc95faOaCfgORbbaAcsGgAaAcsSgAE86bbalc96faOaAfgORbbaoRbvgAcl4gCaCcsSgCE86bbalc97faOaCfgORbbaAcsGgAaAcsSgAE86bbalc98faOaAfgORbbaoRbogAcl4gCaCcsSgCE86bbalc99faOaCfgORbbaAcsGgAaAcsSgAE86bbalc9:faOaAfgORbbaoRbrgocl4gAaAcsSgAE86bbalcufaOaAfglRbbaocsGgoaocsSgoE86bbalaofhoxekalao8Pbb83bbalcwfaocwf8Pbb83bbaoczfhokdnaiam9pmbaHcdfhHaiczfhlarao9RcL0mekkaiam6mvaoTmvdnakTmbawaPfRbbhHawcj;cbfhlashiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkkascefhsaohzaPcefgPad9hmbxikkcbc99arao9Radcaadca0ESEhoxlkaoaxad2fhCdnakmbadhlinaoTmlarao9Rax6mlaoaxfhoalcufglmbkaChoxekcbhmawcjdfhAinarao9Rax6miawamfRbbhHawcj;cbfhlaAhiakhOinaialRbbgzce4cbazceG9R7aHfgH86bbaiadfhialcefhlaOcufgOmbkaAcefhAaoaxfhoamcefgmad9hmbkaChokabaqad2fawcjdfakad2z1jjjb8Aawawcjdfakcufad2fadz1jjjb8Aakaqfhqaombkc9:hoxekc9:hokavcj;ebf8Kjjjjbaok;cseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok: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::NUdbabclfhbadcufgdmbkkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkkkebcjwklzNbb",t="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q:6dkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq:p9sqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:N8JlHud97euo978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnadcefal0mbcuhoaiRbbc:Ge9hmbavaialfgrad9Rad;8qbbcj;abad9UhlaicefhodnaeTmbadTmbalc;WFbGglcjdalcjd6EhwcbhDinawaeaD9RaDawfae6Egqcsfglc9WGgkci2hxakcethmalcl4cifcd4hPabaDad2fhsakc;ab6hzcbhHincbhOaohAdndninaraA9RaP6meavcj;cbfaOak2fhCaAaPfhocbhidnazmbarao9Rc;Gb6mbcbhlinaCalfhidndndndndnaAalco4fRbbgXciGPlbedibkaipxbbbbbbbbbbbbbbbbpklbxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklbaoczfhokdndndndndnaXcd4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklzxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklzaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklzaoczfhokdndndndndnaXcl4ciGPlbedibkaipxbbbbbbbbbbbbbbbbpklaxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spklaaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaiaopbbbpklaaoczfhokdndndndndnaXco4Plbedibkaipxbbbbbbbbbbbbbbbbpkl8WxikaiaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaoclfaYpQbfaXc:q:yjjbfRbbfhoxdkaiaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibaXc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgXcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkl8WaocwfaYpQbfaXc:q:yjjbfRbbfhoxekaiaopbbbpkl8Waoczfhokalc;abfhialcjefak0meaihlarao9Rc;Fb0mbkkdnaiak9pmbaici4hlinarao9RcK6miaCaifhXdndndndndnaAaico4fRbbalcoG4ciGPlbedibkaXpxbbbbbbbbbbbbbbbbpkbbxikaXaopbblaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLgQcdp:meaQpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9ogLpxiiiiiiiiiiiiiiiip8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaoclfaYpQbfaKc:q:yjjbfRbbfhoxdkaXaopbbwaopbbbgQclp:meaQpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9ogLpxssssssssssssssssp8JgQp5b9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibaKc:q:yjjbfpbbbgYaYpmbbbbbbbbbbbbbbbbaQp5e9cjF;8;4;W;G;ab9:9cU1:NgKcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPaLaQp9spkbbaocwfaYpQbfaKc:q:yjjbfRbbfhoxekaXaopbbbpkbbaoczfhokalcdfhlaiczfgiak6mbkkaoTmeaohAaOcefgOclSmdxbkkc9:hoxlkdnakTmbavcjdfaHfhiavaHfpbdbhYcbhXinaiavcj;cbfaXfglpblbgLcep9TaLpxeeeeeeeeeeeeeeeegQp9op9Hp9rgLalakfpblbg8Acep9Ta8AaQp9op9Hp9rg8ApmbzeHdOiAlCvXoQrLgEalamfpblbg3cep9Ta3aQp9op9Hp9rg3alaxfpblbg5cep9Ta5aQp9op9Hp9rg5pmbzeHdOiAlCvXoQrLg8EpmbezHdiOAlvCXorQLgQaQpmbedibedibedibediaYp9UgYp9AdbbaiadfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaEa8EpmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwKDYq8AkEx3m5P8Es8FgLa3a5pmwKDYq8AkEx3m5P8Es8Fg8ApmbezHdiOAlvCXorQLgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfglaYaLa8ApmwDKYqk8AExm35Ps8E8FgQaQpmbedibedibedibedip9UgYp9AdbbaladfglaYaQaQpmlvorlvorlvorlvorp9UgYp9AdbbaladfglaYaQaQpmwDqkwDqkwDqkwDqkp9UgYp9AdbbaladfglaYaQaQpmxmPsxmPsxmPsxmPsp9UgYp9AdbbaladfhiaXczfgXak6mbkkaHclfgHad6mbkasavcjdfaqad2;8qbbavavcjdfaqcufad2fad;8qbbaqaDfgDae6mbkkcbc99arao9Radcaadca0ESEhokavcj;kbf8Kjjjjbaokwbz:bjjjbk::seHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:flevu8Jjjjjbcz9Rhvc9:hodnaecvfal0mbcuhoaiRbbc;:eGc;qe9hmbav9cb83iwaicefhraialfc98fhwdnaeTmbdnadcdSmbcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcdtfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfglBdbaoalBdbaDcefgDae9hmbxdkkcbhDindnaraw6mbc9:skarcefhoar8SbbglcFeGhidndnalcu9mmbaohrxekarcvfhraicFbGhicrhldninao8SbbgdcFbGaltaiVhiadcu9kmeaocefhoalcrfglc8J9hmbxdkkaocefhrkabaDcetfaic8Etc8F91aicd47avcwfaiceGcdtVgoydbfgl87ebaoalBdbaDcefgDae9hmbkkcbc99arawSEhokaok:wPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp: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;6eawczp: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;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiaeciGgvcitgdfcbcaad9R;8kbaiabalcitfglad;8qbbdnavTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;6eawczp: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;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkalaiad;8qbbkk;4wllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp: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:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiaeciGgvcitgofcbcaao9R;8kbaiabalcitfgwao;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:j83iKkawaiao;8qbbkk:Pddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaialciGgecdtgdVcbc;abad9R;8kbaiabavcdtfgvad;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkavaiad;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(S){r=S.instance,r.exports.__wasm_call_ctors()});function a(S){for(var V=new Uint8Array(S.length),Z=0;Z96?R-97:R>64?R-39:R+4}for(var E=0,Z=0;Z0?g(S,V,Z,u[R],d[E]):s.then(function(){var I=new Uint8Array(S*V);return l(r,r.exports[u[R]],I,S,V,Z,r.exports[d[E]]),I})}}}();var Smn=_(T()),_mn=function(){var e="b9H79Tebbbe9Hk9Geueu9Geub9Gbb9Gsuuuuuuuuuuuu99uueu9Gvuuuuub9Gvuuuuue999Gquuuuuuu99uueu9Gwuuuuuu99ueu9Giuuue999Gluuuueu9GiuuueuizsdilvoirwDbqqbeqlve9Weiiviebeoweuecj:Pdkr:Tewo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbz9TW79O9V9Wt9F79P9T9W29P9M95bl8E9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9OcttV9P9I91tW7bvQ9TW79O9V9Wt9F79P9T9W29P9M959q9V9P9Ut7boX9TW79O9V9Wt9F79P9T9W29P9M959t9J9H2Wbra9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9Wbwl79IV9RbDDwebcekdmxq;UMesdbk:kfvKue99euY99Qu8Jjjjjbc;W;qb9Rgs8Kjjjjbcbhzascxfcbc;Kbz:ljjjb8AdnabaeSmbabaeadcdtz:kjjjb8AkdnamcdGTmbalcrfci4gHcbyd;S1jjbHjjjjbbheascxfasyd2gOcdtfaeBdbasaOcefBd2aecbaHz:ljjjbhAcbhlcbhednadTmbcbhlabheadhHinaAaeydbgOci4fgCaCRbbgCceaOcrGgOtV86bbaCcu7aO4ceGalfhlaeclfheaHcufgHmbkcualcdtalcFFFFi0Ehekaecbyd;S1jjbHjjjjbbhzascxfasyd2gecdtfazBdbasaecefBd2alcd4alfhOcehHinaHgecethHaeaO6mbkcbhXcuaecdtgOaecFFFFi0Ecbyd;S1jjbHjjjjbbhHascxfasyd2gCcdtfaHBdbasaCcefBd2aHcFeaOz:ljjjbhQdnadTmbaecufhCcbhLinabaXcdtfgKydbgAc:v;t;h;Ev2hOcbhedndninaQaOaCGgOcdtfgYydbgHcuSmeazaHcdtfydbaASmdaecefgeaOfhOaeaC9nmbxdkkazaLcdtfaABdbaYaLBdbaLhHaLcefhLkaKaHBdbaXcefgXad9hmbkkaQcbyd;O1jjbH:bjjjbbasasyd2cufBd2kcualcefgecdtaecFFFFi0Ecbyd;S1jjbHjjjjbbh8Aascxfasyd2gecdtfa8ABdbasa8ABdlasaecefBd2cuadcitadcFFFFe0Ecbyd;S1jjbHjjjjbbhEascxfasyd2gecdtfaEBdbasaEBdwasaecefBd2asclfabadalcbz:cjjjbcualcdtg3alcFFFFi0Eg5cbyd;S1jjbHjjjjbbhQascxfasyd2gecdtfaQBdbasaecefBd2a5cbyd;S1jjbHjjjjbbh8Eascxfasyd2gecdtfa8EBdbasaecefBd2alcd4alfhOcehHinaHgecethHaeaO6mbkcbhLcuaecdtgOaecFFFFi0Ecbyd;S1jjbHjjjjbbhHascxfasyd2gCcdtfaHBdbasaCcefBd2aHcFeaOz:ljjjbhXdnalTmbavcd4hCaecufhHinaLhednazTmbazaLcdtfydbhekaiaeaC2cdtfgeydlgOcH4aO7c:F:b:DD2aeydbgOcH4aO7c;D;O:B8J27aeydwgecH4ae7c:3F;N8N27aHGheaLcdth8FdndndndndnazTmbaza8FfhKcbhOinaXaecdtfgYydbgAcuSmlaiazaAcdtfydbaC2cdtfaiaKydbaC2cdtfcxz:ojjjbTmiaOcefgOaefaHGheaOaH9nmbxdkkaiaLaC2cdtfhKcbhOinaXaecdtfgYydbgAcuSmiaiaAaC2cdtfaKcxz:ojjjbTmdaOcefgOaefaHGheaOaH9nmbkkcbhYkaYydbgecu9hmekaYaLBdbaLhekaQa8FfaeBdbaLcefgLal9hmbkcbhea8EhHinaHaeBdbaHclfhHalaecefge9hmbkcbheaQhHa8EhOindnaeaHydbgCSmbaOa8EaCcdtfgCydbBdbaCaeBdbkaHclfhHaOclfhOalaecefge9hmbkkcbhaaXcbyd;O1jjbH:bjjjbbasasyd2cufBd2alcbyd;S1jjbHjjjjbbhXascxfasyd2gecdtfaXBdbasaecefBd2a5cbyd;S1jjbHjjjjbbheascxfasyd2gHcdtfaeBdbasaHcefBd2a5cbyd;S1jjbHjjjjbbhHascxfasyd2gOcdtfaHBdbasaOcefBd2aecFea3z:ljjjbhhaHcFea3z:ljjjbhgdnalTmbaEcwfh8Jindna8AaagOcefgacdtfydbgCa8AaOcdtgefydbgHSmbaCaH9Rh8FaEaHcitfh3agaefh8KahaefhLcbhAindndna3aAcitfydbgYaO9hmbaLaOBdba8KaOBdbxekdna8AaYcdtg8LfgeclfydbgHaeydbgeSmbaEaecitgCfydbaOSmeaHae9Rh8Maecu7aHfhKa8JaCfhHcbheinaKaeSmeaecefheaHydbhCaHcwfhHaCaO9hmbkaea8M6mekaga8LfgeaOaYaeydbcuSEBdbaLaYaOaLydbcuSEBdbkaAcefgAa8F9hmbkkaaal9hmbkaQhHa8EhOaghCahhAcbheindndnaeaHydbgY9hmbdnaeaOydbgY9hmbaAydbhYdnaCydbgKcu9hmbaYcu9hmbaXaefcb86bbxikaXaefhLdnaeaKSmbaeaYSmbaLce86bbxikaLcl86bbxdkdnaea8EaYcdtgKfydb9hmbdnaCydbgLcuSmbaeaLSmbaAydbg8FcuSmbaea8FSmbagaKfydbg3cuSmba3aYSmbahaKfydbgKcuSmbaKaYSmbdnaQaLcdtfydbgYaQaKcdtfydb9hmbaYaQa8FcdtfydbgKSmbaKaQa3cdtfydb9hmbaXaefcd86bbxlkaXaefcl86bbxikaXaefcl86bbxdkaXaefcl86bbxekaXaefaXaYfRbb86bbkaHclfhHaOclfhOaCclfhCaAclfhAalaecefge9hmbkdnaqTmbdndnazTmbazheaQhHalhOindnaqaeydbfRbbTmbaXaHydbfcl86bbkaeclfheaHclfhHaOcufgOmbxdkkaQhealhHindnaqRbbTmbaXaeydbfcl86bbkaqcefhqaeclfheaHcufgHmbkkaQhealhOaXhHindnaXaeydbfRbbcl9hmbaHcl86bbkaeclfheaHcefhHaOcufgOmbkkamceGTmbaXhealhHindnaeRbbce9hmbaecl86bbkaecefheaHcufgHmbkkcualcx2alc;v:Q;v:Qe0Ecbyd;S1jjbHjjjjbbhaascxfasyd2gecdtfaaBdbasaecefBd2aaaialavazz:djjjbh8NdndnaDmbcbhycbh8Jxekcbh8JawhecbhHindnaeIdbJbbbb9ETmbasc;Wbfa8JcdtfaHBdba8Jcefh8JkaeclfheaDaHcefgH9hmbkcua8Jal2gecdtaecFFFFi0Ecbyd;S1jjbHjjjjbbhyascxfasyd2gecdtfayBdbasaecefBd2alTmba8JTmbarcd4hLdnazTmba8JcdthicbhYayhKinaoazaYcdtfydbaL2cdtfhAasc;WbfheaKhHa8JhOinaHaAaeydbcdtgCfIdbawaCfIdbNUdbaeclfheaHclfhHaOcufgOmbkaKaifhKaYcefgYal9hmbxdkka8JcdthicbhYayhKinaoaYaL2cdtfhAasc;WbfheaKhHa8JhOinaHaAaeydbcdtgCfIdbawaCfIdbNUdbaeclfheaHclfhHaOcufgOmbkaKaifhKaYcefgYal9hmbkkcualc8S2gHalc;D;O;f8U0EgCcbyd;S1jjbHjjjjbbheascxfasyd2gOcdtfaeBdbasaOcefBd2aecbaHz:ljjjbhqdndndndna8JTmbaCcbyd;S1jjbHjjjjbbhvascxfasyd2gecdtfavBdbcehOasaecefBd2avcbaHz:ljjjb8Acua8Jal2gecltgHaecFFFFb0Ecbyd;S1jjbHjjjjbbhrascxfasyd2gecdtfarBdbasaecefBd2arcbaHz:ljjjb8AadmexikcbhvadTmecbhrkcbhAabhHindnaaaHclfydbgYcx2fgeIdbaaaHydbgKcx2fgOIdbg8P:tgIaaaHcwfydbgLcx2fgCIdlaOIdlg8R:tg8SNaCIdba8P:tgRaeIdla8R:tg8UN:tg8Va8VNa8UaCIdwaOIdwg8W:tg8XNa8SaeIdwa8W:tg8UN:tg8Sa8SNa8UaRNa8XaIN:tgIaINMM:rgRJbbbb9ETmba8VaR:vh8VaIaR:vhIa8SaR:vh8SkaqaQaKcdtfydbc8S2fgea8SaR:rgRa8SNNg8UaeIdbMUdbaeaIaRaINg8YNg8XaeIdlMUdlaea8VaRa8VNg8ZNg80aeIdwMUdwaea8Ya8SNg8YaeIdxMUdxaea8Za8SNg81aeIdzMUdzaea8ZaINg8ZaeIdCMUdCaea8SaRa8Va8WNa8Sa8PNa8RaINMM:mg8RNg8PNg8SaeIdKMUdKaeaIa8PNgIaeId3MUd3aea8Va8PNg8VaeIdaMUdaaea8Pa8RNg8PaeId8KMUd8KaeaRaeIdyMUdyaqaQaYcdtfydbc8S2fgea8UaeIdbMUdbaea8XaeIdlMUdlaea80aeIdwMUdwaea8YaeIdxMUdxaea81aeIdzMUdzaea8ZaeIdCMUdCaea8SaeIdKMUdKaeaIaeId3MUd3aea8VaeIdaMUdaaea8PaeId8KMUd8KaeaRaeIdyMUdyaqaQaLcdtfydbc8S2fgea8UaeIdbMUdbaea8XaeIdlMUdlaea80aeIdwMUdwaea8YaeIdxMUdxaea81aeIdzMUdzaea8ZaeIdCMUdCaea8SaeIdKMUdKaeaIaeId3MUd3aea8VaeIdaMUdaaea8PaeId8KMUd8KaeaRaeIdyMUdyaHcxfhHaAcifgAad6mbkcbhiabhKinabaicdtfhYcbhHinaXaYaHc:G1jjbfydbcdtfydbgOfRbbhedndnaXaKaHfydbgCfRbbgAc99fcFeGcpe0mbaeceSmbaecd9hmekdnaAcufcFeGce0mbahaCcdtfydbaO9hmekdnaecufcFeGce0mbagaOcdtfydbaC9hmekdnaAcv2aefcj1jjbfRbbTmbaQaOcdtfydbaQaCcdtfydb0mekJbbacJbbacJbbjZaeceSEaAceSEh8ZdnaaaYaHc:K1jjbfydbcdtfydbcx2fgeIdwaaaCcx2fgAIdwg8R:tg8VaaaOcx2fgLIdwa8R:tg8Sa8SNaLIdbaAIdbg8W:tgIaINaLIdlaAIdlg8U:tgRaRNMMg8PNa8Va8SNaeIdba8W:tg80aINaRaeIdla8U:tg8YNMMg8Xa8SN:tg8Va8VNa80a8PNa8XaIN:tg8Sa8SNa8Ya8PNa8XaRN:tgIaINMM:rgRJbbbb9ETmba8VaR:vh8VaIaR:vhIa8SaR:vh8SkaqaQaCcdtfydbc8S2fgea8Sa8Za8P:rNgRa8SNNg8XaeIdbMUdbaeaIaRaINg8ZNg80aeIdlMUdlaea8VaRa8VNg8PNg8YaeIdwMUdwaea8Za8SNg8ZaeIdxMUdxaea8Pa8SNg81aeIdzMUdzaea8PaINgBaeIdCMUdCaea8SaRa8Va8RNa8Sa8WNa8UaINMM:mg8RNg8PNg8SaeIdKMUdKaeaIa8PNgIaeId3MUd3aea8Va8PNg8VaeIdaMUdaaea8Pa8RNg8PaeId8KMUd8KaeaRaeIdyMUdyaqaQaOcdtfydbc8S2fgea8XaeIdbMUdbaea80aeIdlMUdlaea8YaeIdwMUdwaea8ZaeIdxMUdxaea81aeIdzMUdzaeaBaeIdCMUdCaea8SaeIdKMUdKaeaIaeId3MUd3aea8VaeIdaMUdaaea8PaeId8KMUd8KaeaRaeIdyMUdykaHclfgHcx9hmbkaKcxfhKaicifgiad6mbkdna8JTmbcbhKinJbbbbh8WaaabaKcdtfgeclfydbgLcx2fgHIdwaaaeydbgicx2fgOIdwg8Y:tgIaINaHIdbaOIdbg81:tg8Va8VNaHIdlaOIdlgB:tgRaRNMMg8Zaaaecwfydbg8Fcx2fgeIdwa8Y:tg8PNaIaIa8PNa8VaeIdba81:tg8RNaRaeIdlaB:tg8UNMMg8SN:tJbbbbJbbjZa8Za8Pa8PNa8Ra8RNa8Ua8UNMMg80Na8Sa8SN:tg8X:va8XJbbbb9BEg8XNh83a80aINa8Pa8SN:ta8XNhUa8Za8UNaRa8SN:ta8XNh85a80aRNa8Ua8SN:ta8XNh86a8Za8RNa8Va8SN:ta8XNh87a80a8VNa8Ra8SN:ta8XNh88a8Va8UNa8RaRN:tg8Sa8SNaRa8PNa8UaIN:tg8Sa8SNaIa8RNa8Pa8VN:tg8Sa8SNMM:rJbbbZNh8Sayaia8J2g3cdtfhHaya8Fa8J2gwcdtfhOayaLa8J2g8LcdtfhCa8Y:mh89aB:mh8:a81:mhZcbhAa8JhYJbbbbh8UJbbbbh8XJbbbbh8ZJbbbbh80Jbbbbh8YJbbbbh81JbbbbhBJbbbbhnJbbbbhcinasc;WbfaAfgecwfa8SaUaCIdbaHIdbg8P:tgRNa83aOIdba8P:tg8RNMgINUdbaeclfa8Sa86aRNa85a8RNMg8VNUdbaea8Sa88aRNa87a8RNMgRNUdbaecxfa8Sa89aINa8:a8VNa8PaZaRNMMMg8PNUdba8SaIa8VNNa80Mh80a8SaIaRNNa8YMh8Ya8Sa8VaRNNa81Mh81a8Sa8Pa8PNNa8WMh8Wa8SaIa8PNNa8UMh8Ua8Sa8Va8PNNa8XMh8Xa8SaRa8PNNa8ZMh8Za8SaIaINNaBMhBa8Sa8Va8VNNanMhna8SaRaRNNacMhcaHclfhHaCclfhCaOclfhOaAczfhAaYcufgYmbkavaic8S2fgeacaeIdbMUdbaeanaeIdlMUdlaeaBaeIdwMUdwaea81aeIdxMUdxaea8YaeIdzMUdzaea80aeIdCMUdCaea8ZaeIdKMUdKaea8XaeId3MUd3aea8UaeIdaMUdaaea8WaeId8KMUd8Kaea8SaeIdyMUdyavaLc8S2fgeacaeIdbMUdbaeanaeIdlMUdlaeaBaeIdwMUdwaea81aeIdxMUdxaea8YaeIdzMUdzaea80aeIdCMUdCaea8ZaeIdKMUdKaea8XaeId3MUd3aea8UaeIdaMUdaaea8WaeId8KMUd8Kaea8SaeIdyMUdyava8Fc8S2fgeacaeIdbMUdbaeanaeIdlMUdlaeaBaeIdwMUdwaea81aeIdxMUdxaea8YaeIdzMUdzaea80aeIdCMUdCaea8ZaeIdKMUdKaea8XaeId3MUd3aea8UaeIdaMUdaaea8WaeId8KMUd8Kaea8SaeIdyMUdyara3cltfhYcbhHa8JhCinaYaHfgeasc;WbfaHfgOIdbaeIdbMUdbaeclfgAaOclfIdbaAIdbMUdbaecwfgAaOcwfIdbaAIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaCcufgCmbkara8LcltfhYcbhHa8JhCinaYaHfgeasc;WbfaHfgOIdbaeIdbMUdbaeclfgAaOclfIdbaAIdbMUdbaecwfgAaOcwfIdbaAIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaCcufgCmbkarawcltfhYcbhHa8JhCinaYaHfgeasc;WbfaHfgOIdbaeIdbMUdbaeclfgAaOclfIdbaAIdbMUdbaecwfgAaOcwfIdbaAIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaCcufgCmbkaKcifgKad6mbkkcbhOxekcehOcbhrkcbh8FdndnamcwGg9cmbJbbbbh8ZcbhJcbhocbhCxekcbhea5cbyd;S1jjbHjjjjbbhCascxfasyd2gHcdtfaCBdbasaHcefBd2dnalTmbaChHinaHaeBdbaHclfhHalaecefge9hmbkkdnaOmbcbhiinabaicdtfhLcbhKinaQaLaKcdtgec:G1jjbfydbcdtfydbcdtfydbhHdnaCaQaLaefydbcdtfydbgOcdtfgAydbgeaOSmbinaAaCaegOcdtfgYydbgeBdbaYhAaOae9hmbkkdnaCaHcdtfgAydbgeaHSmbinaAaCaegHcdtfgYydbgeBdbaYhAaHae9hmbkkdnaOaHSmbaCaOaHaOaH0EcdtfaOaHaOaH6EBdbkaKcefgKci9hmbkaicifgiad6mbkkcbhJdnalTmbcbhYindnaQaYcdtgefydbaY9hmbaYhHdnaCaefgKydbgeaYSmbaKhOinaOaCaegHcdtfgAydbgeBdbaAhOaHae9hmbkkaKaHBdbkaYcefgYal9hmbkcbheaQhOaChHcbhJindndnaeaOydbgA9hmbdnaeaHydbgA9hmbaHaJBdbaJcefhJxdkaHaCaAcdtfydbBdbxekaHaCaAcdtfydbBdbkaOclfhOaHclfhHalaecefge9hmbkkcuaJcltgeaJcjjjjiGEcbyd;S1jjbHjjjjbbhoascxfasyd2gHcdtfaoBdbasaHcefBd2aocbaez:ljjjbhAdnalTmbaChOaahealhYinaecwfIdbh8SaeclfIdbhIaAaOydbcltfgHaeIdbaHIdbMUdbaHclfgKaIaKIdbMUdbaHcwfgKa8SaKIdbMUdbaHcxfgHaHIdbJbbjZMUdbaOclfhOaecxfheaYcufgYmbkkdnaJTmbaAheaJhHinaecxfgOIdbh8SaOcbBdbaeaeIdbJbbbbJbbjZa8S:va8SJbbbb9BEg8SNUdbaeclfgOa8SaOIdbNUdbaecwfgOa8SaOIdbNUdbaeczfheaHcufgHmbkkdnalTmbaChOaahealhYinaAaOydbcltfgHcxfgKaecwfIdbaHcwfIdb:tg8Sa8SNaeIdbaHIdb:tg8Sa8SNaeclfIdbaHclfIdb:tg8Sa8SNMMg8SaKIdbgIaIa8S9DEUdbaOclfhOaecxfheaYcufgYmbkkdnaJmbcbhJJFFuuh8ZxekaAcxfheaAhHaJhOinaHaeIdbUdbaeczfheaHclfhHaOcufgOmbkJFFuuh8ZaAheaJhHinaeIdbg8Sa8Za8Za8S9EEh8ZaeclfheaHcufgHmbkkasydlh9ednalTmba9eclfhea9eydbhAaXhHalhYcbhOincbaeydbgKaA9RaHRbbcpeGEaOfhOaHcefhHaeclfheaKhAaYcufgYmbkaOce4h8Fkcuada8F9RcifgTcx2aTc;v:Q;v:Qe0Ecbyd;S1jjbHjjjjbbhDascxfasyd2gecdtfaDBdbasaecefBd2cuaTcdtaTcFFFFi0Ecbyd;S1jjbHjjjjbbhSascxfasyd2gecdtfaSBdbasaecefBd2a5cbyd;S1jjbHjjjjbbh8Mascxfasyd2gecdtfa8MBdbasaecefBd2alcbyd;S1jjbHjjjjbbh9hascxfasyd2gecdtfa9hBdbasaecefBd2axaxNa8NJbbjZamclGEg83a83N:vhcJbbbbhndnadak9nmbdnaTci6mba8Jclth9iaDcwfh6JbbbbhBJbbbbhninasclfabadalaQz:cjjjbabh8FcbhEcbh5inaba5cdtfh3cbheindnaQa8FaefydbgOcdtgifydbgYaQa3aec:W1jjbfydbcdtfydbgHcdtgwfydbgKSmbaXaHfRbbgLcv2aXaOfRbbgAfc;a1jjbfRbbg8AaAcv2aLfg8Lc;a1jjbfRbbg8KVcFeGTmbdnaKaY9nmba8Lcj1jjbfRbbcFeGmekaAcufhYdnaAaL9hmbaYcFeGce0mbahaifydbaH9hmekdndnaAclSmbaLcl9hmekdnaYcFeGce0mbahaifydbaH9hmdkaLcufcFeGce0mbagawfydbaO9hmekaDaEcx2fgAaHaOa8KcFeGgYEBdlaAaOaHaYEBdbaAaYa8AGcb9hBdwaEcefhEkaeclfgecx9hmbkdna5cifg5ad9pmba8Fcxfh8FaEcifaT9nmekkaETmdcbhiinJbbbbJbbjZaqaQaDaicx2fgAydlgKaAydbgYaAydwgHEgLcdtfydbc8S2fgeIdyg8S:va8SJbbbb9BEaeIdwaaaYaKaHEg8Fcx2fgHIdwgRNaeIdzaHIdbg8PNaeIdaMg8Sa8SMMaRNaeIdlaHIdlg8RNaeIdCaRNaeId3Mg8Sa8SMMa8RNaeIdba8PNaeIdxa8RNaeIdKMg8Sa8SMMa8PNaeId8KMMM:lNh80JbbbbJbbjZaqaQaYcdtfydbc8S2fgeIdyg8S:va8SJbbbb9BEaeIdwaaaKcx2fgHIdwg8VNaeIdzaHIdbg8WNaeIdaMg8Sa8SMMa8VNaeIdlaHIdlg8UNaeIdCa8VNaeId3Mg8Sa8SMMa8UNaeIdba8WNaeIdxa8UNaeIdKMg8Sa8SMMa8WNaeId8KMMM:lNh8YaAcwfh3aAclfhwdna8JTmbavaYc8S2fgOIdwa8VNaOIdza8WNaOIdaMg8Sa8SMMa8VNaOIdla8UNaOIdCa8VNaOId3Mg8Sa8SMMa8UNaOIdba8WNaOIdxa8UNaOIdKMg8Sa8SMMa8WNaOId8KMMMh8SayaKa8J2cdtfhHaraYa8J2cltfheaOIdyh8Xa8JhOinaHIdbgIaIa8XNaecxfIdba8VaecwfIdbNa8WaeIdbNa8UaeclfIdbNMMMgIaIM:tNa8SMh8SaHclfhHaeczfheaOcufgOmbkavaLc8S2fgOIdwaRNaOIdza8PNaOIdaMgIaIMMaRNaOIdla8RNaOIdCaRNaOId3MgIaIMMa8RNaOIdba8PNaOIdxa8RNaOIdKMgIaIMMa8PNaOId8KMMMhIaya8Fa8J2cdtfhHaraLa8J2cltfheaOIdyh8Wa8JhOinaHIdbg8Va8Va8WNaecxfIdbaRaecwfIdbNa8PaeIdbNa8RaeclfIdbNMMMg8Va8VM:tNaIMhIaHclfhHaeczfheaOcufgOmbka80aI:lMh80a8Ya8S:lMh8YkawaKa8Fa8Ya809FgeEBdbaAaYaLaeEBdba3a8Ya80aeEUdbaicefgiaE9hmbkasc;Wbfcbcj;qbz:ljjjb8Aa6heaEhHinasc;WbfaeydbcA4cF8FGgOcFAaOcFA6EcdtfgOaOydbcefBdbaecxfheaHcufgHmbkcbhecbhHinasc;WbfaefgOydbhAaOaHBdbaAaHfhHaeclfgecj;qb9hmbkcbhea6hHinasc;WbfaHydbcA4cF8FGgOcFAaOcFA6EcdtfgOaOydbgOcefBdbaSaOcdtfaeBdbaHcxfhHaEaecefge9hmbkadak9RgOci9Uh9kdnalTmbcbhea8MhHinaHaeBdbaHclfhHalaecefge9hmbkkcbh0a9hcbalz:ljjjbh9maOcO9Uh9na9kce4h9oasydwh9pcbh8KcbhwdninaDaSawcdtfydbcx2fg3Idwg8Sac9Emea8Ka9k9pmeJFFuuhIdna9oaE9pmbaDaSa9ocdtfydbcx2fIdwJbb;aZNhIkdna8SaI9ETmba8San9ETmba8Ka9n0mdkdna9maQa3ydlgicdtg9qfydbgAfg9rRbba9maQa3ydbgLcdtg9sfydbgHfg9tRbbVmbaXaLfRbbh9udna9eaHcdtfgeclfydbgOaeydbgeSmbaOae9RhKa9paecitfheaaaAcx2fg8Lcwfh5a8Lclfh9vaaaHcx2fg8Acwfh9wa8Aclfh9xcbhHceh8Fdnindna8MaeydbcdtfydbgOaASmba8MaeclfydbcdtfydbgYaASmbaOaYSmbaaaYcx2fgYIdbaaaOcx2fgOIdbg8V:tg8Sa9xIdbaOIdlgR:tg8WNa8AIdba8V:tg8UaYIdlaR:tgIN:tg8Pa8Sa9vIdbaR:tg8XNa8LIdba8V:tg80aIN:tgRNaIa9wIdbaOIdwg8R:tg8YNa8WaYIdwa8R:tg8VN:tg8WaIa5Idba8R:tg81Na8Xa8VN:tgINa8Va8UNa8Ya8SN:tg8Ra8Va80Na81a8SN:tg8SNMMa8Pa8PNa8Wa8WNa8Ra8RNMMaRaRNaIaINa8Sa8SNMMN:rJbbj8:N9FmdkaecwfheaHcefgHaK6h8FaKaH9hmbkka8FceGTmba9ocefh9oxeka3cwfhHdndndndna9uc9:fPdebdkaLheina8MaecdtgefaiBdba8EaefydbgeaL9hmbxikkdnagahaha9sfydbaiSEa8Ea9sfydbgLcdtfydbgecu9hmba8Ea9qfydbheka8Ma9sfaiBdbaehika8MaLcdtfaiBdbka9tce86bba9rce86bbaHIdbg8Sanana8S9DEhna0cefh0cecda9uceSEa8Kfh8KkawcefgwaE9hmbkka0TmddnalTmbcbhKcbhiindna8MaicdtgefydbgOaiSmbaQaOcdtfydbh8FdnaiaQaefydb9hg3mbaqa8Fc8S2fgeaqaic8S2fgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdyka8JTmbavaOc8S2fgeavaic8S2gwfgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdya9iaO2hLarhHa8JhAinaHaLfgeaHaKfgOIdbaeIdbMUdbaeclfgYaOclfIdbaYIdbMUdbaecwfgYaOcwfIdbaYIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaAcufgAmbka3mbJbbbbJbbjZaqawfgeIdyg8S:va8SJbbbb9BEaeIdwaaa8Fcx2fgHIdwg8SNaeIdzaHIdbgINaeIdaMg8Va8VMMa8SNaeIdlaHIdlg8VNaeIdCa8SNaeId3Mg8Sa8SMMa8VNaeIdbaINaeIdxa8VNaeIdKMg8Sa8SMMaINaeId8KMMM:lNg8SaBaBa8S9DEhBkaKa9ifhKaicefgial9hmbkcbhHahheindnaeydbgOcuSmbdnaHa8MaOcdtgAfydbgO9hmbcuhOahaAfydbgAcuSmba8MaAcdtfydbhOkaeaOBdbkaeclfhealaHcefgH9hmbkcbhHagheindnaeydbgOcuSmbdnaHa8MaOcdtgAfydbgO9hmbcuhOagaAfydbgAcuSmba8MaAcdtfydbhOkaeaOBdbkaeclfhealaHcefgH9hmbkkaBana8JEhBcbhYabhecbhKindna8MaeydbcdtfydbgHa8MaeclfydbcdtfydbgOSmbaHa8MaecwfydbcdtfydbgASmbaOaASmbabaYcdtfgLaHBdbaLcwfaABdbaLclfaOBdbaYcifhYkaecxfheaKcifgKad6mbkdndna9cTmbaYak9nmba8ZaB9FTmbcbhdabhecbhHindnaoaCaeydbgOcdtfydbcdtfIdbaB9ETmbabadcdtfgAaOBdbaAclfaeclfydbBdbaAcwfaecwfydbBdbadcifhdkaecxfheaHcifgHaY6mbkJFFuuh8ZaJTmeaoheaJhHJFFuuh8SinaeIdbgIa8Sa8SaI9EEg8Va8SaIaB9EgOEh8Sa8Va8ZaOEh8ZaeclfheaHcufgHmbxdkkaYhdkadak0mbxdkkasclfabadalaQz:cjjjbkdndnadak0mbadhOxekdna9cmbadhOxekdna8Zac9FmbadhOxekina8ZJbb;aZNg8Saca8Sac9DEh8VJbbbbh8SdnaJTmbaoheaJhHinaeIdbgIa8SaIa8V9FEa8SaIa8S9EEh8SaeclfheaHcufgHmbkkcbhOabhecbhHindnaoaCaeydbgAcdtfydbcdtfIdba8V9ETmbabaOcdtfgYaABdbaYclfaeclfydbBdbaYcwfaecwfydbBdbaOcifhOkaecxfheaHcifgHad6mbkJFFuuh8ZdnaJTmbaoheaJhHJFFuuhIinaeIdbgRaIaIaR9EEg8PaIaRa8V9EgAEhIa8Pa8ZaAEh8ZaeclfheaHcufgHmbkkdnaOad9hmbadhOxdka8Sanana8S9DEhnaOak9nmeaOhda8Zac9FmbkkdnamcjjjjlGTmbazmbaOTmbcbhQabheinaXaeydbgAfRbbc3thKaecwfgLydbhHdndnahaAcdtg8FfydbaeclfgiydbgCSmbcbhYagaCcdtfydbaA9hmekcjjjj94hYkaeaKaYVaAVBdbaXaCfRbbc3thKdndnahaCcdtfydbaHSmbcbhYagaHcdtfydbaC9hmekcjjjj94hYkaiaKaYVaCVBdbaXaHfRbbc3thYdndnahaHcdtfydbaASmbcbhCaga8FfydbaH9hmekcjjjj94hCkaLaYaCVaHVBdbaecxfheaQcifgQaO6mbkkdnazTmbaOTmbaOheinabazabydbcdtfydbBdbabclfhbaecufgembkkdnaPTmbaPa83an:rNUdbkasyd2gecdtascxffc98fhHdninaeTmeaHydbcbyd;O1jjbH:bjjjbbaHc98fhHaecufhexbkkasc;W;qbf8KjjjjbaOk;Yieouabydlhvabydbclfcbaicdtz:ljjjbhoadci9UhrdnadTmbdnalTmbaehwadhDinaoalawydbcdtfydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbxdkkaehwadhDinaoawydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbkkdnaiTmbcbhDaohwinawydbhqawaDBdbawclfhwaqaDfhDaicufgimbkkdnadci6mbinaecwfydbhwaeclfydbhDaeydbhidnalTmbalawcdtfydbhwalaDcdtfydbhDalaicdtfydbhikavaoaicdtfgqydbcitfaDBdbavaqydbcitfawBdlaqaqydbcefBdbavaoaDcdtfgqydbcitfawBdbavaqydbcitfaiBdlaqaqydbcefBdbavaoawcdtfgwydbcitfaiBdbavawydbcitfaDBdlawawydbcefBdbaecxfhearcufgrmbkkabydbcbBdbk;Podvuv998Jjjjjbca9RgvcFFF;7rBd3av9cFFF;7;3FF:;Fb83dCavcFFF97Bdzav9cFFF;7FFF:;u83dwdnadTmbaicd4hodnabmbdnalTmbcbhrinaealarcdtfydbao2cdtfhwcbhiinavcCfaifgDawaifIdbgqaDIdbgkakaq9EEUdbavcwfaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkarcefgrad9hmbxikkaocdthrcbhwincbhiinavcCfaifgDaeaifIdbgqaDIdbgkakaq9EEUdbavcwfaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkaearfheawcefgwad9hmbxdkkdnalTmbcbhrinabarcx2fgiaealarcdtfydbao2cdtfgwIdbUdbaiawIdlUdlaiawIdwUdwcbhiinavcCfaifgDawaifIdbgqaDIdbgkakaq9EEUdbavcwfaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkarcefgrad9hmbxdkkaocdthlcbhraehwinabarcx2fgiaearao2cdtfgDIdbUdbaiaDIdlUdlaiaDIdwUdwcbhiinavcCfaifgDawaifIdbgqaDIdbgkakaq9EEUdbavcwfaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkawalfhwarcefgrad9hmbkkJbbbbavIdwavIdCgk:tgqaqJbbbb9DEgqavIdxavIdKgx:tgmamaq9DEgqavIdzavId3gm:tgPaPaq9DEhPdnabTmbadTmbJbbbbJbbjZaP:vaPJbbbb9BEhqinabaqabIdbak:tNUdbabclfgvaqavIdbax:tNUdbabcwfgvaqavIdbam:tNUdbabcxfhbadcufgdmbkkaPk8MbabaeadaialavcbcbcbcbcbaoarawaDz:bjjjbk8MbabaeadaialavaoarawaDaqakaxamaPz:bjjjbk:nCoDud99rue99lul998Jjjjjbc;Wb9Rgw8KjjjjbdndnarmbcbhDxekawcxfcbc;Kbz:ljjjb8Aawcuadcx2adc;v:Q;v:Qe0Ecbyd;S1jjbHjjjjbbgqBdxawceBd2aqaeadaicbz:djjjb8AawcuadcdtadcFFFFi0Egkcbyd;S1jjbHjjjjbbgxBdzawcdBd2adcd4adfhmceheinaegicetheaiam6mbkcbhPawcuaicdtgsaicFFFFi0Ecbyd;S1jjbHjjjjbbgzBdCawciBd2dndnar:ZgH:rJbbbZMgO:lJbbb9p9DTmbaO:Ohexekcjjjj94hekaicufhAc:bwhmcbhCadhXcbhQinaChLaeamgKcufaeaK9iEaPgDcefaeaD9kEhYdndnadTmbaYcuf:YhOaqhiaxheadhmindndnaiIdbaONJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaCcCthCdndnaiclfIdbaONJbbbZMg8A:lJbbb9p9DTmba8A:OhExekcjjjj94hEkaEcqtaCVhCdndnaicwfIdbaONJbbbZMg8A:lJbbb9p9DTmba8A:OhExekcjjjj94hEkaeaCaEVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:ljjjbh3cbh5cbh8Eindna3axa8EcdtfydbgCcm4aC7c:v;t;h;Ev2gics4ai7aAGgmcdtfgEydbgecuSmbaeaCSmbcehiina3amaifaAGgmcdtfgEydbgecuSmeaicefhiaeaC9hmbkkaEaCBdba5aecuSfh5a8Ecefg8Ead9hmbxdkkazcFeasz:ljjjb8Acbh5kaDaYa5ar0giEhPaLa5aiEhCdna5arSmbaYaKaiEgmaP9Rcd9imbdndnaQcl0mbdnaX:ZgOaL:Zg8A:taY:Yg8FaD:Y:tgaa8FaK:Y:tgha5:ZggaH:tNNNaOaH:tahNa8Aag:tNa8AaH:taaNagaO:tNM:va8FMJbbbZMgO:lJbbb9p9DTmbaO:Ohexdkcjjjj94hexekaPamfcd9Theka5aXaiEhXaQcefgQcs9hmekkdndnaCmbcihicbhDxekcbhiawakcbyd;S1jjbHjjjjbbg8EBdKawclBd2aPcuf:Yh8AdndnadTmbaqhiaxheadhmindndnaiIdba8ANJbbbZMgO:lJbbb9p9DTmbaO:OhCxekcjjjj94hCkaCcCthCdndnaiclfIdba8ANJbbbZMgO:lJbbb9p9DTmbaO:OhExekcjjjj94hEkaEcqtaCVhCdndnaicwfIdba8ANJbbbZMgO:lJbbb9p9DTmbaO:OhExekcjjjj94hEkaeaCaEVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:ljjjbh3cbhDcbh5inaxa5cdtgYfydbgCcm4aC7c:v;t;h;Ev2gics4ai7hecbhidndnina3aeaAGgmcdtfgEydbgecuSmednaxaecdtgEfydbaCSmbaicefgiamfheaiaA9nmekka8EaEfydbhixekaEa5BdbaDhiaDcefhDka8EaYfaiBdba5cefg5ad9hmbkcuaDc32giaDc;j:KM;jb0EhexekazcFeasz:ljjjb8AcbhDcbhekawaecbyd;S1jjbHjjjjbbgeBd3awcvBd2aecbaiz:ljjjbhEavcd4hxdnadTmbdnalTmbaxcdth3a8EhCalheaqhmadhAinaEaCydbc32fgiamIdbaiIdbMUdbaiamclfIdbaiIdlMUdlaiamcwfIdbaiIdwMUdwaiaeIdbaiIdxMUdxaiaeclfIdbaiIdzMUdzaiaecwfIdbaiIdCMUdCaiaiIdKJbbjZMUdKaCclfhCaea3fheamcxfhmaAcufgAmbxdkka8EhmaqheadhCinaEamydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiaiIdxJbbbbMUdxaiaiIdzJbbbbMUdzaiaiIdCJbbbbMUdCaiaiIdKJbbjZMUdKamclfhmaecxfheaCcufgCmbkkdnaDTmbaEhiaDheinaiaiIdbJbbbbJbbjZaicKfIdbgO:vaOJbbbb9BEgONUdbaiclfgmaOamIdbNUdbaicwfgmaOamIdbNUdbaicxfgmaOamIdbNUdbaiczfgmaOamIdbNUdbaicCfgmaOamIdbNUdbaic3fhiaecufgembkkcbhCawcuaDcdtgYaDcFFFFi0Egicbyd;S1jjbHjjjjbbgeBdaawcoBd2awaicbyd;S1jjbHjjjjbbg3Bd8KaecFeaYz:ljjjbh5dnadTmbJbbjZJbbjZa8A:vaPceSEaoNgOaONh8Aaxcdthxalheina8Aaec;C1jjbalEgmIdwaEa8EydbgAc32fgiIdC:tgOaONamIdbaiIdx:tgOaONamIdlaiIdz:tgOaONMMNaqcwfIdbaiIdw:tgOaONaqIdbaiIdb:tgOaONaqclfIdbaiIdl:tgOaONMMMhOdndna5aAcdtgifgmydbcuSmba3aifIdbaO9ETmekamaCBdba3aifaOUdbka8Eclfh8EaeaxfheaqcxfhqadaCcefgC9hmbkkaba5aYz:kjjjb8AcrhikaicdthiinaiTmeaic98fgiawcxffydbcbyd;O1jjbH:bjjjbbxbkkawc;Wbf8KjjjjbaDk:Odieui99iu8Jjjjjbca9RgicFFF;7rBd3ai9cFFF;7;3FF:;Fb83dCaicFFF97Bdzai9cFFF;7FFF:;u83dwdndnaembJbbjFhlJbbjFhvJbbjFhoxekadcd4cdthrcbhwincbhdinaicCfadfgDabadfIdbglaDIdbgvaval9EEUdbaicwfadfgDalaDIdbgvaval9DEUdbadclfgdcx9hmbkabarfhbawcefgwae9hmbkaiIdzaiId3:thoaiIdxaiIdK:thvaiIdwaiIdC:thlkJbbbbalalJbbbb9DEglavaval9DEglaoaoal9DEk9DeeuabcFeaicdtz:ljjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk9teiucbcbyd;W1jjbgeabcifc98GfgbBd;W1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;W1jjbgeabcrfc94GfgbBd;W1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd;W1jjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd;W1jjbfgdBd;W1jjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akk6eiucbhidnadTmbdninabRbbglaeRbbgv9hmeaecefheabcefhbadcufgdmbxdkkalav9Rhikaikk:bedbcjwk9Oeeebeebebbeeebebbbbbebebbbbbbbbbebbbdbbbbbbbebbbebbbdbbbbbbbbbbbeeeeebebbebbebebbbeebbbbbbbbbbbbbbbbbbbbbc;OwkxebbbdbbbjNbb",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(h){n=h.instance,n.exports.__wasm_call_ctors()});function o(h){for(var g=new Uint8Array(h.length),x=0;x96?S-97:S>64?S-39:S+4}for(var V=0,x=0;x=3),r(S>=0&&S<=h.length),r(S%3==0),r(V>=0);for(var R=0,E=0;E<(Z?Z.length:0);++E)r(Z[E]in y),r(this.useExperimentalFeatures||Z[E]!="Prune"),R|=y[Z[E]];var I=h.BYTES_PER_ELEMENT==4?h:new Uint32Array(h),v=d(n.exports.meshopt_simplify,I,h.length,g,g.length/x,x*4,S,V,R);return v[0]=h instanceof Uint32Array?v[0]:new h.constructor(v[0]),v},simplifyWithAttributes:function(h,g,x,S,V,Z,R,E,I,v){r(this.useExperimentalFeatures),r(h instanceof Uint32Array||h instanceof Int32Array||h instanceof Uint16Array||h instanceof Int16Array),r(h.length%3==0),r(g instanceof Float32Array),r(g.length%x==0),r(x>=3),r(S instanceof Float32Array),r(S.length%V==0),r(V>=0),r(R==null||R instanceof Uint8Array),r(R==null||R.length==g.length/x),r(E>=0&&E<=h.length),r(E%3==0),r(I>=0),r(Array.isArray(Z)),r(V>=Z.length),r(Z.length<=32);for(var P=0;P=0);for(var F=0,P=0;P<(v?v.length:0);++P)r(v[P]in y),F|=y[v[P]];var N=h.BYTES_PER_ELEMENT==4?h:new Uint32Array(h),b=u(n.exports.meshopt_simplifyWithAttributes,N,h.length,g,g.length/x,x*4,S,V*4,new Float32Array(Z),R?new Uint8Array(R):null,E,I,F);return b[0]=h instanceof Uint32Array?b[0]:new h.constructor(b[0]),b},getScale:function(h,g){return r(h instanceof Float32Array),r(h.length%g==0),r(g>=3),f(n.exports.meshopt_simplifyScale,h,h.length/g,g*4)},simplifyPoints:function(h,g,x,S,V,Z){return r(this.useExperimentalFeatures),r(h instanceof Float32Array),r(h.length%g==0),r(g>=3),r(x>=0&&x<=h.length/g),S?(r(S instanceof Float32Array),r(S.length%V==0),r(V>=3),r(h.length/g==S.length/V),p(n.exports.meshopt_simplifyPoints,h,h.length/g,g*4,S,V*4,Z,x)):p(n.exports.meshopt_simplifyPoints,h,h.length/g,g*4,void 0,0,0,x)}}}();var Lmn=_(T()),Cmn=function(){var e="b9H79Tebbbefx9Geueu9Geub9Gbb9Giuuueu9Gkuuuuuuuuuu99eu9Gvuuuuueu9Gkuuuuuuuuu9999eu9Gruuuuuuub9Gkuuuuuuuuuuueu9Gouuuuuub9Giuuub9GluuuubiOHdilvorwDqrkbiibeilve9Weiiviebeoweuec:q:Odkr:Yewo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9I919P29K9nW79O2Wt79c9V919U9KbeX9TW79O9V9Wt9F9I919P29K9nW79O2Wt7bd39TW79O9V9Wt9F9J9V9T9W91tWJ2917tWV9c9V919U9K7br39TW79O9V9Wt9F9J9V9T9W91tW9nW79O2Wt9c9V919U9K7bDL9TW79O9V9Wt9F9V9Wt9P9T9P96W9nW79O2Wtbql79IV9RbkDwebcekdsPq;L9kHdbkIbabaec9:fgefcufae9Ugeabci9Uadfcufad9Ugbaeab0Ek:oAlPue99eux998Jjjjjbc:We9Rgk8Kjjjjbakc;mbfcbc;Kbz:njjjb8AakcuaocdtgxaocFFFFi0Egmcbyd:e1jjbHjjjjbbgPBd9makceBd:SeakaPBdnakamcbyd:e1jjbHjjjjbbgsBd9qakcdBd:SeakasBd9eakcualcdtalcFFFFi0Ecbyd:e1jjbHjjjjbbgzBd9uakazBd9iakciBd:SeaPcbaxz:njjjbhHalci9UhOdnalTmbaihPalhAinaHaPydbcdtfgCaCydbcefBdbaPclfhPaAcufgAmbkkdnaoTmbcbhPashAaHhCaohXinaAaPBdbaAclfhAaCydbaPfhPaCclfhCaXcufgXmbkkdnalci6mbcbhPaihAinaAcwfydbhCaAclfydbhXasaAydbcdtfgQaQydbgQcefBdbazaQcdtfaPBdbasaXcdtfgXaXydbgXcefBdbazaXcdtfaPBdbasaCcdtfgCaCydbgCcefBdbazaCcdtfaPBdbaAcxfhAaOaPcefgP9hmbkkdnaoTmbaHhAashPaohCinaPaPydbaAydb9RBdbaAclfhAaPclfhPaCcufgCmbkkakamcbyd:e1jjbHjjjjbbgPBd9yakclBd:SeaPaHaxz:mjjjbhmakaOcbyd:e1jjbHjjjjbbgPBd9CakcvBd:SeaPcbaOz:njjjbhLakcuaOcK2alcjjjjd0Ecbyd:e1jjbHjjjjbbgKBd9GakcoBd:SeJbbbbhYdnalci6g8Ambarcd4hxaihAaKhPaOhrJbbbbhEinavaAclfydbax2cdtfgCIdlh3avaAydbax2cdtfgXIdlhYavaAcwfydbax2cdtfgQIdlh5aCIdwh8EaXIdwh8FaQIdwhaaPaCIdbghaXIdbggMaQIdbg8JMJbbnn:vUdbaPclfaXIdlaCIdlMaQIdlMJbbnn:vUdbaQIdwh8KaCIdwh8LaXIdwh8MaPcxfa3aY:tg3aaa8F:tgaNa5aY:tg5a8Ea8F:tg8EN:tgYJbbbbJbbjZahag:tgha5Na8Jag:tgga3N:tg8Fa8FNaYaYNa8EagNaaahN:tgYaYNMM:rgg:vagJbbbb9BEg3NUdbaPczfaYa3NUdbaPcCfa8Fa3NUdbaPcwfa8Ka8Ma8LMMJbbnn:vUdbaEagMhEaAcxfhAaPcKfhParcufgrmbkaEaO:Z:vJbbbZNhYkakcuaOcdtalcFFFF970Ecbyd:e1jjbHjjjjbbgCBd9KakcrBd:SeaYaD:ZN:rhYdna8AmbcbhPaChAinaAaPBdbaAclfhAaOaPcefgP9hmbkkaYJbbbZNh8MakcuaOcltalcFFFFd0Ecbyd:e1jjbHjjjjbbg8ABd9OakcwBd:Secba8AaKaCaOz:djjjb8Aakaocbyd:e1jjbHjjjjbbgPBd2aPcFeaoz:njjjbhrakc8Wfcwf9cb83ibak9cb83i8WcbhPJbbbbhEJbbbbh5Jbbbbh8EJbbbbhYJbbbbh8FJbbbbhgcbhlinJbbbbh3dnaPTmbJbbjZaP:Z:vh3kaka8Ea3NgaUdaaka5a3NghUd3akaEa3Ng8JUdKJbbbbh3dnagagNaYaYNa8Fa8FNMMg8KJbbbb9BmbJbbjZa8K:r:vh3kakaga3NUd8Saka8Fa3NUdyakaYa3NUd8Kdndndnakyd8WgQakydUgAakcKfaeaiakc;abfaKamara8Maqz:ejjjbgCcuSmbdnaPaD9pmbaAaraiaCcx2fgXydbfRbbcFeSfaraXclfydbfRbbcFeSfaraXcwfydbfRbbcFeSfaw9nmdkaQaAcbaeaiakc;abfaKamara8MJbbbbz:ejjjbgCcu9hmekakaaUdCakahUdzaka8JUdxakcuBdwakcFFF;7rBdla8AcbaKaLakcxfakcwfakclfz:fjjjbakydwgCcuSmekdnakc8WfaiaCcx2fgOydbgPaOclfydbgAaOcwfydbgXarabaeadalawaDz:gjjjbTmbalcefhlJbbbbhEJbbbbh5Jbbbbh8EJbbbbhYJbbbbh8FJbbbbhgkamaPcdtfgPaPydbcufBdbamaAcdtfgPaPydbcufBdbamaXcdtfgPaPydbcufBdbcbhXinazasaOaXcdtfydbcdtgAfydbcdtfgxhPaHaAfgvydbgQhAdnaQTmbdninaPydbaCSmeaPclfhPaAcufgATmdxbkkaPaxaQcdtfc98fydbBdbavavydbcufBdbkaXcefgXci9hmbkaKaCcK2fgPIdbh3aPIdlhaaPIdwhhaPIdxh8JaPIdzh8KaPIdCh8LaLaCfce86bbaga8LMhga8Fa8KMh8FaYa8JMhYa8EahMh8Ea5aaMh5aEa3MhEakyd88hPxekkdnaPTmbdnakyd80gAaPci2fgCciGTmbadaCfcbaPaAcu7fciGcefz:njjjb8AkabalcltfgPak8Pi8W83dbaPcwfakc8Wfcwf8Pib83dbalcefhlkcahPdninaPc98Smeakc;mbfaPfydbcbydj1jjbH:bjjjbbaPc98fhPxbkkakc:Wef8Kjjjjbalk;3vivuv99lu8Jjjjjbca9Rgv8Kjjjjbdndnalcw0mbaiydbhoaeabcitfgralcdtcufBdlaraoBdbdnalcd6mbaiclfhoalcufhwarcxfhrinaoydbhDarcuBdbarc98faDBdbarcwfhraoclfhoawcufgwmbkkalabfhrxekcbhDavczfcwfcbBdbav9cb83izavcwfcbBdbav9cb83ibJbbjZhqJbbjZhkinadaiaDcdtfydbcK2fhwcbhrinavczfarfgoawarfIdbgxaoIdbgm:tgPakNamMgmUdbavarfgoaPaxam:tNaoIdbMUdbarclfgrcx9hmbkJbbjZaqJbbjZMgq:vhkaDcefgDal9hmbkcbhoadcbcecdavIdlgxavIdwgm9GEgravIdbgPam9GEaraPax9GEgscdtgrfhzavczfarfIdbhxaihralhwinaiaocdtfgDydbhHaDarydbgOBdbaraHBdbarclfhraoazaOcK2fIdbax9Dfhoawcufgwmbkaeabcitfhrdndnaocv6mbaoalc98f6mekaraiydbBdbaralcdtcufBdlaiclfhoalcufhwarcxfhrinaoydbhDarcuBdbarc98faDBdbarcwfhraoclfhoawcufgwmbkalabfhrxekaraxUdbaeabcitfgrarydlc98GasVBdlabcefaeadaiaoz:djjjbhwararydlciGawabcu7fcdtVBdlawaeadaiaocdtfalao9Rz:djjjbhrkavcaf8Kjjjjbark;Bloeue99vue99Due99dndnaembcuhkxekJbbjZaq:thxaiabcdtfhmavydbhPavydlhsavydwhzcbhHJFFuuhOcvhbcuhkindnaPamaHcdtfydbcdtgvfydbgATmbazasavfydbcdtfhiindndnawalaiydbgCcx2fgvclfydbgXfRbbcFeSawavydbgQfRbbcFeSfawavcwfydbgLfRbbcFeSfgKmbcbhvxekcehvaraQcdtfydbgYceSmbcehvaraXcdtfydbg8AceSmbcehvaraLcdtfydbgEceSmbdna8AcdSaYcdSfaEcdSfcd6mbaKcefhvxekaKcdfhvkdnavab9kmbdndnadTmbaoaCcK2fgQIdwadIdw:tg3a3NaQIdbadIdb:tg3a3NaQIdladIdl:tg3a3NMM:raD:vaxNJbbjZMJ9VO:d86JbbjZaQIdCadIdCNaQIdxadIdxNaQIdzadIdzNMMaqN:tg3a3J9VO:d869DENh3xekaraQcdtfydbaraXcdtfydbfaraLcdtfydbfc99f:Zh3kaCakavab6a3aO9DVgQEhkavabaQEhba3aOaQEhOkaiclfhiaAcufgAmbkkaHcefgHae9hmbkkakk;bddlue99dndndnabaecitfgrydlgwciGgDci9hmbarclfhqxekinabcbawcd4gwalaDcdtfIdbabaecitfIdb:tgkJbbbb9FEgDaecefgefadaialavaoz:fjjjbak:laoIdb9FTmdabaDaw7aefgecitfgrydlgwciGgDci9hmbkarclfhqkabaecitfhecuhbindnaiaeydbgDfRbbmbadaDcK2fgrIdwalIdw:tgkakNarIdbalIdb:tgkakNarIdlalIdl:tgkakNMM:rgkaoIdb9DTmbaoakUdbavaDBdbaqydbhwkaecwfheabcefgbawcd46mbkkk;yleoudnaladfgkRbbcFeSalaefgxRbbgmcFeSfabydwgPfalaifgsRbbcFeSfaD0abydxaq9pVgzce9hmbavawcltfgmab8Pdb83dbamcwfabcwfgm8Pdb83dbdndnamydbmbcbhqxekcbhDaohminalamabydbcdtfydbfcFe86bbamclfhmaDcefgDabydwgq6mbkkdnabydxglci2gDabydlgmfgPciGTmbaraPfcbalamcu7fciGcefz:njjjb8Aabydxci2hDabydlhmabydwhqkab9cb83dwababydbaqfBdbabaDcifc98GamfBdlaxRbbhmcbhPkdnamcFeGcFe9hmbaxaP86bbababydwgmcefBdwaoabydbcdtfamcdtfaeBdbkdnakRbbcFe9hmbakabydw86bbababydwgmcefBdwaoabydbcdtfamcdtfadBdbkdnasRbbcFe9hmbasabydw86bbababydwgmcefBdwaoabydbcdtfamcdtfaiBdbkarabydlfabydxci2faxRbb86bbarabydlfabydxci2fcefakRbb86bbarabydlfabydxci2fcdfasRbb86bbababydxcefBdxazk;Ckovud99euv99eul998Jjjjjbc:G;ae9Rgo8KjjjjbdndnadTmbavcd4hrcbhwcbhDindnaiaeclfydbar2cdtfgvIdbaiaeydbar2cdtfgqIdbgk:tgxaiaecwfydbar2cdtfgmIdlaqIdlgP:tgsNamIdbak:tgzavIdlaP:tgPN:tgkakNaPamIdwaqIdwgH:tgONasavIdwaH:tgHN:tgPaPNaHazNaOaxN:tgxaxNMM:rgsJbbbb9Bmbaoc:G:qefawcx2fgAakas:vUdwaAaxas:vUdlaAaPas:vUdbaocafawc8K2fgAaq8Pdb83dbaAav8Pdb83dxaAam8Pdb83dKaAcwfaqcwfydbBdbaAcCfavcwfydbBdbaAcafamcwfydbBdbawcefhwkaecxfheaDcifgDad6mbkab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbawTmeao9cb83iKao9cb83izaoczfaocafawci2z1jjjbaoIdKhCaoIdChXaoIdzhQao9cb83iwao9cb83ibaoaoc:G:qefawz1jjjbJbbjZhkaoIdwgPJbbbbJbbjZaPaPNaoIdbgPaPNaoIdlgsasNMM:rgx:vaxJbbbb9BEgzNhxasazNhsaPazNhzaoc:G:qefheawhvinaecwfIdbaxNaeIdbazNasaeclfIdbNMMgPakaPak9DEhkaecxfheavcufgvmbkabaCUdwabaXUdlabaQUdbabaoId3UdxdndnakJ;n;m;m899FmbJbbbbhPaoc:G:qefheaocafhvinaCavcwfIdb:taecwfIdbgHNaQavIdb:taeIdbgONaXavclfIdb:taeclfIdbgLNMMaxaHNazaONasaLNMM:vgHaPaHaP9EEhPavc8KfhvaecxfheawcufgwmbkabazUd3abc8KfaxUdbabcafasUdbabcKfaCaxaPN:tUdbabcCfaXasaPN:tUdbabaQazaPN:tUdzabJbbjZakakN:t:rgkUdydndnaxJbbj:;axJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;axJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohexekcjjjj94hekabc8Ufae86bbdndnasJbbj:;asJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;asJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohvxekcjjjj94hvkabcRfav86bbdndnazJbbj:;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:G;aef8Kjjjjbk:mvdouq99cbhi8Jjjjjbca9RglczfcwfcbBdbal9cb83izalcwfcbBdbal9cb83ibdnadTmbcbhvinaeaifhocbhrinalczfarfgwavawydbgwaoarfIdbgDaearawcx2ffIdb9DEBdbalarfgwavawydbgwaDaearawcx2ffIdb9EEBdbarclfgrcx9hmbkaicxfhiavcefgvad9hmbkkJbbbbhDcbhrcbhicbhvinaealarfydbcx2fgwIdwaealczfarfydbcx2fgoIdw:tgqaqNawIdbaoIdb:tgqaqNawIdlaoIdl:tgqaqNMMgqaDaqaD9EgwEhDavaiawEhiarclfhravcefgvci9hmbkaealczfaicdtgvfydbcx2fgrIdwaealavfydbcx2fglIdwMJbbbZNhqarIdlalIdlMJbbbZNhkarIdbalIdbMJbbbZNhxaD:rJbbbZNhDdnadTmbindnaecwfIdbgmaq:tgPaPNaeIdbgsax:tgPaPNaeclfIdbgzak:tgPaPNMMgPaDaDN9ETmbaqaDaP:rgH:vJbbbZNJbbbZMgPNamJbbjZaP:tgONMhqakaPNazaONMhkaxaPNasaONMhxaDaHMJbbbZNhDkaecxfheadcufgdmbkkabaDUdxabaqUdwabakUdlabaxUdbkjeeiu8Jjjjjbcj8W9Rgr8Kjjjjbaici2hwdnaiTmbawceawce0EhDarhiinaiaeadRbbcdtfydbBdbadcefhdaiclfhiaDcufgDmbkkabarawaladaoz:hjjjbarcj8Wf8Kjjjjbk:Ylequ8Jjjjjbcjx9Rgl8Kjjjjbcbhvalcjqfcbaiz:njjjb8AdndnadTmbcjehoaehrincuhwarhDcuhqavhkdninawakaoalcjqfaDcefRbbfRbb9RcFeGci6aoalcjqfaDRbbfRbb9RcFeGci6faoalcjqfaDcdfRbbfRbb9RcFeGci6fgxaq9mgmEhwdnammbaxce0mdkaxaqaxaq9kEhqaDcifhDadakcefgk9hmbkkaeawci2fgDcdfRbbhqaDcefRbbhxaDRbbhkaeavci2fgDcifaDawav9Rci2z:qjjjb8Aakalcjqffaocefgo86bbaxalcjqffao86bbaDcdfaq86bbaDcefax86bbaDak86bbaqalcjqffao86bbarcifhravcefgvad9hmbkalcFeaiz:njjjbhoadci2gDceaDce0EhqcbhxindnaoaeRbbgkfgwRbbgDcFe9hmbawax86bbaocjdfaxcdtfabakcdtfydbBdbaxhDaxcefhxkaeaD86bbaecefheaqcufgqmbkaxcdthDxekcbhDkabalcjdfaDz:mjjjb8Aalcjxf8Kjjjjbk9teiucbcbyd11jjbgeabcifc98GfgbBd11jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;LeeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiclfaeclfydbBdbaicwfaecwfydbBdbaicxfaecxfydbBdbaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk;aeedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdbaicxfalBdbaicwfalBdbaiclfalBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd11jjbgeabcrfc94GfgbBd11jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd11jjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd11jjbfgdBd11jjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akk:;Deludndndnadch9pmbabaeSmdaeabadfgi9Rcbadcet9R0mekabaead;8qbbxekaeab7ciGhldndndnabae9pmbdnalTmbadhvabhixikdnabciGmbadhvabhixdkadTmiabaeRbb86bbadcufhvdnabcefgiciGmbaecefhexdkavTmiabaeRbe86beadc9:fhvdnabcdfgiciGmbaecdfhexdkavTmiabaeRbd86bdadc99fhvdnabcifgiciGmbaecifhexdkavTmiabaeRbi86biabclfhiaeclfheadc98fhvxekdnalmbdnaiciGTmbadTmlabadcufgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc9:fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc99fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc98fgdfaeadfRbb86bbkadcl6mbdnadc98fgocd4cefciGgiTmbaec98fhlabc98fhvinavadfaladfydbBdbadc98fhdaicufgimbkkaocx6mbaec9Wfhvabc9WfhoinaoadfgicxfavadfglcxfydbBdbaicwfalcwfydbBdbaiclfalclfydbBdbaialydbBdbadc9Wfgdci0mbkkadTmdadhidnadciGglTmbaecufhvabcufhoadhiinaoaifavaifRbb86bbaicufhialcufglmbkkadcl6mdaec98fhlabc98fhvinavaifgecifalaifgdcifRbb86bbaecdfadcdfRbb86bbaecefadcefRbb86bbaeadRbb86bbaic98fgimbxikkavcl6mbdnavc98fglcd4cefcrGgdTmbavadcdt9RhvinaiaeydbBdbaeclfheaiclfhiadcufgdmbkkalc36mbinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaiaeydzBdzaiaeydCBdCaiaeydKBdKaiaeyd3Bd3aecafheaicafhiavc9Gfgvci0mbkkavTmbdndnavcrGgdmbavhlxekavc94GhlinaiaeRbb86bbaicefhiaecefheadcufgdmbkkavcw6mbinaiaeRbb86bbaiaeRbe86beaiaeRbd86bdaiaeRbi86biaiaeRbl86blaiaeRbv86bvaiaeRbo86boaiaeRbr86braicwfhiaecwfhealc94fglmbkkabkkAebcjwkxebbbdbbbzNbb",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(h){n=h.instance,n.exports.__wasm_call_ctors()});function o(h){for(var g=new Uint8Array(h.length),x=0;x96?S-97:S>64?S-39:S+4}for(var V=0,x=0;x=3),r(S<=255||S>0),r(V<=512),r(V%4==0),Z=Z||0;var R=h.BYTES_PER_ELEMENT==4?h:new Uint32Array(h);return u(R,g,g.length/x,x*4,S,V,Z)},computeClusterBounds:function(h,g,x){r(h.length%3==0),r(h.length/3<=512),r(g instanceof Float32Array),r(g.length%x==0),r(x>=3);var S=h.BYTES_PER_ELEMENT==4?h:new Uint32Array(h);return y(S,g,g.length/x,x*4)},computeMeshletBounds:function(h,g,x){return r(h.meshletCount!=0),r(g instanceof Float32Array),r(g.length%x==0),r(x>=3),p(h,g,g.length/x,x*4)},extractMeshlet:function(h,g){return r(g>=0&&g{Mr._error=t}),Mr._decoderTaskProcessor=e}return Mr._decoderTaskProcessor};Mr.decodePointCloud=function(e){let t=Mr._getDecoderTaskProcessor();if(c(Mr._error))throw Mr._error;if(Mr._taskProcessorReady)return t.scheduleTask(e,[e.buffer.buffer])};Mr.decodeBufferView=function(e){let t=Mr._getDecoderTaskProcessor();if(c(Mr._error))throw Mr._error;if(Mr._taskProcessorReady)return t.scheduleTask(e,[e.array.buffer])};var eb=Mr;var jmn=_(T(),1);var si={POSITION:"POSITION",NORMAL:"NORMAL",TANGENT:"TANGENT",TEXCOORD:"TEXCOORD",COLOR:"COLOR",JOINTS:"JOINTS",WEIGHTS:"WEIGHTS",FEATURE_ID:"_FEATURE_ID"};function s9e(e){switch(e){case si.POSITION:return"positionMC";case si.NORMAL:return"normalMC";case si.TANGENT:return"tangentMC";case si.TEXCOORD:return"texCoord";case si.COLOR:return"color";case si.JOINTS:return"joints";case si.WEIGHTS:return"weights";case si.FEATURE_ID:return"featureId";default:throw new L("semantic is not a valid value.")}}si.hasSetIndex=function(e){switch(C.typeOf.string("semantic",e),e){case si.POSITION:case si.NORMAL:case si.TANGENT:return!1;case si.TEXCOORD:case si.COLOR:case si.JOINTS:case si.WEIGHTS:case si.FEATURE_ID:return!0;default:throw new L("semantic is not a valid value.")}};si.fromGltfSemantic=function(e){C.typeOf.string("gltfSemantic",e);let t=e,i=/^(\w+)_\d+$/.exec(e);switch(i!==null&&(t=i[1]),t){case"POSITION":return si.POSITION;case"NORMAL":return si.NORMAL;case"TANGENT":return si.TANGENT;case"TEXCOORD":return si.TEXCOORD;case"COLOR":return si.COLOR;case"JOINTS":return si.JOINTS;case"WEIGHTS":return si.WEIGHTS;case"_FEATURE_ID":return si.FEATURE_ID}};si.fromPntsSemantic=function(e){switch(C.typeOf.string("pntsSemantic",e),e){case"POSITION":case"POSITION_QUANTIZED":return si.POSITION;case"RGBA":case"RGB":case"RGB565":return si.COLOR;case"NORMAL":case"NORMAL_OCT16P":return si.NORMAL;case"BATCH_ID":return si.FEATURE_ID;default:throw new L("pntsSemantic is not a valid value.")}};si.getGlslType=function(e){switch(C.typeOf.string("semantic",e),e){case si.POSITION:case si.NORMAL:case si.TANGENT:return"vec3";case si.TEXCOORD:return"vec2";case si.COLOR:return"vec4";case si.JOINTS:return"ivec4";case si.WEIGHTS:return"vec4";case si.FEATURE_ID:return"int";default:throw new L("semantic is not a valid value.")}};si.getVariableName=function(e,t){C.typeOf.string("semantic",e);let n=s9e(e);return c(t)&&(n+=`_${t}`),n};var pt=Object.freeze(si);function dy(e){e=e??z.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.primitive,o=e.draco,r=e.gltfResource,s=e.baseResource,a=e.cacheKey;C.typeOf.func("options.resourceCache",t),C.typeOf.object("options.gltf",n),C.typeOf.object("options.primitive",i),C.typeOf.object("options.draco",o),C.typeOf.object("options.gltfResource",r),C.typeOf.object("options.baseResource",s),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=xt.UNLOADED,this._promise=void 0,this._dracoError=void 0}c(Object.create)&&(dy.prototype=Object.create(Ji.prototype),dy.prototype.constructor=dy);Object.defineProperties(dy.prototype,{cacheKey:{get:function(){return this._cacheKey}},decodedData:{get:function(){return this._decodedData}}});async function a9e(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=xt.PROCESSING,e)}catch(n){if(e.isDestroyed())return;nre(e,n)}}dy.prototype.load=async function(){return c(this._promise)?this._promise:(this._state=xt.LOADING,this._promise=a9e(this),this._promise)};function nre(e,t){throw e.unload(),e._state=xt.FAILED,e.getError("Failed to load Draco",t)}async function c9e(e,t){try{let n=await t;return e.isDestroyed()?void 0:(e.unload(),e._decodedData={indices:n.indexArray,vertexAttributes:n.attributeData},e._state=xt.READY,e._baseResource)}catch(n){if(e.isDestroyed())return;e._dracoError=n}}var c_={};c_[pt.POSITION]="POSITION";c_[pt.NORMAL]="NORMAL";c_[pt.COLOR]="COLOR";c_[pt.TEXCOORD]="TEX_COORD";function l9e(e){for(let t in c_)if(c_.hasOwnProperty(t)&&e.startsWith(t))return c_[t]}dy.prototype.process=function(e){if(C.typeOf.object("frameState",e),this._state===xt.READY)return!0;if(this._state!==xt.PROCESSING||(c(this._dracoError)&&nre(this,this._dracoError),!c(this._bufferViewTypedArray))||c(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,l=[];for(let f in n.attributes)if(n.attributes.hasOwnProperty(f)){let p=l9e(f);c(p)&&i.accessors[n.attributes[f]].componentType===q.FLOAT&&(l.includes(p)||l.push(p))}let d={array:new Uint8Array(this._bufferViewTypedArray),bufferView:s,compressedAttributes:a,dequantizeInShader:!0,attributesToSkipTransform:l},u=eb.decodeBufferView(d);if(!c(u))return!1;this._decodePromise=c9e(this,u)};dy.prototype.unload=function(){c(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 IC=dy;var Sfn=_(T(),1);var mfn=_(T(),1);function d9e(e){let t=e.uint8Array,n=e.format,i=e.request,o=e.flipY??!1,r=e.skipColorSpaceConversion??!1;C.typeOf.object("uint8Array",t),C.typeOf.string("format",n);let s=new Blob([t],{type:n}),a;return Ge.supportsImageBitmapOptions().then(function(l){return l?Promise.resolve(Ge.createImageBitmapFromBlob(s,{flipY:o,premultiplyAlpha:!1,skipColorSpaceConversion:r})):(a=window.URL.createObjectURL(s),new Ge({url:a,request:i}).fetchImage({flipY:o,skipColorSpaceConversion:r}))}).then(function(l){return c(a)&&window.URL.revokeObjectURL(a),l}).catch(function(l){return c(a)&&window.URL.revokeObjectURL(a),Promise.reject(l)})}var l_=d9e;function tb(e){e=e??z.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.imageId,o=e.gltfResource,r=e.baseResource,s=e.cacheKey;C.typeOf.func("options.resourceCache",t),C.typeOf.object("options.gltf",n),C.typeOf.number("options.imageId",i),C.typeOf.object("options.gltfResource",o),C.typeOf.object("options.baseResource",r);let a=n.images[i],l=a.bufferView,d=a.uri;this._resourceCache=t,this._gltfResource=o,this._baseResource=r,this._gltf=n,this._bufferViewId=l,this._uri=d,this._cacheKey=s,this._bufferViewLoader=void 0,this._image=void 0,this._mipLevels=void 0,this._state=xt.UNLOADED,this._promise=void 0}c(Object.create)&&(tb.prototype=Object.create(Ji.prototype),tb.prototype.constructor=tb);Object.defineProperties(tb.prototype,{cacheKey:{get:function(){return this._cacheKey}},image:{get:function(){return this._image}},mipLevels:{get:function(){return this._mipLevels}}});tb.prototype.load=function(){return c(this._promise)?this._promise:c(this._bufferViewId)?(this._promise=u9e(this),this._promise):(this._promise=m9e(this),this._promise)};function ire(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 u9e(e){e._state=xt.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 h9e(i);if(e.isDestroyed())return;let r=ire(o);return e.unload(),e._image=r.image,e._mipLevels=r.mipLevels,e._state=xt.READY,e}catch(n){return e.isDestroyed()?void 0:ore(e,n,"Failed to load embedded image")}}async function m9e(e){e._state=xt.LOADING;let t=e._baseResource,n=e._uri,i=t.getDerivedResource({url:n});try{let o=await b9e(i);if(e.isDestroyed())return;let r=ire(o);return e.unload(),e._image=r.image,e._mipLevels=r.mipLevels,e._state=xt.READY,e}catch(o){return e.isDestroyed()?void 0:ore(e,o,`Failed to load image: ${n}`)}}function ore(e,t,n){return e.unload(),e._state=xt.FAILED,Promise.reject(e.getError(n,t))}function f9e(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 le("Image format is not recognized")}async function h9e(e){let t=f9e(e);if(t==="image/ktx2"){let n=new Uint8Array(e);return Ll(n)}return tb._loadImageFromTypedArray({uint8Array:e,format:t,flipY:!1,skipColorSpaceConversion:!0})}var p9e=/(^data:image\/ktx2)|(\.ktx2$)/i;function b9e(e){let t=e.getUrlComponent(!1,!0);return p9e.test(t)?Ll(e):e.fetchImage({skipColorSpaceConversion:!0,preferImageBitmap:!0})}tb.prototype.unload=function(){c(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};tb._loadImageFromTypedArray=l_;var WC=tb;var Mfn=_(T(),1);var Vfn=_(T(),1),y9e={TEXTURE:0,PROGRAM:1,BUFFER:2,NUMBER_OF_JOB_TYPES:3},fa=Object.freeze(y9e);function uy(e){e=e??z.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.accessorId,o=e.gltfResource,r=e.baseResource,s=e.primitive,a=e.draco,l=e.cacheKey,d=e.asynchronous??!0,u=e.loadBuffer??!1,f=e.loadTypedArray??!1;if(C.typeOf.func("options.resourceCache",t),C.typeOf.object("options.gltf",n),C.typeOf.number("options.accessorId",i),C.typeOf.object("options.gltfResource",o),C.typeOf.object("options.baseResource",r),!u&&!f)throw new L("At least one of loadBuffer and loadTypedArray must be true.");let 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=l,this._asynchronous=d,this._loadBuffer=u,this._loadTypedArray=f,this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._typedArray=void 0,this._buffer=void 0,this._state=xt.UNLOADED,this._promise=void 0}c(Object.create)&&(uy.prototype=Object.create(Ji.prototype),uy.prototype.constructor=uy);Object.defineProperties(uy.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 g9e=new FH;uy.prototype.load=async function(){return c(this._promise)?this._promise:c(this._draco)?(this._promise=x9e(this),this._promise):(this._promise=_9e(this),this._promise)};async function x9e(e){e._state=xt.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=xt.LOADED,e)}catch(n){if(e.isDestroyed())return;vH(e,n)}}async function _9e(e){let t=e._gltf,n=e._accessorId,o=t.accessors[n].bufferView;e._state=xt.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=T9e(e,a),e._state=xt.PROCESSING,e}catch(s){if(e.isDestroyed())return;vH(e,s)}}function T9e(e,t){let n=e._gltf,i=e._accessorId,o=n.accessors[i],r=o.count,s=o.componentType,a=Me.getSizeInBytes(s),l=t.buffer,d=t.byteOffset+o.byteOffset;if(d%a!==0){let f=r*a,p=new Uint8Array(l,d,f);l=new Uint8Array(p).buffer,d=0,Cs("index-buffer-unaligned",`The index array is not aligned to a ${a}-byte boundary.`)}let u;return s===Me.UNSIGNED_BYTE?u=new Uint8Array(l,d,r):s===Me.UNSIGNED_SHORT?u=new Uint16Array(l,d,r):s===Me.UNSIGNED_INT&&(u=new Uint32Array(l,d,r)),u}function vH(e,t){throw e.unload(),e._state=xt.FAILED,e.getError("Failed to load index buffer",t)}function FH(){this.typedArray=void 0,this.indexDatatype=void 0,this.context=void 0,this.buffer=void 0}FH.prototype.set=function(e,t,n){this.typedArray=e,this.indexDatatype=t,this.context=n};FH.prototype.execute=function(){this.buffer=rre(this.typedArray,this.indexDatatype,this.context)};function rre(e,t,n){let i=_t.createIndexBuffer({typedArray:e,context:n,usage:Ne.STATIC_DRAW,indexDatatype:t});return i.vertexArrayDestroyable=!1,i}uy.prototype.process=function(e){if(C.typeOf.object("frameState",e),this._state===xt.READY)return!0;if(this._state!==xt.LOADED&&this._state!==xt.PROCESSING)return!1;let t=this._typedArray,n=this._indexDatatype;if(c(this._dracoLoader))try{this._dracoLoader.process(e)&&(t=this._dracoLoader.decodedData.indices.typedArray,this._typedArray=t,n=q.fromTypedArray(t),this._indexDatatype=n)}catch(o){vH(this,o)}if(!c(t))return!1;let i;if(this._loadBuffer&&this._asynchronous){let o=g9e;if(o.set(t,n,e.context),!e.jobScheduler.execute(o,fa.BUFFER))return!1;i=o.buffer}else this._loadBuffer&&(i=rre(t,n,e.context));return this.unload(),this._buffer=i,this._typedArray=this._loadTypedArray?t:void 0,this._state=xt.READY,this._resourceCache.statistics.addGeometryLoader(this),!0};uy.prototype.unload=function(){c(this._buffer)&&this._buffer.destroy();let e=this._resourceCache;c(this._bufferViewLoader)&&!this._bufferViewLoader.isDestroyed()&&e.unload(this._bufferViewLoader),c(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 wC=uy;var Dbn=_(T(),1);var chn=_(T(),1);var kfn=_(T(),1);function S9e(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 Vs=S9e;var zfn=_(T(),1);var Dfn=_(T(),1);function C9e(e,t){return c(e.extensionsUsed)&&e.extensionsUsed.indexOf(t)>=0}var ur=C9e;function Qt(){}Qt.objectLegacy=function(e,t){if(c(e)){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)){let i=e[n],o=t(i,n);if(c(o))return o}}};Qt.object=function(e,t){if(c(e)){let n=e.length;for(let i=0;i0)return i.byteStride}return q.getSizeInBytes(t.componentType)*Sd(t.type)}var Pl=L9e;function Z9e(e){we.accessor(e,function(n){c(n.bufferView)&&(n.byteOffset=n.byteOffset??0)}),we.bufferView(e,function(n){c(n.buffer)&&(n.byteOffset=n.byteOffset??0)}),we.mesh(e,function(n){we.meshPrimitive(n,function(i){if(i.mode=i.mode??oe.TRIANGLES,!c(i.material)){c(e.materials)||(e.materials=[]);let o={name:"default"};i.material=Vs(e.materials,o)}})}),we.accessorContainingVertexAttributeData(e,function(n){let i=e.accessors[n],o=i.bufferView;if(i.normalized=i.normalized??!1,c(o)){let r=e.bufferViews[o];r.byteStride=Pl(e,i),r.target=oe.ARRAY_BUFFER}}),we.accessorContainingIndexData(e,function(n){let o=e.accessors[n].bufferView;if(c(o)){let r=e.bufferViews[o];r.target=oe.ELEMENT_ARRAY_BUFFER}}),we.material(e,function(n){let i=n.extensions??z.EMPTY_OBJECT,o=i.KHR_materials_common;if(c(o)){let l=o.technique,d=c(o.values)?o.values:{};o.values=d,d.ambient=c(d.ambient)?d.ambient:[0,0,0,1],d.emission=c(d.emission)?d.emission:[0,0,0,1],d.transparency=d.transparency??1,l!=="CONSTANT"&&(d.diffuse=c(d.diffuse)?d.diffuse:[0,0,0,1],l!=="LAMBERT"&&(d.specular=c(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;c(r)&&we.materialValue(n,function(l){c(l.index)&&d_(l)}),d_(n.emissiveTexture),d_(n.normalTexture),d_(n.occlusionTexture);let s=n.pbrMetallicRoughness;c(s)&&(s.baseColorFactor=s.baseColorFactor??[1,1,1,1],s.metallicFactor=s.metallicFactor??1,s.roughnessFactor=s.roughnessFactor??1,d_(s.baseColorTexture),d_(s.metallicRoughnessTexture));let a=i.KHR_materials_pbrSpecularGlossiness;c(a)&&(a.diffuseFactor=a.diffuseFactor??[1,1,1,1],a.specularFactor=a.specularFactor??[1,1,1],a.glossinessFactor=a.glossinessFactor??1,d_(a.specularGlossinessTexture))}),we.animation(e,function(n){we.animationSampler(n,function(i){i.interpolation=i.interpolation??"LINEAR"})});let t=R9e(e);return we.node(e,function(n,i){c(t[i])||c(n.translation)||c(n.rotation)||c(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]}),we.sampler(e,function(n){n.wrapS=n.wrapS??oe.REPEAT,n.wrapT=n.wrapT??oe.REPEAT}),c(e.scenes)&&!c(e.scene)&&(e.scene=0),e}function R9e(e){let t={};return we.animation(e,function(n){we.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 d_(e){c(e)&&(e.texCoord=e.texCoord??0)}var zX=Z9e;var mhn=_(T(),1);function G9e(e){return we.shader(e,function(t){v5(t)}),we.buffer(e,function(t){v5(t)}),we.image(e,function(t){v5(t)}),v5(e),e}function v5(e){e.extras=c(e.extras)?e.extras:{},e.extras._pipeline=c(e.extras._pipeline)?e.extras._pipeline:{}}var my=G9e;var Rhn=_(T(),1);var xhn=_(T(),1);var phn=_(T(),1);function E9e(e,t){let n=e.extensionsRequired;if(c(n)){let i=n.indexOf(t);i>=0&&n.splice(i,1),n.length===0&&delete e.extensionsRequired}}var KX=E9e;function X9e(e,t){let n=e.extensionsUsed;if(c(n)){let i=n.indexOf(t);i>=0&&n.splice(i,1),KX(e,t),n.length===0&&delete e.extensionsUsed}}var u_=X9e;var I9e=4;function W9e(e){if(Hm(e)!=="glTF")throw new le("File is not valid binary glTF");let n=sre(e,0,5),i=n[1];if(i!==1&&i!==2)throw new le("Binary glTF version is not 1 or 2");return i===1?w9e(e,n):P9e(e,n)}function sre(e,t,n){let i=new DataView(e.buffer),o=new Array(n);for(let r=0;r0){let f=u.binary_glTF??u.KHR_binary_glTF;c(f)&&(f.extras._pipeline.source=d,delete f.uri)}return u_(l,"KHR_binary_glTF"),l}function P9e(e,t){let n=t[2],i=12,o,r;for(;i0){let a=s[0];a.extras._pipeline.source=r}}return o}var JX=W9e;var Ihn=_(T(),1);function v9e(e){return we.shader(e,function(t){F5(t)}),we.buffer(e,function(t){F5(t)}),we.image(e,function(t){F5(t)}),F5(e),e}function F5(e){c(e.extras)&&(c(e.extras._pipeline)&&delete e.extras._pipeline,Object.keys(e.extras).length===0&&delete e.extras)}var QX=v9e;var dbn=_(T(),1);var vhn=_(T(),1);function F9e(e,t){let n=e.extensionsUsed;c(n)||(n=[],e.extensionsUsed=n),Vs(n,t,!0)}var wu=F9e;var Yhn=_(T(),1);var Mhn=_(T(),1);function A9e(e){switch(e){case q.BYTE:return function(t,n,i,o,r){for(let s=0;s-1:!1}var U9e=[oe.ZERO,oe.ONE,oe.SRC_COLOR,oe.ONE_MINUS_SRC_COLOR,oe.SRC_ALPHA,oe.ONE_MINUS_SRC_ALPHA,oe.DST_ALPHA,oe.ONE_MINUS_DST_ALPHA,oe.DST_COLOR,oe.ONE_MINUS_DST_COLOR];function O9e(e,t){if(!c(e))return t;for(let n=0;n<4;n++)if(U9e.indexOf(e[n])===-1)return t;return e}function D9e(e){let t={},n={},i=e.techniques;return c(i)&&(we.technique(e,function(o,r){let s=o.states;if(c(s)){let a=n[r]={};if(are(s,oe.BLEND)){a.alphaMode="BLEND";let l=s.functions;c(l)&&(c(l.blendEquationSeparate)||c(l.blendFuncSeparate))&&(t[r]={blendEquation:l.blendEquationSeparate??N9e,blendFactors:O9e(l.blendFuncSeparate,k9e)})}are(s,oe.CULL_FACE)||(a.doubleSided=!0),delete o.states}}),Object.keys(t).length>0&&(c(e.extensions)||(e.extensions={}),wu(e,"KHR_blend")),we.material(e,function(o){if(c(o.technique)){let r=n[o.technique];we.objectLegacy(r,function(a,l){o[l]=a});let s=t[o.technique];c(s)&&(c(o.extensions)||(o.extensions={}),o.extensions.KHR_blend=s)}})),e}var jX=D9e;var lpn=_(T(),1);var npn=_(T(),1);function B9e(e,t){let n=e.extensionsRequired;c(n)||(n=[],e.extensionsRequired=n),Vs(n,t,!0),wu(e,t)}var qX=B9e;function Y9e(e){let t=e.techniques,n={},i={},o={};if(c(t)){let r={programs:[],shaders:[],techniques:[]},s=e.glExtensionsUsed;delete e.glExtensionsUsed,we.technique(e,function(a,l){let d={name:a.name,program:void 0,attributes:{},uniforms:{}},u;if(we.techniqueAttribute(a,function(f,p){u=a.parameters[f],d.attributes[p]={semantic:u.semantic}}),we.techniqueUniform(a,function(f,p){u=a.parameters[f],d.uniforms[p]={count:u.count,node:u.node,type:u.type,semantic:u.semantic,value:u.value},c(n[l])||(n[l]={}),n[l][f]=p}),c(o[a.program]))d.program=o[a.program];else{let f=e.programs[a.program],p={name:f.name,fragmentShader:void 0,vertexShader:void 0,glExtensions:s},y=e.shaders[f.fragmentShader];p.fragmentShader=Vs(r.shaders,y,!0);let h=e.shaders[f.vertexShader];p.vertexShader=Vs(r.shaders,h,!0),d.program=Vs(r.programs,p),o[a.program]=d.program}i[l]=Vs(r.techniques,d)}),r.techniques.length>0&&(c(e.extensions)||(e.extensions={}),e.extensions.KHR_techniques_webgl=r,wu(e,"KHR_techniques_webgl"),qX(e,"KHR_techniques_webgl"))}return we.material(e,function(r){if(c(r.technique)){let s={technique:i[r.technique]};we.objectLegacy(r.values,function(a,l){c(s.values)||(s.values={});let d=n[r.technique][l];c(d)&&(s.values[d]=a)}),c(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 $X=Y9e;var _pn=_(T(),1);var hpn=_(T(),1);function H9e(e,t){C.typeOf.object("material",e),C.defined("handler",t);let n=e.pbrMetallicRoughness;if(c(n)){if(c(n.baseColorTexture)){let r=n.baseColorTexture,s=t(r.index,r);if(c(s))return s}if(c(n.metallicRoughnessTexture)){let r=n.metallicRoughnessTexture,s=t(r.index,r);if(c(s))return s}}let{extensions:i}=e;if(c(i)){let r=i.KHR_materials_pbrSpecularGlossiness;if(c(r)){if(c(r.diffuseTexture)){let l=r.diffuseTexture,d=t(l.index,l);if(c(d))return d}if(c(r.specularGlossinessTexture)){let l=r.specularGlossinessTexture,d=t(l.index,l);if(c(d))return d}}let s=i.KHR_materials_specular;if(c(s)){let{specularTexture:l,specularColorTexture:d}=s;if(c(l)){let u=t(l.index,l);if(c(u))return u}if(c(d)){let u=t(d.index,d);if(c(u))return u}}let a=i.KHR_materials_common;if(c(a)&&c(a.values)){let{diffuse:l,ambient:d,emission:u,specular:f}=a.values;if(c(l)&&c(l.index)){let p=t(l.index,l);if(c(p))return p}if(c(d)&&c(d.index)){let p=t(d.index,d);if(c(p))return p}if(c(u)&&c(u.index)){let p=t(u.index,u);if(c(p))return p}if(c(f)&&c(f.index)){let p=t(f.index,f);if(c(p))return p}}}let o=we.materialValue(e,function(r){if(c(r.index)){let s=t(r.index,r);if(c(s))return s}});if(c(o))return o;if(c(e.emissiveTexture)){let r=e.emissiveTexture,s=t(r.index,r);if(c(s))return s}if(c(e.normalTexture)){let r=e.normalTexture,s=t(r.index,r);if(c(s))return s}if(c(e.occlusionTexture)){let r=e.occlusionTexture,s=t(r.index,r);if(c(s))return s}}var PC=H9e;var cre=["mesh","node","material","accessor","bufferView","buffer","texture","sampler","image"];function z9e(e,t){return t=t??cre,cre.forEach(function(n){t.indexOf(n)>-1&&J9e(e,n)}),e}var K9e={accessor:"accessors",buffer:"buffers",bufferView:"bufferViews",image:"images",node:"nodes",material:"materials",mesh:"meshes",sampler:"samplers",texture:"textures"};function J9e(e,t){let n=K9e[t],i=e[n];if(c(i)){let o=0,r=_h[t](e),s=i.length;for(let a=0;at&&o.attributes[l]--}),we.meshPrimitiveTarget(o,function(a){we.meshPrimitiveTargetAttribute(a,function(l,d){l>t&&a[d]--})});let r=o.indices;c(r)&&r>t&&o.indices--;let s=o.extensions;c(s)&&c(s.CESIUM_primitive_outline)&&s.CESIUM_primitive_outline.indices>t&&--s.CESIUM_primitive_outline.indices})}),we.skin(e,function(i){c(i.inverseBindMatrices)&&i.inverseBindMatrices>t&&i.inverseBindMatrices--}),we.animation(e,function(i){we.animationSampler(i,function(o){c(o.input)&&o.input>t&&o.input--,c(o.output)&&o.output>t&&o.output--})})};xh.buffer=function(e,t){e.buffers.splice(t,1),we.bufferView(e,function(i){c(i.buffer)&&i.buffer>t&&i.buffer--,c(i.extensions)&&c(i.extensions.EXT_meshopt_compression)&&i.extensions.EXT_meshopt_compression.buffer--})};xh.bufferView=function(e,t){if(e.bufferViews.splice(t,1),we.accessor(e,function(i){c(i.bufferView)&&i.bufferView>t&&i.bufferView--}),we.shader(e,function(i){c(i.bufferView)&&i.bufferView>t&&i.bufferView--}),we.image(e,function(i){c(i.bufferView)&&i.bufferView>t&&i.bufferView--}),ur(e,"KHR_draco_mesh_compression")&&we.mesh(e,function(i){we.meshPrimitive(i,function(o){c(o.extensions)&&c(o.extensions.KHR_draco_mesh_compression)&&o.extensions.KHR_draco_mesh_compression.bufferView>t&&o.extensions.KHR_draco_mesh_compression.bufferView--})}),ur(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(c(a)){for(let l in a)if(a.hasOwnProperty(l)){let d=a[l];c(d.bufferView)&&d.bufferView>t&&d.bufferView--,c(d.arrayOffsetBufferView)&&d.arrayOffsetBufferView>t&&d.arrayOffsetBufferView--,c(d.stringOffsetBufferView)&&d.stringOffsetBufferView>t&&d.stringOffsetBufferView--}}}}if(ur(e,"EXT_structural_metadata")){let o=e.extensions.EXT_structural_metadata.propertyTables;if(c(o)){let r=o.length;for(let s=0;st&&u.values--,c(u.arrayOffsets)&&u.arrayOffsets>t&&u.arrayOffsets--,c(u.stringOffsets)&&u.stringOffsets>t&&u.stringOffsets--}}}}};xh.image=function(e,t){e.images.splice(t,1),we.texture(e,function(i){c(i.source)&&i.source>t&&--i.source;let o=i.extensions;c(o)&&c(o.EXT_texture_webp)&&o.EXT_texture_webp.source>t?--i.extensions.EXT_texture_webp.source:c(o)&&c(o.KHR_texture_basisu)&&o.KHR_texture_basisu.source>t&&--i.extensions.KHR_texture_basisu.source})};xh.mesh=function(e,t){e.meshes.splice(t,1),we.node(e,function(i){c(i.mesh)&&(i.mesh>t?i.mesh--:i.mesh===t&&delete i.mesh)})};xh.node=function(e,t){e.nodes.splice(t,1),we.skin(e,function(i){c(i.skeleton)&&i.skeleton>t&&i.skeleton--,i.joints=i.joints.map(function(o){return o>t?o-1:o})}),we.animation(e,function(i){we.animationChannel(i,function(o){c(o.target)&&c(o.target.node)&&o.target.node>t&&o.target.node--})}),we.technique(e,function(i){we.techniqueUniform(i,function(o){c(o.node)&&o.node>t&&o.node--})}),we.node(e,function(i){c(i.children)&&(i.children=i.children.filter(function(o){return o!==t}).map(function(o){return o>t?o-1:o}))}),we.scene(e,function(i){i.nodes=i.nodes.filter(function(o){return o!==t}).map(function(o){return o>t?o-1:o})})};xh.material=function(e,t){e.materials.splice(t,1),we.mesh(e,function(i){we.meshPrimitive(i,function(o){c(o.material)&&o.material>t&&o.material--})})};xh.sampler=function(e,t){e.samplers.splice(t,1),we.texture(e,function(i){c(i.sampler)&&i.sampler>t&&--i.sampler})};xh.texture=function(e,t){if(e.textures.splice(t,1),we.material(e,function(i){PC(i,function(o,r){r.index>t&&--r.index})}),ur(e,"EXT_feature_metadata")){we.mesh(e,function(r){we.meshPrimitive(r,function(s){let a=s.extensions;if(c(a)&&c(a.EXT_feature_metadata)){let d=a.EXT_feature_metadata.featureIdTextures;if(c(d)){let u=d.length;for(let f=0;ft&&--y.index}}}})});let o=e.extensions.EXT_feature_metadata.featureTextures;for(let r in o)if(o.hasOwnProperty(r)){let a=o[r].properties;if(c(a)){for(let l in a)if(a.hasOwnProperty(l)){let u=a[l].texture;u.index>t&&--u.index}}}}if(ur(e,"EXT_mesh_features")&&we.mesh(e,function(i){we.meshPrimitive(i,function(o){let r=o.extensions;if(c(r)&&c(r.EXT_mesh_features)){let a=r.EXT_mesh_features.featureIds;if(c(a)){let l=a.length;for(let d=0;dt&&--u.texture.index}}}})}),ur(e,"EXT_structural_metadata")){let o=e.extensions.EXT_structural_metadata.propertyTextures;if(c(o)){let r=o.length;for(let s=0;st&&--u.index}}}}};function _h(){}_h.accessor=function(e){let t={};return we.mesh(e,function(n){we.meshPrimitive(n,function(i){we.meshPrimitiveAttribute(i,function(r){t[r]=!0}),we.meshPrimitiveTarget(i,function(r){we.meshPrimitiveTargetAttribute(r,function(s){t[s]=!0})});let o=i.indices;c(o)&&(t[o]=!0)})}),we.skin(e,function(n){c(n.inverseBindMatrices)&&(t[n.inverseBindMatrices]=!0)}),we.animation(e,function(n){we.animationSampler(n,function(i){c(i.input)&&(t[i.input]=!0),c(i.output)&&(t[i.output]=!0)})}),ur(e,"EXT_mesh_gpu_instancing")&&we.node(e,function(n){c(n.extensions)&&c(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})}),ur(e,"CESIUM_primitive_outline")&&we.mesh(e,function(n){we.meshPrimitive(n,function(i){let o=i.extensions;if(c(o)&&c(o.CESIUM_primitive_outline)){let s=o.CESIUM_primitive_outline.indices;c(s)&&(t[s]=!0)}})}),t};_h.buffer=function(e){let t={};return we.bufferView(e,function(n){c(n.buffer)&&(t[n.buffer]=!0),c(n.extensions)&&c(n.extensions.EXT_meshopt_compression)&&(t[n.extensions.EXT_meshopt_compression.buffer]=!0)}),t};_h.bufferView=function(e){let t={};if(we.accessor(e,function(n){c(n.bufferView)&&(t[n.bufferView]=!0)}),we.shader(e,function(n){c(n.bufferView)&&(t[n.bufferView]=!0)}),we.image(e,function(n){c(n.bufferView)&&(t[n.bufferView]=!0)}),ur(e,"KHR_draco_mesh_compression")&&we.mesh(e,function(n){we.meshPrimitive(n,function(i){c(i.extensions)&&c(i.extensions.KHR_draco_mesh_compression)&&(t[i.extensions.KHR_draco_mesh_compression.bufferView]=!0)})}),ur(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(c(s)){for(let a in s)if(s.hasOwnProperty(a)){let l=s[a];c(l.bufferView)&&(t[l.bufferView]=!0),c(l.arrayOffsetBufferView)&&(t[l.arrayOffsetBufferView]=!0),c(l.stringOffsetBufferView)&&(t[l.stringOffsetBufferView]=!0)}}}}if(ur(e,"EXT_structural_metadata")){let i=e.extensions.EXT_structural_metadata.propertyTables;if(c(i)){let o=i.length;for(let r=0;r0&&(t[n.mesh]=!0)}}),t};function lre(e,t,n){let i=e.nodes[t];return c(i.mesh)||c(i.camera)||c(i.skin)||c(i.weights)||c(i.extras)||c(i.extensions)&&Object.keys(i.extensions).length!==0||c(n[t])?!1:!c(i.children)||i.children.filter(function(o){return!lre(e,o,n)}).length===0}_h.node=function(e){let t={};return we.skin(e,function(n){c(n.skeleton)&&(t[n.skeleton]=!0),we.skinJoint(n,function(i){t[i]=!0})}),we.animation(e,function(n){we.animationChannel(n,function(i){c(i.target)&&c(i.target.node)&&(t[i.target.node]=!0)})}),we.technique(e,function(n){we.techniqueUniform(n,function(i){c(i.node)&&(t[i.node]=!0)})}),we.node(e,function(n,i){lre(e,i,t)||(t[i]=!0)}),t};_h.material=function(e){let t={};return we.mesh(e,function(n){we.meshPrimitive(n,function(i){c(i.material)&&(t[i.material]=!0)})}),t};_h.texture=function(e){let t={};if(we.material(e,function(n){PC(n,function(i){t[i]=!0})}),ur(e,"EXT_feature_metadata")){we.mesh(e,function(o){we.meshPrimitive(o,function(r){let s=r.extensions;if(c(s)&&c(s.EXT_feature_metadata)){let l=s.EXT_feature_metadata.featureIdTextures;if(c(l)){let d=l.length;for(let u=0;u0)for(s.mesh=n.meshes[l[0]],t=1;t0&&c(s.skin)){let u=e.skins[s.skin];u.skeleton=n.nodes[l[0]]}delete s.skeletons}c(s.jointName)&&delete s.jointName}),we.skin(e,function(s){c(s.inverseBindMatrices)&&(s.inverseBindMatrices=n.accessors[s.inverseBindMatrices]);let a=s.jointNames;if(c(a)){let l=[],d=a.length;for(t=0;t=0&&(a=r.substring(0,s),l=r.substring(s));let d,u=gMe[a];c(u)?(d=u+l,t[r]=d):c(yMe[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];c(s)&&(delete i.attributes[o],i.attributes[r]=s)}})}),we.technique(e,function(n){we.techniqueParameter(n,function(i){let o=t[i.semantic];c(o)&&(i.semantic=o)})})}function _Me(e){we.camera(e,function(t){let n=t.perspective;if(c(n)){let i=n.aspectRatio;c(i)&&i===0&&delete n.aspectRatio;let o=n.yfov;c(o)&&o===0&&(n.yfov=1)}})}function NH(e,t){return c(t.byteStride)&&t.byteStride!==0?t.byteStride:Pl(e,t)}function TMe(e){we.buffer(e,function(t){c(t.byteLength)||(t.byteLength=t.extras._pipeline.source.length)}),we.accessor(e,function(t){let n=t.bufferView;if(c(n)){let i=e.bufferViews[n],o=NH(e,t),r=t.byteOffset+t.count*o;i.byteLength=Math.max(i.byteLength??0,r)}})}function SMe(e){let t,n,i,o=e.bufferViews,r={};we.accessorContainingVertexAttributeData(e,function(a){let l=e.accessors[a];c(l.bufferView)&&(r[l.bufferView]=!0)});let s={};we.accessor(e,function(a){c(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 l=s[a];l.sort(function(p,y){return p.byteOffset-y.byteOffset});let d=0,u=0,f=l.length;for(t=0;t=0;--r)if(i[r]===t){i.splice(r,1);return}}}),we.node(e,function(n,i){if(c(n.children)){let o=n.children.indexOf(t);o>-1&&(n.children.splice(o,1),fre(n)&&hre(e,i))}}),delete e.nodes[t]}function VMe(e){return we.node(e,function(t,n){fre(t)&&hre(e,n)}),e}function LMe(e){we.animation(e,function(t){we.animationSampler(t,function(n){let i=e.accessors[n.input];if(!c(i.min)||!c(i.max)){let o=m_(e,i);i.min=o.min,i.max=o.max}})})}function ZMe(e){we.accessor(e,function(t){if(c(t.min)||c(t.max)){let n=m_(e,t);c(t.min)&&(t.min=n.min),c(t.max)&&(t.max=n.max)}})}function RMe(e){e.asset=e.asset??{},e.asset.version="2.0",mre(e),aMe(e),VMe(e),cMe(e),lMe(e),uMe(e),fMe(e),TMe(e),SMe(e),CMe(e),LMe(e),ZMe(e),hMe(e),pMe(e),bMe(e),xMe(e),iI(e),_Me(e),jX(e),$X(e),dMe(e)}var GMe=["u_tex","u_diffuse","u_emission","u_diffuse_tex"],EMe=["u_diffuse","u_diffuse_mat"];function kH(e){e.pbrMetallicRoughness=c(e.pbrMetallicRoughness)?e.pbrMetallicRoughness:{},e.pbrMetallicRoughness.roughnessFactor=1,e.pbrMetallicRoughness.metallicFactor=0}function UH(e){return c(e.index)}function OH(e){return Array.isArray(e)&&e.length===4}function pre(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 XMe(e,t){t=t??z.EMPTY_OBJECT;let n=t.baseColorTextureNames??GMe,i=t.baseColorFactorNames??EMe;we.material(e,function(o){we.materialValue(o,function(r,s){n.indexOf(s)!==-1&&UH(r)?(kH(o),o.pbrMetallicRoughness.baseColorTexture=r):i.indexOf(s)!==-1&&OH(r)&&(kH(o),o.pbrMetallicRoughness.baseColorFactor=pre(r))})}),f_(e,"KHR_techniques_webgl"),f_(e,"KHR_blend")}function MH(e,t){c(t)&&(OH(t)?e.pbrMetallicRoughness.baseColorFactor=pre(t):UH(t)&&(e.pbrMetallicRoughness.baseColorTexture=t))}function ure(e,t){c(t)&&(OH(t)?e.emissiveFactor=t.slice(0,3):UH(t)&&(e.emissiveTexture=t))}function IMe(e){we.material(e,function(t){let n=(t.extensions??z.EMPTY_OBJECT).KHR_materials_common;if(!c(n))return;let i=n.values??{},o=i.ambient,r=i.diffuse,s=i.emission,a=i.transparency,l=n.doubleSided,d=n.transparent;kH(t),n.technique==="CONSTANT"?(wu(e,"KHR_materials_unlit"),t.extensions=c(t.extensions)?t.extensions:{},t.extensions.KHR_materials_unlit={},MH(t,s),MH(t,o)):(MH(t,r),ure(t,o),ure(t,s)),c(l)&&(t.doubleSided=l),c(a)&&(c(t.pbrMetallicRoughness.baseColorFactor)?t.pbrMetallicRoughness.baseColorFactor[3]*=a:t.pbrMetallicRoughness.baseColorFactor=[1,1,1,a]),c(d)&&(t.alphaMode=d?"BLEND":"OPAQUE")}),f_(e,"KHR_materials_common")}var oI=tMe;var Cbn=_(T(),1);function fc(){}fc.getError=function(e,t,n){let i=`Failed to load ${e}: ${t}`;c(n)&&c(n.message)&&(i+=` ${n.message}`);let o=new le(i);return c(n)&&(o.stack=`Original stack: ${n.stack} Handler stack: ${o.stack}`),o};fc.getNodeTransform=function(e){return c(e.matrix)?e.matrix:M.fromTranslationQuaternionRotationScale(c(e.translation)?e.translation:m.ZERO,c(e.rotation)?e.rotation:Fe.IDENTITY,c(e.scale)?e.scale:m.ONE)};fc.getAttributeBySemantic=function(e,t,n){let i=e.attributes,o=i.length;for(let r=0;r=this._contentAvailabilityBitstreams.length)throw new L("contentIndex out of bounds.");return this._contentAvailabilityBitstreams[t].getBit(e)};ha.prototype.contentIsAvailableAtCoordinates=function(e,t){let n=this.getTileIndex(e);return this.contentIsAvailableAtIndex(n,t)};ha.prototype.childSubtreeIsAvailableAtIndex=function(e){return this._childSubtreeAvailability.getBit(e)};ha.prototype.childSubtreeIsAvailableAtCoordinates=function(e){let t=this.getChildSubtreeIndex(e);return this.childSubtreeIsAvailableAtIndex(t)};ha.prototype.getLevelOffset=function(e){let t=this._branchingFactor;return(Math.pow(t,e)-1)/(t-1)};ha.prototype.getParentMortonIndex=function(e){let t=2;return this._subdivisionScheme===tr.OCTREE&&(t=3),e>>t};ha.fromSubtreeJson=async function(e,t,n,i,o){if(C.typeOf.object("resource",e),c(t)===c(n))throw new L("One of json and subtreeView must be defined.");C.typeOf.object("implicitTileset",i),C.typeOf.object("implicitCoordinates",o);let r=new ha(e,i,o),s;c(t)?s={json:t,binary:void 0}:s=SNe(n);let a=s.json;r._subtreeJson=a;let l;if(ri(a,"3DTILES_metadata"))l=a.extensions["3DTILES_metadata"];else if(c(a.tileMetadata)){let V=a.tileMetadata;l=a.propertyTables[V]}let d=[];if(c(a.contentMetadata)){let V=a.contentMetadata.length;for(let Z=0;Z0;u=u||f;for(let p=0;p>BigInt(61)),d=l%2===0?ZC.encode2D(i,o,r):ZC.encode2D(i,r,o),u=Qp.fromFacePositionLevel(l,BigInt(d),i),f,p;if(c(s)){let y=(a.maximumHeight+a.minimumHeight)/2;f=n<4?a.minimumHeight:y,p=n<4?y:a.maximumHeight}else f=a.minimumHeight,p=a.maximumHeight;return{extensions:{"3DTILES_bounding_volume_S2":{token:Qp.getTokenFromId(u._cellId),minimumHeight:f,maximumHeight:p}}}}var BNe=new m,YNe=new m,QH=new m,HNe=new te;function Xre(e,t,n,i,o){if(C.typeOf.object("rootBox",e),C.typeOf.number("level",t),C.typeOf.number("x",n),C.typeOf.number("y",i),c(o)&&C.typeOf.number("z",o),t===0)return e;let r=m.unpack(e,0,YNe),s=te.unpack(e,3,HNe),a=Math.pow(2,-t),l=-1+(2*n+1)*a,d=-1+(2*i+1)*a,u=0,f=m.fromElements(a,a,1,BNe);c(o)&&(u=-1+(2*o+1)*a,f.z=a);let p=m.fromElements(l,d,u,QH);p=te.multiplyByVector(s,p,QH),p=m.add(p,r,QH);let y=te.clone(s);y=te.multiplyByScale(y,f,y);let h=new Array(12);return m.pack(p,h),te.pack(y,h,3),h}var zNe=new de;function Ire(e,t,n,i,o){if(C.typeOf.object("rootRegion",e),C.typeOf.number("level",t),C.typeOf.number("x",n),C.typeOf.number("y",i),c(o)&&C.typeOf.number("z",o),t===0)return e.slice();let r=de.unpack(e,0,zNe),s=e[4],a=e[5],l=Math.pow(2,-t),d=l*r.width,u=w.negativePiToPi(r.west+n*d),f=w.negativePiToPi(u+d),p=l*r.height,y=w.negativePiToPi(r.south+i*p),h=w.negativePiToPi(y+p),g=s,x=a;if(c(o)){let S=l*(a-s);g+=o*S,x=g+S}return[u,y,f,h,g,x]}function KNe(e,t,n){let i=e._implicitTileset,o=t.implicitCoordinates.getChildCoordinates(n),r=Gre(i,o,n,!1,t),s=Rre(void 0,i,o),a=i.subtreeUriTemplate.getDerivedResource({templateValues:o.getTemplateValues()}).url,l={boundingVolume:r,geometricError:s,refine:i.refine,contents:[{uri:a}]},d=Wre(e,i.baseResource,l,t);return d.implicitTileset=i,d.implicitCoordinates=o,d}function Wre(e,t,n,i){let o=e._tile.constructor;return new o(e._tileset,t,n,i)}jc.prototype.hasProperty=function(e,t){return!1};jc.prototype.getFeature=function(e){};jc.prototype.applyDebugSettings=function(e,t){};jc.prototype.applyStyle=function(e){};jc.prototype.update=function(e,t){};jc.prototype.pick=function(e,t,n){};jc.prototype.isDestroyed=function(){return!1};jc.prototype.destroy=function(){return this._implicitSubtree=this._implicitSubtree&&this._implicitSubtree.destroy(),he(this)};jc._deriveBoundingBox=Xre;jc._deriveBoundingRegion=Ire;jc._deriveBoundingVolumeS2=Ere;var kC=jc;var o5n=_(T(),1);var kgn=_(T(),1),JNe={NONE:0,REPEAT:1,MIRRORED_REPEAT:2},Al=Object.freeze(JNe);var zNn=_(T(),1);var fxn=_(T(),1);var Ygn=_(T(),1);function UC(e,t){C.typeOf.object("normal",e),C.typeOf.number("distance",t),this._distance=t,this._normal=new wre(e,this),this.onChangeCallback=void 0,this.index=-1}Object.defineProperties(UC.prototype,{distance:{get:function(){return this._distance},set:function(e){C.typeOf.number("value",e),c(this.onChangeCallback)&&e!==this._distance&&this.onChangeCallback(this.index),this._distance=e}},normal:{get:function(){return this._normal},set:function(e){C.typeOf.object("value",e),c(this.onChangeCallback)&&!m.equals(this._normal._cartesian3,e)&&this.onChangeCallback(this.index),m.clone(e,this._normal._cartesian3)}}});UC.fromPlane=function(e,t){return C.typeOf.object("plane",e),c(t)?(t.normal=e.normal,t.distance=e.distance):t=new UC(e.normal,e.distance),t};UC.clone=function(e,t){return c(t)?(t.normal=e.normal,t.distance=e.distance,t):new UC(e.normal,e.distance)};function wre(e,t){this._clippingPlane=t,this._cartesian3=m.clone(e)}Object.defineProperties(wre.prototype,{x:{get:function(){return this._cartesian3.x},set:function(e){C.typeOf.number("value",e),c(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){C.typeOf.number("value",e),c(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){C.typeOf.number("value",e),c(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.z&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.z=e}}});var x_=UC;function hc(e){e=e??z.EMPTY_OBJECT,this._planes=[],this._dirtyIndex=-1,this._multipleDirtyPlanes=!1,this._enabled=e.enabled??!0,this.modelMatrix=M.clone(e.modelMatrix??M.IDENTITY),this.edgeColor=Y.clone(e.edgeColor??Y.WHITE),this.edgeWidth=e.edgeWidth??0,this.planeAdded=new ye,this.planeRemoved=new ye,this._owner=void 0;let t=e.unionClippingRegions??!1;this._unionClippingRegions=t,this._testIntersection=t?Mre:Nre,this._uint8View=void 0,this._float32View=void 0,this._clippingPlanesTexture=void 0;let n=e.planes;if(c(n)){let i=n.length;for(let o=0;o0&&(r=zt.OUTSIDE);for(let s=0;s80*n){a=1/0,l=1/0;let u=-1/0,f=-1/0;for(let p=n;pu&&(u=y),h>f&&(f=h)}d=Math.max(u-a,f-l),d=d!==0?32767/d:0}return pI(r,s,n,a,l,d,0),s}function Dre(e,t,n,i,o){let r;if(o===p5e(e,t,n,i)>0)for(let s=t;s=t;s-=i)r=Ore(s/i|0,e[s],e[s+1],r);return r&&OC(r,r.next)&&(yI(r),r=r.next),r}function __(e,t){if(!e)return e;t||(t=e);let n=e,i;do if(i=!1,!n.steiner&&(OC(n,n.next)||Nr(n.prev,n,n.next)===0)){if(yI(n),n=t=n.prev,n===n.next)break;i=!0}else n=n.next;while(i||n!==t);return t}function pI(e,t,n,i,o,r,s){if(!e)return;!s&&r&&l5e(e,i,o,r);let a=e;for(;e.prev!==e.next;){let l=e.prev,d=e.next;if(r?t5e(e,i,o,r):e5e(e)){t.push(l.i,e.i,d.i),yI(e),e=d.next,a=d.next;continue}if(e=d,e===a){s?s===1?(e=n5e(__(e),t),pI(e,t,n,i,o,r,2)):s===2&&i5e(e,t,n,i,o,r):pI(__(e),t,n,i,o,r,1);break}}}function e5e(e){let t=e.prev,n=e,i=e.next;if(Nr(t,n,i)>=0)return!1;let o=t.x,r=n.x,s=i.x,a=t.y,l=n.y,d=i.y,u=Math.min(o,r,s),f=Math.min(a,l,d),p=Math.max(o,r,s),y=Math.max(a,l,d),h=i.next;for(;h!==t;){if(h.x>=u&&h.x<=p&&h.y>=f&&h.y<=y&&hI(o,a,r,l,s,d,h.x,h.y)&&Nr(h.prev,h,h.next)>=0)return!1;h=h.next}return!0}function t5e(e,t,n,i){let o=e.prev,r=e,s=e.next;if(Nr(o,r,s)>=0)return!1;let a=o.x,l=r.x,d=s.x,u=o.y,f=r.y,p=s.y,y=Math.min(a,l,d),h=Math.min(u,f,p),g=Math.max(a,l,d),x=Math.max(u,f,p),S=qH(y,h,t,n,i),V=qH(g,x,t,n,i),Z=e.prevZ,R=e.nextZ;for(;Z&&Z.z>=S&&R&&R.z<=V;){if(Z.x>=y&&Z.x<=g&&Z.y>=h&&Z.y<=x&&Z!==o&&Z!==s&&hI(a,u,l,f,d,p,Z.x,Z.y)&&Nr(Z.prev,Z,Z.next)>=0||(Z=Z.prevZ,R.x>=y&&R.x<=g&&R.y>=h&&R.y<=x&&R!==o&&R!==s&&hI(a,u,l,f,d,p,R.x,R.y)&&Nr(R.prev,R,R.next)>=0))return!1;R=R.nextZ}for(;Z&&Z.z>=S;){if(Z.x>=y&&Z.x<=g&&Z.y>=h&&Z.y<=x&&Z!==o&&Z!==s&&hI(a,u,l,f,d,p,Z.x,Z.y)&&Nr(Z.prev,Z,Z.next)>=0)return!1;Z=Z.prevZ}for(;R&&R.z<=V;){if(R.x>=y&&R.x<=g&&R.y>=h&&R.y<=x&&R!==o&&R!==s&&hI(a,u,l,f,d,p,R.x,R.y)&&Nr(R.prev,R,R.next)>=0)return!1;R=R.nextZ}return!0}function n5e(e,t){let n=e;do{let i=n.prev,o=n.next.next;!OC(i,o)&&Yre(i,n,n.next,o)&&bI(i,o)&&bI(o,i)&&(t.push(i.i,n.i,o.i),yI(n),yI(n.next),n=e=o),n=n.next}while(n!==e);return __(n)}function i5e(e,t,n,i,o,r){let s=e;do{let a=s.next.next;for(;a!==s.prev;){if(s.i!==a.i&&m5e(s,a)){let l=Hre(s,a);s=__(s,s.next),l=__(l,l.next),pI(s,t,n,i,o,r,0),pI(l,t,n,i,o,r,0);return}a=a.next}s=s.next}while(s!==e)}function o5e(e,t,n,i){let o=[];for(let r=0,s=t.length;r=n.next.y&&n.next.y!==n.y){let f=n.x+(o-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(f<=i&&f>r&&(r=f,s=n.x=n.x&&n.x>=l&&i!==n.x&&Bre(os.x||n.x===s.x&&c5e(s,n)))&&(s=n,u=f)}n=n.next}while(n!==a);return s}function c5e(e,t){return Nr(e.prev,e,t.prev)<0&&Nr(t.next,e,e.next)<0}function l5e(e,t,n,i){let o=e;do o.z===0&&(o.z=qH(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,d5e(o)}function d5e(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||l>0&&s;)a!==0&&(l===0||!s||i.z<=s.z)?(o=i,i=i.nextZ,a--):(o=s,s=s.nextZ,l--),r?r.nextZ=o:e=o,o.prevZ=r,r=o;i=s}r.nextZ=null,n*=2}while(t>1);return e}function qH(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 u5e(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 hI(e,t,n,i,o,r,s,a){return!(e===s&&t===a)&&Bre(e,t,n,i,o,r,s,a)}function m5e(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!f5e(e,t)&&(bI(e,t)&&bI(t,e)&&h5e(e,t)&&(Nr(e.prev,e,t.prev)||Nr(e,t.prev,t))||OC(e,t)&&Nr(e.prev,e,e.next)>0&&Nr(t.prev,t,t.next)>0)}function Nr(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function OC(e,t){return e.x===t.x&&e.y===t.y}function Yre(e,t,n,i){let o=H5(Nr(e,t,n)),r=H5(Nr(e,t,i)),s=H5(Nr(n,i,e)),a=H5(Nr(n,i,t));return!!(o!==r&&s!==a||o===0&&Y5(e,n,t)||r===0&&Y5(e,i,t)||s===0&&Y5(n,e,i)||a===0&&Y5(n,t,i))}function Y5(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 H5(e){return e>0?1:e<0?-1:0}function f5e(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&&Yre(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function bI(e,t){return Nr(e.prev,e,e.next)<0?Nr(e,t,e.next)>=0&&Nr(e,e.prev,t)>=0:Nr(e,t,e.prev)<0||Nr(e,e.next,t)<0}function h5e(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 Hre(e,t){let n=$H(e.i,e.x,e.y),i=$H(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 Ore(e,t,n,i){let o=$H(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 yI(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 $H(e,t,n){return{i:e,x:t,y:n,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function p5e(e,t,n,i){let o=0;for(let r=t,s=n-i;r0?qr.COUNTER_CLOCKWISE:qr.CLOCKWISE};gy.triangulate=function(e,t){C.defined("positions",e);let n=D.packArray(e);return ez(n,t,2)};var Qre=new m,jre=new m,qre=new m,zre=new m,Kre=new m,Jre=new m,ib=new m,$re=new D,ese=new D,tse=new D,DC=new D;gy.computeSubdivision=function(e,t,n,i,o){o=o??w.RADIANS_PER_DEGREE;let r=c(i);C.typeOf.object("ellipsoid",e),C.defined("positions",t),C.defined("indices",n),C.typeOf.number.greaterThanOrEquals("indices.length",n.length,3),C.typeOf.number.equals("indices.length % 3","0",n.length%3,0),C.typeOf.number.greaterThan("granularity",o,0);let s=n.slice(0),a,l=t.length,d=new Array(l*3),u=new Array(l*2),f=0,p=0;for(a=0;a0;){let Z=s.pop(),R=s.pop(),E=s.pop(),I=m.fromArray(d,E*3,Qre),v=m.fromArray(d,R*3,jre),P=m.fromArray(d,Z*3,qre),F,N,b;r&&(F=D.fromArray(u,E*2,$re),N=D.fromArray(u,R*2,ese),b=D.fromArray(u,Z*2,tse));let G=m.multiplyByScalar(m.normalize(I,zre),g,zre),X=m.multiplyByScalar(m.normalize(v,Kre),g,Kre),W=m.multiplyByScalar(m.normalize(P,Jre),g,Jre),A=m.magnitudeSquared(m.subtract(G,X,ib)),k=m.magnitudeSquared(m.subtract(X,W,ib)),B=m.magnitudeSquared(m.subtract(W,G,ib)),O=Math.max(A,k,B),H,U,K;O>S?A===O?(H=`${Math.min(E,R)} ${Math.max(E,R)}`,a=h[H],c(a)||(U=m.add(I,v,ib),m.multiplyByScalar(U,.5,U),d.push(U.x,U.y,U.z),a=d.length/3-1,h[H]=a,r&&(K=D.add(F,N,DC),D.multiplyByScalar(K,.5,K),u.push(K.x,K.y))),s.push(E,a,Z),s.push(a,R,Z)):k===O?(H=`${Math.min(R,Z)} ${Math.max(R,Z)}`,a=h[H],c(a)||(U=m.add(v,P,ib),m.multiplyByScalar(U,.5,U),d.push(U.x,U.y,U.z),a=d.length/3-1,h[H]=a,r&&(K=D.add(N,b,DC),D.multiplyByScalar(K,.5,K),u.push(K.x,K.y))),s.push(R,a,E),s.push(a,Z,E)):B===O&&(H=`${Math.min(Z,E)} ${Math.max(Z,E)}`,a=h[H],c(a)||(U=m.add(P,I,ib),m.multiplyByScalar(U,.5,U),d.push(U.x,U.y,U.z),a=d.length/3-1,h[H]=a,r&&(K=D.add(b,F,DC),D.multiplyByScalar(K,.5,K),u.push(K.x,K.y))),s.push(Z,a,R),s.push(a,E,R)):(y.push(E),y.push(R),y.push(Z))}let V={attributes:{position:new Ee({componentDatatype:q.DOUBLE,componentsPerAttribute:3,values:d})},indices:y,primitiveType:ve.TRIANGLES};return r&&(V.attributes.st=new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:2,values:u})),new dt(V)};var g5e=new pe,x5e=new pe,_5e=new pe,tz=new pe;gy.computeRhumbLineSubdivision=function(e,t,n,i,o){o=o??w.RADIANS_PER_DEGREE;let r=c(i);C.typeOf.object("ellipsoid",e),C.defined("positions",t),C.defined("indices",n),C.typeOf.number.greaterThanOrEquals("indices.length",n.length,3),C.typeOf.number.equals("indices.length % 3","0",n.length%3,0),C.typeOf.number.greaterThan("granularity",o,0);let s=n.slice(0),a,l=t.length,d=new Array(l*3),u=new Array(l*2),f=0,p=0;for(a=0;a0;){let E=s.pop(),I=s.pop(),v=s.pop(),P=m.fromArray(d,v*3,Qre),F=m.fromArray(d,I*3,jre),N=m.fromArray(d,E*3,qre),b,G,X;r&&(b=D.fromArray(u,v*2,$re),G=D.fromArray(u,I*2,ese),X=D.fromArray(u,E*2,tse));let W=e.cartesianToCartographic(P,g5e),A=e.cartesianToCartographic(F,x5e),k=e.cartesianToCartographic(N,_5e);S.setEndPoints(W,A);let B=S.surfaceDistance;V.setEndPoints(A,k);let O=V.surfaceDistance;Z.setEndPoints(k,W);let H=Z.surfaceDistance,U=Math.max(B,O,H),K,Q,ie,j,$;U>x?B===U?(K=`${Math.min(v,I)} ${Math.max(v,I)}`,a=h[K],c(a)||(Q=S.interpolateUsingFraction(.5,tz),ie=(W.height+A.height)*.5,j=m.fromRadians(Q.longitude,Q.latitude,ie,e,ib),d.push(j.x,j.y,j.z),a=d.length/3-1,h[K]=a,r&&($=D.add(b,G,DC),D.multiplyByScalar($,.5,$),u.push($.x,$.y))),s.push(v,a,E),s.push(a,I,E)):O===U?(K=`${Math.min(I,E)} ${Math.max(I,E)}`,a=h[K],c(a)||(Q=V.interpolateUsingFraction(.5,tz),ie=(A.height+k.height)*.5,j=m.fromRadians(Q.longitude,Q.latitude,ie,e,ib),d.push(j.x,j.y,j.z),a=d.length/3-1,h[K]=a,r&&($=D.add(G,X,DC),D.multiplyByScalar($,.5,$),u.push($.x,$.y))),s.push(I,a,v),s.push(a,E,v)):H===U&&(K=`${Math.min(E,v)} ${Math.max(E,v)}`,a=h[K],c(a)||(Q=Z.interpolateUsingFraction(.5,tz),ie=(k.height+W.height)*.5,j=m.fromRadians(Q.longitude,Q.latitude,ie,e,ib),d.push(j.x,j.y,j.z),a=d.length/3-1,h[K]=a,r&&($=D.add(X,b,DC),D.multiplyByScalar($,.5,$),u.push($.x,$.y))),s.push(E,a,I),s.push(a,v,I)):(y.push(v),y.push(I),y.push(E))}let R={attributes:{position:new Ee({componentDatatype:q.DOUBLE,componentsPerAttribute:3,values:d})},indices:y,primitiveType:ve.TRIANGLES};return r&&(R.attributes.st=new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:2,values:u})),new dt(R)};gy.scaleToGeodeticHeight=function(e,t,n,i){n=n??re.default;let o=b5e,r=y5e;if(t=t??0,i=i??!0,c(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};xy.prototype.peek=function(){if(this._length!==0)return this._array[this._offset]};xy.prototype.contains=function(e){return this._array.indexOf(e)!==-1};xy.prototype.clear=function(){this._array.length=this._offset=this._length=0};xy.prototype.sort=function(e){this._offset>0&&(this._array=this._array.slice(this._offset),this._offset=0),this._array.sort(e)};var _y=xy;var nr={};nr.computeHierarchyPackedLength=function(e,t){let n=0,i=[e];for(;i.length>0;){let o=i.pop();if(!c(o))continue;n+=2;let r=o.positions,s=o.holes;if(c(r)&&r.length>0&&(n+=r.length*t.packedLength),c(s)){let a=s.length;for(let l=0;l0;){let r=o.pop();if(!c(r))continue;let s=r.positions,a=r.holes;if(t[n++]=c(s)?s.length:0,t[n++]=c(a)?a.length:0,c(s)){let l=s.length;for(let d=0;d0?new Array(o):void 0;for(let a=0;aw.PI){let l=s;s=a,a=l}if(!(r.longitudea))return n.cartographicToCartesian(r)}function X5e(e,t,n,i){if(i===Kt.RHUMB)return E5e(e,t,n);let o=qn.lineSegmentPlane(e,t,cn.ORIGIN_XY_PLANE);if(c(o))return n.scaleToGeodeticSurface(o,o)}var I5e=new pe;function W5e(e,t,n){let i=[],o,r,s,a,l,d=0;for(;dt.cartesianToCartographic(f,I5e).longitude;if(s===0)i.push({position:d,type:s,visited:!1,next:a,theta:u(o)});else if(a!==0){if(l=X5e(o,r,t,n),++d,!c(l))continue;e.splice(d,0,l),i.push({position:d,type:s,visited:!1,next:a,theta:u(l)})}++d}return i}function rse(e,t,n,i,o,r,s){let a=[],l=r,d=f=>p=>p.position===f,u=[];do{let f=n[l];a.push(f);let p=i.findIndex(d(l)),y=i[p];if(!c(y)){++l;continue}let{visited:h,type:g,next:x}=y;if(y.visited=!0,g===0){if(x===0){let R=i[p-(s?1:-1)];if(R?.position===l+1)R.visited=!0;else{++l;continue}}if(!h&&s&&x>0||r===l&&!s&&x<0){++l;continue}}if(!(s?g>=0:g<=0)){++l;continue}h||u.push(l);let V=p+(s?1:-1),Z=i[V];if(!c(Z)){++l;continue}l=Z.position}while(l=0&&l!==r&&a.lengthd.theta-u.theta);let l=s[0].z>=0;o=rse(i,o,s,a,1,0,l)}return i};nr.polygonsFromHierarchy=function(e,t,n,i,o,r){let s=[],a=[],l=new _y;l.enqueue(e);let d=c(r);for(;l.length!==0;){let u=l.dequeue(),f=u.positions,p=u.holes,y,h;if(i)for(h=f.length,y=0;y1){for(let v of I)l.enqueue(new Fa(v,p));continue}}let V=f.slice(),Z=c(p)?p.length:0,R=[],E;for(y=0;yMath.PI&&(e-=w.TWO_PI),e}}});var BC=new pe,N5e=new m;kr.prototype.getLatitude=function(e){c(e)||(e=re.default),BC.latitude=this.conformalLatitude,BC.longitude=this.longitude,BC.height=0;let t=this.ellipsoid.cartographicToCartesian(BC,N5e);return e.cartesianToCartographic(t,BC),BC.latitude};var k5e=new bn,U5e=new m,O5e=new m;kr.fromCartesian=function(e,t){C.defined("cartesian",e);let n=w.signNotZero(e.z),i=kr.NORTH_POLE_TANGENT_PLANE,o=kr.SOUTH_POLE;n<0&&(i=kr.SOUTH_POLE_TANGENT_PLANE,o=kr.NORTH_POLE);let r=k5e;r.origin=i.ellipsoid.scaleToGeocentricSurface(e,r.origin),r.direction=m.subtract(r.origin,o,U5e),m.normalize(r.direction,r.direction);let s=qn.rayPlane(r,i.plane,O5e),a=m.subtract(s,o,s),l=m.dot(i.xAxis,a),d=n*m.dot(i.yAxis,a);return c(t)?(t.position=new D(l,d),t.tangentPlane=i,t):new kr(new D(l,d),i)};kr.fromCartesianArray=function(e,t){C.defined("cartesians",e);let n=e.length;c(t)?t.length=n:t=new Array(n);for(let i=0;i=0?s:s+w.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 l=e.getLatitude(n),d=l;if(r.south=Math.min(r.south,l),r.north=Math.max(r.north,l),i!==Kt.RHUMB){let p=D.subtract(t.position,e.position,ske),y=D.dot(t.position,p)/D.dot(p,p);if(y>0&&y<1){let h=D.add(t.position,D.multiplyByScalar(p,-y,p),ake),g=pc.clone(t,cke);g.position=h;let x=g.getLatitude(n);r.south=Math.min(r.south,x),r.north=Math.max(r.north,x),Math.abs(l)>Math.abs(x)&&(d=x)}}let u=t.x*e.y-e.x*t.y,f=Math.sign(u);f!==0&&(f*=D.angleBetween(t.position,e.position)),d>=0&&(o.northAngle+=f),d<=0&&(o.southAngle+=f)}var use=new pc,lke=new pc,Pu={northAngle:0,southAngle:0,westOverIdl:0,eastOverIdl:0};vu.computeRectangleFromPositions=function(e,t,n,i){if(C.defined("positions",e),c(i)||(i=new de),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,Pu.northAngle=0,Pu.southAngle=0,Pu.westOverIdl=Number.POSITIVE_INFINITY,Pu.eastOverIdl=Number.NEGATIVE_INFINITY;let o=e.length,r=pc.fromCartesian(e[0],lke);for(let s=1;sPu.eastOverIdl-Pu.westOverIdl&&(i.west=Pu.westOverIdl,i.east=Pu.eastOverIdl,i.east>w.PI&&(i.east=i.east-w.TWO_PI),i.west>w.PI&&(i.west=i.west-w.TWO_PI)),w.equalsEpsilon(Math.abs(Pu.northAngle),w.TWO_PI,w.EPSILON10)&&(i.north=w.PI_OVER_TWO,i.east=w.PI,i.west=-w.PI),w.equalsEpsilon(Math.abs(Pu.southAngle),w.TWO_PI,w.EPSILON10)&&(i.south=-w.PI_OVER_TWO,i.east=w.PI,i.west=-w.PI),i};var dke=new pc;function uke(e,t,n){return e.height>=w.PI||e.width>=w.PI?pc.fromCartesian(t[0],dke).tangentPlane:$r.fromPoints(t,n)}var mse=new pe;function mke(e,t,n){return(i,o)=>{if(e.height>=w.PI||e.width>=w.PI){if(e.south<0&&e.north>0){c(o)||(o=[]);for(let s=0;s=w.PI||e.width>=w.PI)return(o,r)=>{if(e.south<0&&e.north>0){let s=n.cartesianToCartographic(o,mse);return c(r)||(r=new D),r.x=s.longitude/w.PI,r.y=s.latitude/w.PI_OVER_TWO,r}return pc.fromCartesian(o,r)};let i=$r.fromPoints(t,n);return(o,r)=>i.projectPointsOntoPlane(o,r)}function hke(e,t,n,i){return(o,r)=>!i&&(e.height>=w.PI_OVER_TWO||e.width>=2*w.PI_OVER_THREE)?Dn.splitPolygonsOnEquator(o,t,n,r):o}function pke(e,t,n,i){if(t.height>=w.PI||t.width>=w.PI)return je.fromRectangle(t,void 0,ase);let o=e,r=$r.fromPoints(o,n);return Dn.computeBoundingRectangle(r.plane.normal,r.projectPointOntoPlane.bind(r),o,i,ase)}vu.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,l=e._closeBottom,d=e._arcType,u=e._textureCoordinates,f=c(u),p=r.positions;if(p.length<3)return;let y=e.rectangle,h=Dn.polygonsFromHierarchy(r,f,mke(y,p,n),!s,n,hke(y,n,d,s)),g=h.hierarchy,x=h.polygons,S=function(W){return W},V=f?Dn.polygonsFromHierarchy(u,!0,S,!1,n).polygons:void 0;if(g.length===0)return;let Z=g[0].outerRing,R=pke(Z,y,n,o),E=[],I=e._height,v=e._extrudedHeight,P=e._perPositionHeightExtrude||!w.equalsEpsilon(I,v,0,w.EPSILON2),F={perPositionHeight:s,vertexFormat:t,geometry:void 0,rotationAxis:uke(y,Z,n).plane.normal,projectTo2d:fke(y,Z,n),boundingRectangle:R,ellipsoid:n,stRotation:o,textureCoordinates:void 0,bottom:!1,top:!0,wall:!1,extrude:!1,arcType:d},N;if(P)for(F.extrude=!0,F.top=a,F.bottom=l,F.shadowVolume=e._shadowVolume,F.offsetAttribute=e._offsetAttribute,N=0;N 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; 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; 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); 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; } } vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5; out_FragColor = min(out_FragColor, result); } lastPolygonIndex += positionsLength; } } `;function ts(e){e=e??z.EMPTY_OBJECT,this._polygons=[],this._totalPositions=0,this.enabled=e.enabled??!0,this.inverse=e.inverse??!1,this.polygonAdded=new ye,this.polygonRemoved=new ye,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(c(t)){let n=t.length;for(let i=0;iHC.equals(t,e))};ts.prototype.remove=function(e){C.typeOf.object("polygon",e);let t=this._polygons,n=t.findIndex(i=>HC.equals(i,e));return n===-1?!1:(t.splice(n,1),this.polygonRemoved.raiseEvent(e,n),!0)};var gke=new de;function xke(e){let t=[],n=[],i=e.length;for(let r=0;rde.union(e[x].computeSphericalExtents(gke),g,g),a),t[p]=void 0,n[p]=void 0,l=Math.max(a.height*2.5,.001),d=Math.max(a.width*2.5,.001),u=de.clone(a,u),u.south-=l,u.west-=d,u.north+=l,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(f)}let o=new Map;return n.filter(c).forEach((r,s)=>r.forEach(a=>o.set(a,s))),{extentsList:t.filter(c),extentsIndexByPolygon:o}}ts.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;c(this._signedDistanceComputeCommand)&&(this._signedDistanceComputeCommand.canceled=!0,this._signedDistanceComputeCommand=void 0);let i=this._polygonsTexture,o=this._extentsTexture,r=this._signedDistanceTexture;if(c(i)){let s=i.width*i.height;(s{e._signedDistanceComputeCommand=void 0}})}var hse=new de,Ske=new de;ts.prototype.computeIntersectionWithBoundingVolume=function(e,t){let n=this._polygons,i=n.length,o=zt.OUTSIDE;this.inverse&&(o=zt.INSIDE);for(let r=0;r= PRIMARY_STEPS) { break; } vec3 samplePosition = primaryRay.origin + primaryRay.direction * (rayPositionLength + rayStepLength); float sampleHeight = length(samplePosition) - atmosphereInnerRadius; vec2 sampleDensity = exp(-sampleHeight / heightScale) * rayStepLength; opticalDepth += sampleDensity; 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); for (int j = 0; j < LIGHT_STEPS_MAX; ++j) { if (j >= LIGHT_STEPS) { break; } vec3 lightPosition = samplePosition + lightDirection * (lightPositionLength + lightStepLength * 0.5); float lightHeight = length(lightPosition) - atmosphereInnerRadius; lightOpticalDepth += exp(-lightHeight / heightScale) * lightStepLength; lightPositionLength += lightStepLength; } vec3 attenuation = exp(-((u_atmosphereMieCoefficient * (opticalDepth.y + lightOpticalDepth.y)) + (u_atmosphereRayleighCoefficient * (opticalDepth.x + lightOpticalDepth.x)))); rayleighAccumulation += sampleDensity.x * attenuation; mieAccumulation += sampleDensity.y * attenuation; rayPositionLength += (rayStepLength += rayStepLengthIncrease); } rayleighColor = u_atmosphereRayleighCoefficient * rayleighAccumulation; mieColor = u_atmosphereMieCoefficient * mieAccumulation; opacity = length(exp(-((u_atmosphereMieCoefficient * opticalDepth.y) + (u_atmosphereRayleighCoefficient * opticalDepth.x)))); } vec4 computeAtmosphereColor( vec3 positionWC, vec3 lightDirection, vec3 rayleighColor, vec3 mieColor, float opacity ) { 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; float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq); 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)); vec3 rayleigh = rayleighPhase * rayleighColor; vec3 mie = miePhase * mieColor; vec3 color = (rayleigh + mie) * u_atmosphereLightIntensity; return vec4(color, opacity); } `;var kTn=_(T(),1),_I=`uniform samplerCube u_radianceMap; in vec2 v_textureCoordinates; const float twoSqrtPi = 2.0 * sqrt(czm_pi); float computeShBasis(int index, vec3 s) { if (index == 0) { return 1.0 / twoSqrtPi; } if (index == 1) { return -sqrt(3.0) * s.y / twoSqrtPi; } if (index == 2) { return sqrt(3.0) * s.z / twoSqrtPi; } if (index == 3) { return -sqrt(3.0) * s.x / twoSqrtPi; } if (index == 4) { return sqrt(15.0) * s.y * s.x / twoSqrtPi; } if (index == 5) { return -sqrt(15.0) * s.y * s.z / twoSqrtPi; } if (index == 6) { return sqrt(5.0) * (3.0 * s.z * s.z - 1.0) / 2.0 / twoSqrtPi; } if (index == 7) { return -sqrt(15.0) * s.x * s.z / twoSqrtPi; } if (index == 8) { 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)); } const int samples = 256; const float solidAngle = 1.0 / float(samples); void main() { 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))); float Ylm = computeShBasis(coefficientIndex, direction); vec3 lookupDirection = -direction.xyz; lookupDirection.z = -lookupDirection.z; vec4 color = czm_textureCube(u_radianceMap, lookupDirection, 0.0); out_FragColor += Ylm * color * solidAngle * sinTheta; } } `;var OTn=_(T(),1),TI=`precision highp float; in vec2 v_textureCoordinates; uniform vec3 u_faceDirection; uniform vec3 u_positionWC; uniform mat4 u_enuToFixedFrame; uniform vec4 u_brightnessSaturationGammaIntensity; uniform vec4 u_groundColor; 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); 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); 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; lookupDirection.x = -lookupDirection.x; lookupDirection = -normalize(czm_temeToPseudoFixed * lookupDirection); lookupDirection.x = -lookupDirection.x; float skyAlpha = clamp((1.0 - ellipsoidHeight / atmosphereHeight) * atmopshereColor.a, 0.0, 1.0); skyAlpha = czm_branchFreeTernary(length(atmopshereColor.rgb) <= czm_epsilon7, 0.0, skyAlpha); 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); 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)); color.rgb = czm_gammaCorrect(color.rgb); out_FragColor = color; } `;var BTn=_(T(),1),SI=`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; } 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; 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 HTn=_(T(),1),CI=`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 $n(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??z.EMPTY_OBJECT;let t=Math.min(e.mipmapLevels??7,Math.log2(mt.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=$n.DEFAULT_SPHERICAL_HARMONIC_COEFFICIENTS.slice(),this._lastTime=new ee;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??60*60,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??$n.AVERAGE_EARTH_GROUND_COLOR,this.groundAlbedo=e.groundAlbedo??.31}Object.defineProperties($n.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}}});$n._maximumComputeCommandCount=8;$n._activeComputeCommandCount=0;$n._nextFrameCommandQueue=[];$n._queueCommand=(e,t)=>{if($n._activeComputeCommandCount>=$n._maximumComputeCommandCount){$n._nextFrameCommandQueue.push(e);return}t.commandList.push(e),$n._activeComputeCommandCount++};$n._updateCommandQueue=e=>{if($n._maximumComputeCommandCount=Math.log2(mt.maximumCubeMapSize),$n._nextFrameCommandQueue.length>0&&$n._activeComputeCommandCount<$n._maximumComputeCommandCount){let t=$n._nextFrameCommandQueue.shift();for(;c(t)&&$n._activeComputeCommandCount<$n._maximumComputeCommandCount;){if(t.owner.isDestroyed()||t.canceled){t=$n._nextFrameCommandQueue.shift();continue}e.commandList.push(t),$n._activeComputeCommandCount++,t=$n._nextFrameCommandQueue.shift()}c(t)&&$n._nextFrameCommandQueue.push(t)}};$n.setOwner=function(e,t,n){if(e!==t[n]&&(t[n]=t[n]&&t[n].destroy(),c(e))){if(c(e._owner))throw new L("DynamicEnvironmentMapManager should only be assigned to one object");e._owner=t,t[n]=e}};$n.prototype.reset=function(){let e=this._radianceMapComputeCommands.length;for(let t=0;ts,u_enuToFixedFrame:()=>l,u_faceDirection:()=>Uo.getDirection(f,bse),u_positionWC:()=>r,u_brightnessSaturationGammaIntensity:()=>d,u_groundColor:()=>e.groundColor.withAlpha(e.groundAlbedo,Gke)},owner:e});h.postExecute=()=>{if(e.isDestroyed()||h.canceled){$n._activeComputeCommandCount--;return}let g=e._radianceMapComputeCommands;g[y]=void 0;let x=new Fr({context:n,colorTextures:[e._radianceMapTextures[y]]});x._bind(),e._radianceCubeMap[f].copyFromFramebuffer(),x._unBind(),x.destroy(),$n._activeComputeCommandCount--,g.some(c)||(e._convolutionsCommandsDirty=!0,e._shouldRegenerateShaders=!0)},e._radianceMapComputeCommands[u]=h,$n._queueCommand(h,t),u++}e._radianceCommandsDirty=!1}}function Xke(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,l=0,d=(f,p,y,h,g)=>()=>{if(e.isDestroyed()||f.canceled){$n._activeComputeCommandCount--;return}let x=e._convolutionComputeCommands;x[p]=void 0,n.copyFace(t,y,h,g),l++,$n._activeComputeCommandCount--,y.destroy(),e._specularMapTextures[p]=void 0;let S=e._specularMapTextures.length;l>=S&&(e._irradianceCommandDirty=!0,n.sampler=new en({minificationFilter:Jt.LINEAR_MIPMAP_LINEAR}),e._shouldRegenerateShaders=!0,e._va.destroy(),e._va=void 0,e._convolveSP.destroy(),e._convolveSP=void 0)},u=0;for(let f=1;ff/(i-1),u_radianceTexture:()=>n??a.defaultTexture,u_faceDirection:()=>Uo.getDirection(p,bse)}});x.postExecute=d(x,u,y,p,f),e._convolutionComputeCommands[u]=x,$n._queueCommand(x,t),++u}r/=2,s/=2}}var yse=new D(3,3);function Ike(e,t){let n=t.context,i=yse,o=e._irradianceMapTexture;c(o)&&!o.isDestroyed()&&o.destroy(),o=new Pt({context:n,width:i.x,height:i.y,pixelDatatype:Ue.FLOAT,pixelFormat:ke.RGBA}),e._irradianceMapTexture=o;let r=e._irradianceMapFS;c(r)||(r=new Be({sources:[_I]}),e._irradianceMapFS=r);let s=new vc({fragmentShaderSource:r,outputTexture:o,owner:e,uniformMap:{u_radianceMap:()=>e._radianceCubeMap??n.defaultTexture}});s.postExecute=()=>{if(e.isDestroyed()||s.canceled){$n._activeComputeCommandCount--;return}e._irradianceTextureDirty=!1,e._irradianceComputeCommand=void 0,e._sphericalHarmonicCoefficientsDirty=!0,e._irradianceMapFS=void 0,$n._activeComputeCommandCount--},e._irradianceComputeCommand=s,$n._queueCommand(s,t),e._irradianceTextureDirty=!0}function Wke(e,t){let n=t.context;if(!c(e._irradianceMapTexture))return;let i=new Fr({context:n,colorTextures:[e._irradianceMapTexture],destroyAttachments:!1}),o=yse,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}$n.prototype.update=function(e){let t=e.mode;if(!$n.isDynamicUpdateSupported(e)||!this.enabled||!this.shouldUpdate||!c(this._position)||t===se.MORPHING){this._shouldRegenerateShaders=!1;return}$n._updateCommandQueue(e);let i=e.atmosphere.dynamicLighting,o=Lke(this,e)||i===rb.SUNLIGHT&&!ee.equalsEpsilon(e.time,this._lastTime,this.maximumSecondsDifference);if(this._shouldReset||o){this.reset(),this._shouldReset=!1,this._lastTime=ee.clone(e.time,this._lastTime);return}if(this._radianceMapDirty&&(Eke(this,e),this._radianceMapDirty=!1),this._convolutionsCommandsDirty&&(Xke(this,e),this._convolutionsCommandsDirty=!1),this._irradianceCommandDirty&&(Ike(this,e),this._irradianceCommandDirty=!1),this._irradianceTextureDirty){this._shouldRegenerateShaders=!1;return}if(this._sphericalHarmonicCoefficientsDirty){Wke(this,e),this._sphericalHarmonicCoefficientsDirty=!1;return}this._shouldRegenerateShaders=!1};$n.prototype.isDestroyed=function(){return!1};$n.prototype.destroy=function(){let e=this._radianceMapComputeCommands.length;for(let t=0;t=this._count)throw new L(`index must be in the range [0, ${this._count})`);let n=this._properties[t];if(c(n))return He(n[e],!0)};LI.prototype.setProperty=function(e,t,n){if(C.typeOf.number("index",e),C.typeOf.string("propertyId",t),e<0||e>=this._count)throw new L(`index must be in the range [0, ${this._count})`);let i=this._properties[t];c(i)||(i=new Array(this._count),this._properties[t]=i),i[e]=He(n,!0)};var ab=LI;function gc(e){e=e??z.EMPTY_OBJECT,C.typeOf.number("options.count",e.count),this._name=e.name,this._id=e.id,this._count=e.count,this._extras=e.extras,this._extensions=e.extensions,this._metadataTable=e.metadataTable,this._jsonMetadataTable=e.jsonMetadataTable,this._batchTableHierarchy=e.batchTableHierarchy}Object.defineProperties(gc.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},count:{get:function(){return this._count}},class:{get:function(){if(c(this._metadataTable))return this._metadataTable.class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}},byteLength:{get:function(){let e=0;return c(this._metadataTable)&&(e+=this._metadataTable.byteLength),c(this._batchTableHierarchy)&&(e+=this._batchTableHierarchy.byteLength),e}}});gc.prototype.hasProperty=function(e,t){return C.typeOf.number("index",e),C.typeOf.string("propertyId",t),!!(c(this._metadataTable)&&this._metadataTable.hasProperty(t)||c(this._batchTableHierarchy)&&this._batchTableHierarchy.hasProperty(e,t)||c(this._jsonMetadataTable)&&this._jsonMetadataTable.hasProperty(t))};gc.prototype.hasPropertyBySemantic=function(e,t){return C.typeOf.number("index",e),C.typeOf.string("semantic",t),c(this._metadataTable)?this._metadataTable.hasPropertyBySemantic(t):!1};gc.prototype.propertyExists=function(e){return C.typeOf.string("propertyId",e),!!(c(this._metadataTable)&&this._metadataTable.hasProperty(e)||c(this._batchTableHierarchy)&&this._batchTableHierarchy.propertyExists(e)||c(this._jsonMetadataTable)&&this._jsonMetadataTable.hasProperty(e))};gc.prototype.propertyExistsBySemantic=function(e){return C.typeOf.string("semantic",e),c(this._metadataTable)?this._metadataTable.hasPropertyBySemantic(e):!1};var oz=[];gc.prototype.getPropertyIds=function(e,t){return t=c(t)?t:[],t.length=0,c(this._metadataTable)&&t.push.apply(t,this._metadataTable.getPropertyIds(oz)),c(this._batchTableHierarchy)&&t.push.apply(t,this._batchTableHierarchy.getPropertyIds(e,oz)),c(this._jsonMetadataTable)&&t.push.apply(t,this._jsonMetadataTable.getPropertyIds(oz)),t};gc.prototype.getProperty=function(e,t){let n;if(c(this._metadataTable)&&(n=this._metadataTable.getProperty(e,t),c(n))||c(this._batchTableHierarchy)&&(n=this._batchTableHierarchy.getProperty(e,t),c(n))||c(this._jsonMetadataTable)&&(n=this._jsonMetadataTable.getProperty(e,t),c(n)))return n};gc.prototype.setProperty=function(e,t,n){c(this._metadataTable)&&this._metadataTable.setProperty(e,t,n)||c(this._batchTableHierarchy)&&this._batchTableHierarchy.setProperty(e,t,n)||(c(this._jsonMetadataTable)||(this._jsonMetadataTable=new ab({count:this._count,properties:{}})),this._jsonMetadataTable.setProperty(e,t,n))};gc.prototype.getPropertyBySemantic=function(e,t){if(c(this._metadataTable))return this._metadataTable.getPropertyBySemantic(e,t)};gc.prototype.setPropertyBySemantic=function(e,t,n){return c(this._metadataTable)?this._metadataTable.setPropertyBySemantic(e,t,n):!1};gc.prototype.getPropertyTypedArray=function(e){if(C.typeOf.string("propertyId",e),c(this._metadataTable))return this._metadataTable.getPropertyTypedArray(e)};gc.prototype.getPropertyTypedArrayBySemantic=function(e){if(C.typeOf.string("semantic",e),c(this._metadataTable))return this._metadataTable.getPropertyTypedArrayBySemantic(e)};function rz(e,t){if(!c(e)||e<0||e>=t)throw new L(`featureId is required and must be between zero and featuresLength - 1 (${t}`-+").")}gc.prototype.isClass=function(e,t){rz(e,this.count),C.typeOf.string("className",t);let n=this._batchTableHierarchy;return c(n)?n.isClass(e,t):!1};gc.prototype.isExactClass=function(e,t){return rz(e,this.count),C.typeOf.string("className",t),this.getExactClassName(e)===t};gc.prototype.getExactClassName=function(e){rz(e,this.count);let t=this._batchTableHierarchy;if(c(t))return t.getClassName(e)};var qc=gc;var sCn=_(T(),1);var eCn=_(T(),1);function ZI(e){e=e??z.EMPTY_OBJECT;let t=e.property,n=e.classProperty,i=e.textures;C.typeOf.object("options.property",t),C.typeOf.object("options.classProperty",n),C.typeOf.object("options.textures",i);let o=c(t.channels)?t.channels:[0],r=t,s=vl.createModelTextureReader({textureInfo:r,channels:Ake(o),texture:i[r.index]});this._min=t.min,this._max=t.max;let a=t.offset,l=t.scale,d=n.hasValueTransform||c(a)||c(l);a=a??n.offset,l=l??n.scale,a=n.unpackVectorAndMatrixTypes(a),l=n.unpackVectorAndMatrixTypes(l),this._offset=a,this._scale=l,this._hasValueTransform=d,this._textureReader=s,this._classProperty=n,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(ZI.prototype,{textureReader:{get:function(){return this._textureReader}},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}}});ZI.prototype.isGpuCompatible=function(){let e=this._classProperty,t=e.type,n=e.componentType;return e.isArray?e.isVariableLengthArray?(ht(`Property texture property ${e.id} is a variable-length array, which is not supported`),!1):e.arrayLength>4?(ht(`Property texture property ${e.id} is an array of length ${e.arrayLength}, but may have at most a length of 4`),!1):t!==lt.SCALAR?(ht(`Property texture property ${e.id} is an array of type ${t}, but only SCALAR is supported`),!1):n!==At.UINT8?(ht(`Property texture property ${e.id} is an array with component type ${n}, but only UINT8 is supported`),!1):!0:lt.isVectorType(t)||t===lt.SCALAR?n!==At.UINT8?(ht(`Property texture property ${e.id} has component type ${n}, but only UINT8 is supported`),!1):!0:(ht(`Property texture property ${e.id} has an unsupported type`),!1)};var vke=[void 0,"float","vec2","vec3","vec4"],Fke=[void 0,"int","ivec2","ivec3","ivec4"];ZI.prototype.getGlslType=function(){let e=this._classProperty,t=lt.getComponentCount(e.type);return e.isArray&&(t=e.arrayLength),e.normalized?vke[t]:Fke[t]};ZI.prototype.unpackInShader=function(e){return this._classProperty.normalized?e:`${this.getGlslType()}(255.0 * ${e})`};function Ake(e){return e.map(function(t){return"rgba".charAt(t)}).join("")}var RI=ZI;function sz(e){e=e??z.EMPTY_OBJECT;let t=e.propertyTexture,n=e.class,i=e.textures;C.typeOf.object("options.propertyTexture",t),C.typeOf.object("options.class",n),C.typeOf.object("options.textures",i);let o=t.extensions,r=t.extras,s={};if(c(t.properties))for(let a in t.properties)t.properties.hasOwnProperty(a)&&(s[a]=new RI({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(sz.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}}});sz.prototype.getProperty=function(e){return C.typeOf.string("propertyId",e),this._properties[e]};var cb=sz;var yCn=_(T(),1);var uCn=_(T(),1);function xse(e){e=e??z.EMPTY_OBJECT;let t=e.property,n=e.classProperty;C.typeOf.object("options.property",t),C.typeOf.object("options.classProperty",n),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||c(i)||c(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(xse.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 GI=xse;function az(e){e=e??z.EMPTY_OBJECT;let t=e.propertyAttribute,n=e.class;C.typeOf.object("options.propertyAttribute",t),C.typeOf.object("options.class",n);let i={};if(c(t.properties))for(let o in t.properties)t.properties.hasOwnProperty(o)&&(i[o]=new GI({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(az.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}}});az.prototype.getProperty=function(e){return C.typeOf.string("propertyId",e),this._properties[e]};var V_=az;var SCn=_(T(),1);function EI(e){e=e??z.EMPTY_OBJECT,C.typeOf.object("options.schema",e.schema),this._schema=e.schema;let t=e.propertyTables;this._propertyTableCount=c(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(EI.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(!c(this._propertyTables))return 0;let e=0,t=this._propertyTables.length;for(let n=0;n=r;)S=o[S-r];o.push(S),s[g]=x}x>tUe&&(t instanceof Uint16Array||t instanceof Uint8Array)?t=new Uint32Array(t):x>nUe&&t instanceof Uint8Array&&(t=new Uint16Array(t)),g===l?(l=x,t[a]=x):g===d?(d=x,t[a+1]=x):(u=x,t[a+2]=x),g=Tse(i,l,d,u,p,y,h)}}e._triangleIndices=t,e._outlineCoordinatesTypedArray=new Float32Array(i)}function Tse(e,t,n,i,o,r,s){let a=s?1:0,l=o?1:0,d=0,u=cz(e,t,a,l,d);if(u===0)return t;let f=0,p=o?1:0,y=r?1:0,h=cz(e,n,f,p,y);if(h===0)return n;let g=s?1:0,x=0,S=r?1:0,V=cz(e,i,g,x,S);if(V===0)return i;let Z=u&h&V,R,E,I;if(Z&1)R=0,E=1,I=2;else if(Z&2)R=0,I=1,E=2;else if(Z&4)E=0,R=1,I=2;else if(Z&8)E=0,I=1,R=2;else if(Z&16)I=0,R=1,E=2;else if(Z&32)I=0,E=1,R=2;else{let N=lz(u),b=lz(h),G=lz(V);return N>1&1)+(e>>2&1)+(e>>3&1)+(e>>4&1)+(e>>5&1)}j5.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(Sse(i));let s=new Pt({context:e,source:{arrayBufferView:o,mipLevels:r},width:n,height:1,pixelFormat:ke.LUMINANCE,sampler:new en({wrapS:xn.CLAMP_TO_EDGE,wrapT:xn.CLAMP_TO_EDGE,minificationFilter:Jt.LINEAR_MIPMAP_LINEAR,magnificationFilter:di.LINEAR})});return t.outlineTexture=s,s};function Sse(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 Cse(e,t){this._originalVertexCount=t,this._edges=new Set;for(let n=0;n{this._resourcesLoaded=!0}).catch(o=>{this._processError=o})),c(this._processError)){this._state=vo.FAILED;let o=this._processError;this._processError=void 0,$5(this,o)}let t=this._textureErrors.pop();if(c(t)){let o=this.getError("Failed to load glTF texture",t);throw o.name="TextureError",o}if(this._state===vo.FAILED)return!1;let n=!1;try{n=this._process(e)}catch(o){this._state=vo.FAILED,$5(this,o)}let i=!1;try{i=this._processTextures(e)}catch(o){this._textureState=vo.FAILED,$5(this,o)}return this._incrementallyLoadTextures?n:n&&i};function OUe(e,t,n,i,o,r,s,a){let l=e.gltfJson,u=l.accessors[t].bufferView;return Ri.getVertexBufferLoader({gltf:l,gltfResource:e._gltfResource,baseResource:e._baseResource,frameState:a,bufferViewId:u,primitive:i,draco:o,attributeSemantic:n,accessorId:t,asynchronous:e._asynchronous,loadBuffer:r,loadTypedArray:s})}function DUe(e,t,n,i,o,r,s){return Ri.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 BUe(e,t){let n=Ri.getBufferViewLoader({gltf:e.gltfJson,bufferViewId:t,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoaders.push(n),n}function Ase(e,t,n){let i=t.byteOffset,o=Pl(e,t),r=t.count,s=Sd(t.type),a=t.componentType,l=q.getSizeInBytes(a),d=l*s,u=r*s;if(o===d)return n=new Uint8Array(n),q.createArrayBufferView(a,n.buffer,n.byteOffset+i,u);let f=q.createTypedArray(a,u),p=new DataView(n.buffer),y=new Array(s),h=nb(t.componentType);i=n.byteOffset+i;for(let g=0;g{c(o)&&c(o.attributes)&&c(o.attributes[f])?nOe(x,S,r,s):iOe(l,d,x,S,r,s)},x}function kse(e,t,n,i,o,r,s,a){let l=n.modelSemantic,d=l===pt.POSITION,u=l===pt.FEATURE_ID,f=d&&!r&&e._loadAttributesFor2D&&!a.scene3DOnly,p=d&&e._enablePick&&!a.context.webgl2,y=e._loadForClassification&&u,h=e._loadAttributesAsTypedArray,g=!h,x=h||f||p||y,Z=Nse(e,t,n,i,o,s?!1:g,s?!0:x,a),R=new Z_.AttributeLoadPlan(Z);return R.loadBuffer=g,R.loadTypedArray=x,R}function oOe(e,t,n,i,o){let r=e.gltfJson.accessors,s=c(n.ROTATION),a=c(n.TRANSLATION)&&c(r[n.TRANSLATION].min)&&c(r[n.TRANSLATION].max),l=mz(e,ns,i),d=l.modelSemantic,u=d===ns.TRANSLATION||d===ns.ROTATION||d===ns.SCALE,f=d===ns.TRANSLATION,p=e._loadAttributesAsTypedArray||s&&u||!o.context.instancedArrays,y=e._enablePick&&!o.context.webgl2,h=!p,g=e._loadAttributesFor2D&&!o.scene3DOnly;return Nse(e,t,l,void 0,void 0,h,p||f&&(!a||g||y),o)}function rOe(e,t,n,i,o,r,s){let a=e.gltfJson.accessors[t],l=a.bufferView;if(!c(i)&&!c(l))return;let d=new yUe;d.count=a.count;let u=e._loadAttributesAsTypedArray,f=(e._loadIndicesForWireframe||e._enablePick)&&!s.context.webgl2,p=e._loadForClassification&&o,h=!u,g=u||f||p,V=DUe(e,t,n,i,r?!1:h,r?!0:g,s),Z=e._geometryLoaders.length;e._geometryLoaders.push(V);let R=V.load();e._loaderPromises.push(R),e._geometryCallbacks[Z]=()=>{d.indexDatatype=V.indexDatatype,d.buffer=V.buffer,d.typedArray=V.typedArray};let E=new Z_.IndicesLoadPlan(d);return E.loadBuffer=h,E.loadTypedArray=g,E}function $c(e,t,n,i){let o=e.gltfJson,r=vl.getImageIdFromTexture({gltf:o,textureId:t.index,supportedImageFormats:e._supportedImageFormats});if(!c(r))return;let s=Ri.getTextureLoader({gltf:o,textureInfo:t,gltfResource:e._gltfResource,baseResource:e._baseResource,supportedImageFormats:e._supportedImageFormats,frameState:n,asynchronous:e._asynchronous}),a=vl.createModelTextureReader({textureInfo:t}),l=e._textureLoaders.length;e._textureLoaders.push(s);let d=s.load().catch(u=>{if(!e.isDestroyed()){if(!e._incrementallyLoadTextures)throw u;e._textureState=vo.FAILED,e._textureErrors.push(u)}});return e._texturesPromises.push(d),e._textureCallbacks[l]=()=>{a.texture=s.texture,c(i)&&(a.texture.sampler=i)},a}function sOe(e,t,n){let{diffuseTexture:i,specularGlossinessTexture:o,diffuseFactor:r,specularFactor:s,glossinessFactor:a}=t,l=new PUe;return c(i)&&(l.diffuseTexture=$c(e,i,n)),c(o)&&(l.specularGlossinessTexture=$c(e,o,n)),l.diffuseFactor=Vd(ce,r),l.specularFactor=Vd(m,s),l.glossinessFactor=a,l}function aOe(e,t,n){let{baseColorTexture:i,metallicRoughnessTexture:o,baseColorFactor:r,metallicFactor:s,roughnessFactor:a}=t,l=new wUe;return c(i)&&(l.baseColorTexture=$c(e,i,n)),c(o)&&(l.metallicRoughnessTexture=$c(e,o,n)),l.baseColorFactor=Vd(ce,r),l.metallicFactor=s,l.roughnessFactor=a,l}function cOe(e,t,n){let{specularFactor:i,specularTexture:o,specularColorFactor:r,specularColorTexture:s}=t,a=new vUe;return c(o)&&(a.specularTexture=$c(e,o,n)),c(s)&&(a.specularColorTexture=$c(e,s,n)),a.specularFactor=i,a.specularColorFactor=Vd(m,r),a}function lOe(e,t,n){let{anisotropyStrength:i=dz.DEFAULT_ANISOTROPY_STRENGTH,anisotropyRotation:o=dz.DEFAULT_ANISOTROPY_ROTATION,anisotropyTexture:r}=t,s=new dz;return c(r)&&(s.anisotropyTexture=$c(e,r,n)),s.anisotropyStrength=i,s.anisotropyRotation=o,s}function dOe(e,t,n){let{clearcoatFactor:i=uz.DEFAULT_CLEARCOAT_FACTOR,clearcoatTexture:o,clearcoatRoughnessFactor:r=uz.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR,clearcoatRoughnessTexture:s,clearcoatNormalTexture:a}=t,l=new uz;return c(o)&&(l.clearcoatTexture=$c(e,o,n)),c(s)&&(l.clearcoatRoughnessTexture=$c(e,s,n)),c(a)&&(l.clearcoatNormalTexture=$c(e,a,n)),l.clearcoatFactor=i,l.clearcoatRoughnessFactor=r,l}function uOe(e,t,n){let i=new FUe,o=t.extensions??z.EMPTY_OBJECT,r=o.KHR_materials_pbrSpecularGlossiness,s=o.KHR_materials_specular,a=o.KHR_materials_anisotropy,l=o.KHR_materials_clearcoat,d=t.pbrMetallicRoughness;return i.unlit=c(o.KHR_materials_unlit),c(r)?i.specularGlossiness=sOe(e,r,n):(c(d)&&(i.metallicRoughness=aOe(e,d,n)),c(s)&&!i.unlit&&(i.specular=cOe(e,s,n)),c(a)&&!i.unlit&&(i.anisotropy=lOe(e,a,n)),c(l)&&!i.unlit&&(i.clearcoat=dOe(e,l,n))),c(t.emissiveTexture)&&(i.emissiveTexture=$c(e,t.emissiveTexture,n)),c(t.normalTexture)&&!e._loadForClassification&&(i.normalTexture=$c(e,t.normalTexture,n)),c(t.occlusionTexture)&&(i.occlusionTexture=$c(e,t.occlusionTexture,n)),i.emissiveFactor=Vd(m,t.emissiveFactor),i.alphaMode=t.alphaMode,i.alphaCutoff=t.alphaCutoff,i.doubleSided=t.doubleSided,i}function Use(e,t){let n=new Pse;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 Ose(e,t,n,i){let o=new Pse,r=e.featureIds;return o.featureCount=n,o.propertyTableId=t,o.setIndex=Mse(r.attribute),o.positionalLabel=i,o}function Dse(e,t){let n=new Fse;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 Bse(e,t,n,i){let o=new Fse,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 mOe(e,t,n,i){let o=new vse;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=$c(e,r,n,en.NEAREST);let a=(c(r.channels)?r.channels:[0]).map(function(l){return"rgba".charAt(l)}).join("");return o.textureReader.channels=a,o}function fOe(e,t,n,i,o,r){let s=new vse,a=t.featureIds,l=a.texture;return s.featureCount=o,s.propertyTableId=n,s.textureReader=$c(e,l,i,en.NEAREST),s.textureReader.channels=a.channels,s.positionalLabel=r,s}function hOe(e,t,n,i,o){let r=new gUe,s=void 0,a=void 0,l=!1;for(let d in t){if(!t.hasOwnProperty(d))continue;let u=t[d],f=mz(e,pt,d),p=kse(e,u,f,s,a,l,n,o);r.attributes.push(p.attribute),i.attributePlans.push(p)}return r}function pOe(e,t,n,i){let o=new xUe,r=new Z_(o);e._primitiveLoadPlans.push(r);let s=t.material;c(s)&&(o.material=uOe(e,e.gltfJson.materials[s],i));let a=t.extensions??z.EMPTY_OBJECT,l=!1,d=a.CESIUM_primitive_outline;e._loadPrimitiveOutline&&c(d)&&(l=!0,r.needsOutlines=!0,r.outlineIndices=bOe(e,d,r));let u=e._loadForClassification,f=a.KHR_draco_mesh_compression,p=!1,y=t.attributes;if(c(y))for(let E in y){if(!y.hasOwnProperty(E))continue;let I=y[E],v=mz(e,pt,E),P=v.modelSemantic;if(u&&!tOe(P))continue;P===pt.FEATURE_ID&&(p=!0);let F=kse(e,I,v,t,f,n,l,i);r.attributePlans.push(F),o.attributes.push(F.attribute)}let h=t.targets;if(c(h)&&!u)for(let E=0;En[s]);let r=t.inverseBindMatrices;if(c(r)){let s=e.gltfJson.accessors[r];i.inverseBindMatrices=ek(e,s)}else i.inverseBindMatrices=new Array(o.length).fill(M.IDENTITY);return i}function ROe(e,t){let n=e.gltfJson.skins;if(e._loadForClassification||!c(n))return[];let i=n.map(function(r,s){let a=ZOe(e,r,t);return a.index=s,a}),o=e.gltfJson.nodes;for(let r=0;r=s.clientWidth)d=!0;else{if(Z.x>s.clientWidth*.5){a.width=Z.x,l.frustum.right=p.x-S,xc=BI(r,n,l,xc),Ma.clipToGLWindowCoordinates(a,xc,hz),a.x+=Z.x,l.position.x=-l.position.x;let R=l.frustum.right;l.frustum.right=-l.frustum.left,l.frustum.left=-R,xc=BI(r,n,l,xc),Ma.clipToGLWindowCoordinates(a,xc,pz)}else{a.x+=Z.x,a.width-=Z.x,l.frustum.left=-p.x-S,xc=BI(r,n,l,xc),Ma.clipToGLWindowCoordinates(a,xc,hz),a.x=a.x-a.width,l.position.x=-l.position.x;let R=l.frustum.left;l.frustum.left=-l.frustum.right,l.frustum.right=-R,xc=BI(r,n,l,xc),Ma.clipToGLWindowCoordinates(a,xc,pz)}m.clone(y,l.position),l.frustum=h.clone(),i=D.clone(hz,i),(i.x<0||i.x>s.clientWidth)&&(i.x=pz.x)}}if(o.mode!==se.SCENE2D||d){if(xc=BI(r,n,l,xc),xc.z<0&&!(l.frustum instanceof sn)&&!(l.frustum instanceof Oo))return;i=Ma.clipToGLWindowCoordinates(a,xc,i)}return i.y=s.clientHeight-i.y,i};Ma.worldToDrawingBufferCoordinates=function(e,t,n){if(n=Ma.worldToWindowCoordinates(e,t,n),!!c(n))return Ma.transformWindowToDrawingBuffer(e,n,n)};var db=new m,nDe=new pe;Ma.computeActualEllipsoidPosition=function(e,t,n){let i=e.mode;if(i===se.SCENE3D)return m.clone(t,n);let o=e.mapProjection,r=o.ellipsoid.cartesianToCartographic(t,nDe);if(!c(r))return;if(o.project(r,db),i===se.COLUMBUS_VIEW)return m.fromElements(db.z,db.x,db.y,n);if(i===se.SCENE2D)return m.fromElements(0,db.x,db.y,n);let s=e.morphTime;return m.fromElements(w.lerp(db.z,t.x,s),w.lerp(db.x,t.y,s),w.lerp(db.y,t.z,s),n)};var Qse=new m,jse=new m,qse=new M;Ma.clipToGLWindowCoordinates=function(e,t,n){return m.divideByScalar(t,t.w,Qse),M.computeViewportTransformation(e,0,1,qse),M.multiplyByPoint(qse,Qse,jse),D.fromCartesian3(jse,n)};Ma.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 iDe=new ce,$se=new ce;Ma.drawingBufferToWorldCoordinates=function(e,t,n,i){let r=e.context.uniformState,s=r.currentFrustum,a=s.x,l=s.y;if(e.frameState.useLogDepth){let y=n*r.log2FarDepthFromNearPlusOne,h=Math.pow(2,y)-1;n=l*(1-a/(h+a))/(l-a)}let d=e.view.passState.viewport,u=ce.clone(ce.UNIT_W,iDe);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 f,p=e.camera.frustum;if(c(p.fovy)){f=M.multiplyByVector(r.inverseViewProjection,u,$se);let y=1/f.w;m.multiplyByScalar(f,y,f)}else{let y=p.offCenterFrustum;c(y)&&(p=y),f=$se,f.x=(u.x*(p.right-p.left)+p.left+p.right)*.5,f.y=(u.y*(p.top-p.bottom)+p.bottom+p.top)*.5,f.z=(u.z*(a-l)-a-l)*.5,f.w=1,f=M.multiplyByVector(r.inverseView,f,f)}return m.fromCartesian4(f,i)};var Oi=Ma;var OZn=_(T(),1);var qLn=_(T(),1);var jC={};jC._deprecationWarning=Cs;var ub=Uint32Array.BYTES_PER_ELEMENT;jC.parse=function(e,t){let n=t??0;C.defined("arrayBuffer",e),t=n;let i=new Uint8Array(e),o=new DataView(e);t+=ub;let r=o.getUint32(t,!0);if(r!==1)throw new le(`Only Batched 3D Model version 1 is supported. Version ${r} is not.`);t+=ub;let s=o.getUint32(t,!0);t+=ub;let a=o.getUint32(t,!0);t+=ub;let l=o.getUint32(t,!0);t+=ub;let d=o.getUint32(t,!0);t+=ub;let u=o.getUint32(t,!0);t+=ub;let f;d>=570425344?(t-=ub*2,f=a,d=l,u=0,a=0,l=0,jC._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-=ub,f=d,d=a,u=l,a=0,l=0,jC._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:f??0}:(p=er(i,t,a),t+=a);let y=new Uint8Array(e,t,l);t+=l;let h,g;d>0&&(h=er(i,t,d),t+=d,u>0&&(g=new Uint8Array(e,t,u),g=new Uint8Array(g),t+=u));let x=n+s-t;if(x===0)throw new le("glTF byte length must be greater than 0.");let S;return t%4===0?S=new Uint8Array(e,t,x):(jC._deprecationWarning("b3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),S=new Uint8Array(i.subarray(t,t+x))),{batchLength:f,featureTableJson:p,featureTableBinary:y,batchTableJson:h,batchTableBinary:g,gltf:S}};var YI=jC;var nZn=_(T(),1);function HI(e,t){this.json=e,this.buffer=t,this._cachedTypedArrays={},this.featuresLength=0}function eae(e,t,n,i,o,r){let s=e._cachedTypedArrays,a=s[t];return c(a)||(a=q.createArrayBufferView(n,e.buffer.buffer,e.buffer.byteOffset+r,o*i),s[t]=a),a}function oDe(e,t,n,i){let o=e._cachedTypedArrays,r=o[t];return c(r)||(r=q.createTypedArray(n,i),o[t]=r),r}HI.prototype.getGlobalProperty=function(e,t,n){let i=this.json[e];if(c(i))return c(i.byteOffset)?(t=t??q.UNSIGNED_INT,n=n??1,eae(this,e,t,n,1,i.byteOffset)):i};HI.prototype.hasProperty=function(e){return c(this.json[e])};HI.prototype.getPropertyArray=function(e,t,n){let i=this.json[e];if(c(i))return c(i.byteOffset)?(c(i.componentType)&&(t=q.fromName(i.componentType)),eae(this,e,t,n,this.featuresLength,i.byteOffset)):oDe(this,e,t,i)};HI.prototype.getProperty=function(e,t,n,i,o){let r=this.json[e];if(!c(r))return;let s=this.getPropertyArray(e,t,n);if(n===1)return s[i];for(let a=0;a0&&(h=er(i,t,d),t+=d,u>0&&(g=new Uint8Array(e,t,u),g=new Uint8Array(g),t+=u));let x=n+s-t;if(x===0)throw new le("glTF byte length must be greater than 0.");let S;return t%4===0?S=new Uint8Array(e,t,x):(nk._deprecationWarning("i3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),S=new Uint8Array(i.subarray(t,t+x))),{gltfFormat:f,featureTableJson:p,featureTableBinary:y,batchTableJson:h,batchTableBinary:g,gltf:S}};var QI=nk;var fb={NOT_LOADED:0,LOADING:1,PROCESSING:2,POST_PROCESSING:3,READY:4,FAILED:5,UNLOADED:6},ik=Cn.Attribute,LDe=Cn.FeatureIdAttribute,sae=Cn.Instances;function hb(e){e=e??z.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,l=e.upAxis??Po.Y,d=e.forwardAxis??Po.X,u=e.loadAttributesAsTypedArray??!1,f=e.loadIndicesForWireframe??!1,p=e.loadPrimitiveOutline??!0,y=e.enablePick??!1;C.typeOf.object("options.i3dmResource",t),C.typeOf.object("options.arrayBuffer",n),i=c(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=l,this._forwardAxis=d,this._loadAttributesAsTypedArray=u,this._loadIndicesForWireframe=f,this._loadPrimitiveOutline=p,this._enablePick=y,this._state=fb.NOT_LOADED,this._promise=void 0,this._gltfLoader=void 0,this._buffers=[],this._components=void 0,this._transform=M.IDENTITY,this._batchTable=void 0,this._featureTable=void 0,this._instancesLength=0}c(Object.create)&&(hb.prototype=Object.create(Ji.prototype),hb.prototype.constructor=hb);Object.defineProperties(hb.prototype,{texturesLoaded:{get:function(){return this._gltfLoader?.texturesLoaded}},cacheKey:{get:function(){}},components:{get:function(){return this._components}}});hb.prototype.load=function(){if(c(this._promise))return this._promise;let e=QI.parse(this._arrayBuffer,this._byteOffset),t=e.featureTableJson,n=e.featureTableBinary,i=e.batchTableJson,o=e.batchTableBinary,r=e.gltfFormat,s=new of(t,n);this._featureTable=s;let a=s.getGlobalProperty("INSTANCES_LENGTH");if(s.featuresLength=a,!c(a))throw new le("Feature table global property: INSTANCES_LENGTH must be defined");this._instancesLength=a;let l=s.getGlobalProperty("RTC_CENTER",q.FLOAT,3);c(l)&&(this._transform=M.fromTranslation(m.fromArray(l))),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 f=Il(e.gltf);f=f.replace(/[\s\0]+$/,"");let p=this._baseResource.getDerivedResource({url:f});d.gltfResource=p,d.baseResource=p}else d.gltfResource=this._i3dmResource,d.typedArray=e.gltf;let u=new nf(d);return this._gltfLoader=u,this._state=fb.LOADING,this._promise=u.load().then(()=>{if(!this.isDestroyed())return this._state=fb.PROCESSING,this}).catch(f=>{if(!this.isDestroyed())throw ZDe(this,f)}),this._promise};function ZDe(e,t){return e.unload(),e._state=fb.FAILED,e.getError("Failed to load i3dm",t)}hb.prototype.process=function(e){if(C.typeOf.object("frameState",e),this._state===fb.READY)return!0;let t=this._gltfLoader,n=!1;if(this._state===fb.PROCESSING&&(n=t.process(e)),!n)return!1;let i=t.components;return i.transform=M.multiplyTransformation(this._transform,i.transform,i.transform),EDe(this,i,e),RDe(this,i),this._components=i,this._arrayBuffer=void 0,this._state=fb.READY,!0};function RDe(e,t){let n=e._batchTable,i=e._instancesLength;if(i===0)return;let o;if(c(n.json))o=mb({count:i,batchTable:n.json,binaryBody:n.binary});else{let r=new qc({name:Jm.BATCH_TABLE_CLASS_NAME,count:i});o=new Ds({schema:{},propertyTables:[r]})}t.structuralMetadata=o}var ok=new m,gz=new Array(4),GDe=new M;function EDe(e,t,n){let i,o=e._featureTable,r=e._instancesLength;if(r===0)return;let s=o.getGlobalProperty("RTC_CENTER",q.FLOAT,3),a=o.getGlobalProperty("EAST_NORTH_UP"),l=o.hasProperty("NORMAL_UP")||o.hasProperty("NORMAL_UP_OCT32P")||a,d=o.hasProperty("SCALE")||o.hasProperty("SCALE_NON_UNIFORM"),u=IDe(o,r),f;l&&(f=new Float32Array(4*r));let p;d&&(p=new Float32Array(3*r));let y=new Float32Array(r),h=m.unpackArray(u),g=new m,x=new m,S=new m,V=new m,Z=new te,R=new Fe,E=new Array(4),I=new m,v=new Array(3),P=new M;if(!c(s)||m.equals(m.unpack(s),m.ZERO)){let O=ue.fromPoints(h);for(i=0;i0&&(O.instances=B?XDe(F):F,B=!0)}}function XDe(e){let t=new sae;t.transformInWorldSpace=e.transformInWorldSpace;let n=e.attributes,i=n.length;for(let o=0;on[i-1])throw new L("time is out of range.");if(t=t??0,e>=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};qC.prototype.clampTime=function(e){C.typeOf.number("time",e);let t=this.times;return w.clamp(e,t[0],t[t.length-1])};var Pi=qC;function $C(e){this._value=e,this._valueType=Pi.getPointType(e)}Object.defineProperties($C.prototype,{value:{get:function(){return this._value}}});$C.prototype.findTimeInterval=function(e){throw new L("findTimeInterval cannot be called on a ConstantSpline.")};$C.prototype.wrapTime=function(e){return C.typeOf.number("time",e),0};$C.prototype.clampTime=function(e){return C.typeOf.number("time",e),0};$C.prototype.evaluate=function(e,t){C.typeOf.number("time",e);let n=this._value,i=this._valueType;return i===Number?n:i.clone(n,t)};var qI=$C;var IGn=_(T(),1);var pGn=_(T(),1);function e1(e){e=e??z.EMPTY_OBJECT;let t=e.points,n=e.times;if(!c(t)||!c(n))throw new L("points and times are required.");if(t.length<2)throw new L("points.length must be greater than or equal to 2.");if(n.length!==t.length)throw new L("times.length must be equal to points.length.");this._times=n,this._points=t,this._pointType=Pi.getPointType(t[0]),this._lastTimeIndex=0}Object.defineProperties(e1.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});e1.prototype.findTimeInterval=Pi.prototype.findTimeInterval;e1.prototype.wrapTime=Pi.prototype.wrapTime;e1.prototype.clampTime=Pi.prototype.clampTime;e1.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]:(c(t)||(t=new m),m.lerp(n[o],n[o+1],r,t))};var Zy=e1;var _Gn=_(T(),1);var aae={};aae.solve=function(e,t,n,i){if(!c(e)||!(e instanceof Array))throw new L("The array lower is required.");if(!c(t)||!(t instanceof Array))throw new L("The array diagonal is required.");if(!c(n)||!(n instanceof Array))throw new L("The array upper is required.");if(!c(i)||!(i instanceof Array))throw new L("The array right is required.");if(t.length!==i.length)throw new L("diagonal and right must have the same lengths.");if(e.length!==n.length)throw new L("lower and upper must have the same lengths.");if(e.length!==t.length-1)throw new L("lower and upper must be one less than the length of diagonal.");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 t1=aae;var cae=[],lae=[],dae=[],uae=[];function FDe(e,t,n){let i=cae,o=dae,r=lae,s=uae;i.length=o.length=e.length-1,r.length=s.length=e.length;let a;i[0]=r[0]=1,o[0]=0;let l=s[0];for(c(l)||(l=s[0]=new m),m.clone(t,l),a=1;a=n.length||e.index<0))throw new L("options.index must be a valid animation index.");let i=e.index;if(c(i))return Tz(this,n[i],e);let o=n.length;for(let r=0;r=this._runtimeAnimations.length||e<0)throw new L("index must be valid within the range of the collection");return this._runtimeAnimations[e]};var rk=[];function HDe(e,t,n){return function(){e.animationRemoved.raiseEvent(t,n)}}pb.prototype.update=function(e){let t=this._runtimeAnimations,n=t.length;if(n===0)return this._previousTime=void 0,!1;if(!this.animateWhilePaused&&ee.equals(e.time,this._previousTime))return!1;this._previousTime=ee.clone(e.time,this._previousTime);let i=!1,o=e.time,r=this._model;for(let s=0;s0&&e.afterRender.push(a._raiseStartEvent)),a.loop===Al.REPEAT)y=y-Math.floor(y);else if(a.loop===Al.MIRRORED_REPEAT){let V=Math.floor(y),Z=y-V;y=V%2===1?1-Z:Z}let x=a.startOffset;a.reverse&&(y=1-y,x=-x);let S=y*d*a.multiplier+x;S=w.clamp(S,a.localStartTime,a.localStopTime),a.animate(S),a.update.numberOfListeners>0&&(a._updateEventTime=S,e.afterRender.push(a._raiseUpdateEvent)),i=!0,g||(a._state=rf.STOPPED,a.stop.numberOfListeners>0&&e.afterRender.push(a._raiseStopEvent),a.removeOnStop&&rk.push(a))}}n=rk.length;for(let s=0;sw.EPSILON3}};var dW=hae;var yXn=_(T(),1);var lXn=_(T(),1),uW=`#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) { 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) 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); 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 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 pae={name:"ImageBasedLightingPipelineStage"},JDe=new D;pae.process=function(e,t,n){let i=t.imageBasedLighting,o=t.environmentMapManager,r=e.shaderBuilder,s;c(i.specularEnvironmentMaps)||(s=o.radianceCubeMap);let a=i.sphericalHarmonicCoefficients??o.sphericalHarmonicCoefficients;r.addDefine("USE_IBL_LIGHTING",void 0,xe.FRAGMENT),r.addUniform("vec2","model_iblFactor",xe.FRAGMENT),Bm.isSupported(n.context)&&((i.useSphericalHarmonics||i.useSpecularEnvironmentMaps||i.enabled)&&r.addUniform("mat3","model_iblReferenceFrameMatrix",xe.FRAGMENT),c(s)&&r.addDefine("COMPUTE_POSITION_WC_ATMOSPHERE",void 0,xe.BOTH),c(a)&&c(a[0])?(r.addDefine("DIFFUSE_IBL",void 0,xe.FRAGMENT),r.addDefine("CUSTOM_SPHERICAL_HARMONICS",void 0,xe.FRAGMENT),r.addUniform("vec3","model_sphericalHarmonicCoefficients[9]",xe.FRAGMENT)):i.useDefaultSphericalHarmonics&&r.addDefine("DIFFUSE_IBL",void 0,xe.FRAGMENT),c(i.specularEnvironmentCubeMap)&&i.specularEnvironmentCubeMap.ready||c(s)?(r.addDefine("SPECULAR_IBL",void 0,xe.FRAGMENT),r.addDefine("CUSTOM_SPECULAR_IBL",void 0,xe.FRAGMENT),r.addUniform("samplerCube","model_specularEnvironmentMaps",xe.FRAGMENT),r.addUniform("float","model_specularEnvironmentMapsMaximumLOD",xe.FRAGMENT)):t.useDefaultSpecularMaps&&r.addDefine("SPECULAR_IBL",void 0,xe.FRAGMENT)),r.addFragmentLines(uW);let l={model_iblFactor:function(){return D.multiplyByScalar(i.imageBasedLightingFactor,o?.intensity||1,JDe)},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}};c(s)&&(l.model_specularEnvironmentMaps=function(){return s},l.model_specularEnvironmentMapsMaximumLOD=function(){return o.maximumMipmapLevel}),e.uniformMap=St(l,e.uniformMap)};var mW=pae;var wXn=_(T(),1);var ZXn=_(T(),1);var QDe=w.EPSILON16;function Cz(e){e=e??z.EMPTY_OBJECT;let t=e.stage,n=e.runtimeArticulation;C.typeOf.object("options.stage",t),C.typeOf.object("options.runtimeArticulation",n),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(Cz.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){C.typeOf.number("value",e),e=w.clamp(e,this.minimumValue,this.maximumValue),w.equalsEpsilon(this._currentValue,e,QDe)||(this._currentValue=e,this.runtimeArticulation._dirty=!0)}}});var jDe=new m,Sz=new te;Cz.prototype.applyStageToMatrix=function(e){C.typeOf.object("result",e);let t=this.type,n=this.currentValue,i=jDe,o;switch(t){case yc.XROTATE:o=te.fromRotationX(w.toRadians(n),Sz),e=M.multiplyByMatrix3(e,o,e);break;case yc.YROTATE:o=te.fromRotationY(w.toRadians(n),Sz),e=M.multiplyByMatrix3(e,o,e);break;case yc.ZROTATE:o=te.fromRotationZ(w.toRadians(n),Sz),e=M.multiplyByMatrix3(e,o,e);break;case yc.XTRANSLATE:i.x=n,i.y=0,i.z=0,e=M.multiplyByTranslation(e,i,e);break;case yc.YTRANSLATE:i.x=0,i.y=n,i.z=0,e=M.multiplyByTranslation(e,i,e);break;case yc.ZTRANSLATE:i.x=0,i.y=0,i.z=n,e=M.multiplyByTranslation(e,i,e);break;case yc.XSCALE:i.x=n,i.y=1,i.z=1,e=M.multiplyByScale(e,i,e);break;case yc.YSCALE:i.x=1,i.y=n,i.z=1,e=M.multiplyByScale(e,i,e);break;case yc.ZSCALE:i.x=1,i.y=1,i.z=n,e=M.multiplyByScale(e,i,e);break;case yc.UNIFORMSCALE:e=M.multiplyByUniformScale(e,n,e);break;default:break}return e};var fW=Cz;function sk(e){e=e??z.EMPTY_OBJECT;let t=e.articulation,n=e.sceneGraph;C.typeOf.object("options.articulation",t),C.typeOf.object("options.sceneGraph",n),this._articulation=t,this._sceneGraph=n,this._name=t.name,this._runtimeStages=[],this._runtimeStagesByName={},this._runtimeNodes=[],this._dirty=!0,qDe(this)}Object.defineProperties(sk.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 qDe(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 bae={name:"ModelClippingPlanesPipelineStage"},tBe=new D;bae.process=function(e,t,n){let i=t.clippingPlanes,o=n.context,r=e.shaderBuilder;r.addDefine("HAS_CLIPPING_PLANES",void 0,xe.FRAGMENT),r.addDefine("CLIPPING_PLANES_LENGTH",i.length,xe.FRAGMENT),i.unionClippingRegions&&r.addDefine("UNION_CLIPPING_REGIONS",void 0,xe.FRAGMENT),hs.useFloatTexture(o)&&r.addDefine("USE_CLIPPING_PLANES_FLOAT_TEXTURE",void 0,xe.FRAGMENT);let s=hs.getTextureResolution(i,o,tBe);r.addDefine("CLIPPING_PLANES_TEXTURE_WIDTH",s.x,xe.FRAGMENT),r.addDefine("CLIPPING_PLANES_TEXTURE_HEIGHT",s.y,xe.FRAGMENT),r.addUniform("sampler2D","model_clippingPlanes",xe.FRAGMENT),r.addUniform("vec4","model_clippingPlanesEdgeStyle",xe.FRAGMENT),r.addUniform("mat4","model_clippingPlanesMatrix",xe.FRAGMENT),r.addFragmentLines(bW);let a={model_clippingPlanes:function(){return i.texture},model_clippingPlanesEdgeStyle:function(){let l=Y.clone(i.edgeColor);return l.alpha=i.edgeWidth,l},model_clippingPlanesMatrix:function(){return t._clippingPlanesMatrix}};e.uniformMap=St(a,e.uniformMap)};var yW=bae;var cIn=_(T(),1);var eIn=_(T(),1),gW=`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 nIn=_(T(),1),xW=`void modelClippingPolygonsStage() { vec2 clippingPosition = v_clippingPosition; int regionIndex = v_regionIndex; czm_clipPolygons(model_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex); } `;var yae={name:"ModelClippingPolygonsPipelineStage"};yae.process=function(e,t,n){let i=t.clippingPolygons,o=e.shaderBuilder;o.addDefine("ENABLE_CLIPPING_POLYGONS",void 0,xe.BOTH),i.inverse&&o.addDefine("CLIPPING_INVERSE",void 0,xe.FRAGMENT),o.addDefine("CLIPPING_POLYGON_REGIONS_LENGTH",i.extentsCount,xe.BOTH),o.addUniform("sampler2D","model_clippingDistance",xe.FRAGMENT),o.addUniform("sampler2D","model_clippingExtents",xe.VERTEX),o.addVarying("vec2","v_clippingPosition"),o.addVarying("int","v_regionIndex","flat"),o.addVertexLines(gW),o.addFragmentLines(xW);let r={model_clippingDistance:function(){return i.clippingTexture},model_clippingExtents:function(){return i.extentsTexture}};e.uniformMap=St(r,e.uniformMap)};var _W=yae;var mIn=_(T(),1);function gae(e,t){C.typeOf.object("model",e),C.typeOf.object("runtimeNode",t),this._model=e,this._runtimeNode=t}Object.defineProperties(gae.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){c(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 TW=gae;var aWn=_(T(),1);var kIn=_(T(),1);var hIn=_(T(),1),SW=`mat4 getInstancingTransform() { mat4 instancingTransform; #ifdef HAS_INSTANCE_MATRICES instancingTransform = mat4( a_instancingTransformRow0.x, a_instancingTransformRow1.x, a_instancingTransformRow2.x, 0.0, a_instancingTransformRow0.y, a_instancingTransformRow1.y, a_instancingTransformRow2.y, 0.0, a_instancingTransformRow0.z, a_instancingTransformRow1.z, a_instancingTransformRow2.z, 0.0, a_instancingTransformRow0.w, a_instancingTransformRow1.w, a_instancingTransformRow2.w, 1.0 ); #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, a_instancingTransform2DRow0.y, a_instancingTransform2DRow1.y, a_instancingTransform2DRow2.y, 0.0, a_instancingTransform2DRow0.z, a_instancingTransform2DRow1.z, a_instancingTransform2DRow2.z, 0.0, a_instancingTransform2DRow0.w, a_instancingTransform2DRow1.w, a_instancingTransform2DRow2.w, 1.0 ); #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 bIn=_(T(),1),CW=`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 gIn=_(T(),1),VW=`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 ak=new M,nBe=new M,iBe=new M,_ae={name:"InstancingPipelineStage",_getInstanceTransformsAsMatrices:Lae,_transformsToTypedArray:Lz};_ae.process=function(e,t,n){let i=t.instances,o=i.attributes[0].count,r=e.shaderBuilder;r.addDefine("HAS_INSTANCING"),r.addVertexLines(SW);let s=e.model,a=s.sceneGraph,l=e.runtimeNode,d=n.mode!==se.SCENE3D&&!n.scene3DOnly&&s._projectTo2D,u=s._enablePick&&!n.context.webgl2,f=[];gBe(e,n,i,f,d,u),TBe(e,n,i,f);let p={};if(i.transformInWorldSpace?(r.addDefine("USE_LEGACY_INSTANCING",void 0,xe.VERTEX),r.addUniform("mat4","u_instance_modifiedModelView",xe.VERTEX),r.addUniform("mat4","u_instance_nodeTransform",xe.VERTEX),p.u_instance_modifiedModelView=function(){let y=M.multiplyTransformation(s.modelMatrix,a.components.transform,ak);return d?M.multiplyTransformation(n.context.uniformState.view3D,y,ak):(n.mode!==se.SCENE3D&&(y=wt.basisTo2D(n.mapProjection,y,ak)),M.multiplyTransformation(n.context.uniformState.view,y,ak))},p.u_instance_nodeTransform=function(){return M.multiplyTransformation(a.axisCorrectionMatrix,l.computedTransform,nBe)},r.addVertexLines(VW)):r.addVertexLines(CW),d){r.addDefine("USE_2D_INSTANCING",void 0,xe.VERTEX),r.addUniform("mat4","u_modelView2D",xe.VERTEX);let y=n.context,h=M.fromTranslation(l.instancingReferencePoint2D,new M);p.u_modelView2D=function(){return M.multiplyTransformation(y.uniformState.view,h,iBe)}}e.uniformMap=St(p,e.uniformMap),e.instanceCount=o,e.attributes.push.apply(e.attributes,f)};var LW=new M,oBe=new m;function rBe(e,t,n,i,o){let r=M.multiplyTransformation(t,e,LW);return r=M.multiplyTransformation(r,n,LW),o=wt.basisTo2D(i.mapProjection,r,o),o}function sBe(e,t,n,i,o){let r=M.fromTranslation(e,LW),s=M.multiplyTransformation(t,r,LW);s=M.multiplyTransformation(s,n,LW);let a=M.getTranslation(s,oBe);return o=Oi.computeActualEllipsoidPosition(i,a,o),o}function Tae(e,t,n){let i=e.model,o=i.sceneGraph;e.runtimeNode.node.instances.transformInWorldSpace?(t=M.multiplyTransformation(i.modelMatrix,o.components.transform,t),n=M.multiplyTransformation(o.axisCorrectionMatrix,e.runtimeNode.computedTransform,n)):(t=M.clone(o.computedModelMatrix,t),t=M.multiplyTransformation(t,e.runtimeNode.computedTransform,t),n=M.clone(M.IDENTITY,n))}var Sae=new M,Cae=new M,aBe=new M,cBe=new m;function lBe(e,t,n,i){let o=Sae,r=Cae;Tae(t,o,r);let a=t.runtimeNode.instancingReferencePoint2D,l=e.length;for(let d=0;d=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=a.setIndex+1),i.push({index:e.attributeIndex++,vertexBuffer:a.buffer,componentsPerAttribute:rn.getNumberOfComponents(a.type),componentDatatype:a.componentDatatype,normalize:!1,offsetInBytes:a.byteOffset,strideInBytes:a.byteStride,instanceDivisor:1}),r.addAttribute("float",`a_instanceFeatureId_${a.setIndex}`))}}var ZW=_ae;var YIn=_(T(),1);var Rz={};Rz.name="ModelMatrixUpdateStage";Rz.update=function(e,t,n){let i=n.mode!==se.SCENE3D;if(!(i&&t._model._projectTo2D)&&e._transformDirty){let o=i?t._computedModelMatrix2D:t._computedModelMatrix;Zae(e,t,o,e.transformToRoot),e._transformDirty=!1}};function SBe(e,t,n){e.modelMatrix=M.multiplyTransformation(t,n,e.modelMatrix),e.cullFace=qt.getCullFace(e.modelMatrix,e.primitiveType)}function Zae(e,t,n,i){let o;i=M.multiplyTransformation(i,e.transform,new M),e.updateComputedTransform();let r=e.runtimePrimitives.length;for(o=0;o=this.children.length)throw new L("index must be greater than or equal to 0 and less than the number of children.");return this.sceneGraph._runtimeNodes[this.children[e]]};a1.prototype.configurePipeline=function(){let e=this.node,t=this.pipelineStages;t.length=0;let n=this.updateStages;n.length=0,c(e.instances)&&t.push(ZW),t.push(GW),n.push(RW)};a1.prototype.updateComputedTransform=function(){this._computedTransform=M.multiply(this._transformToRoot,this._transform,this._computedTransform)};a1.prototype.updateJointMatrices=function(){let e=this._runtimeSkin;if(!c(e))return;e.updateJointMatrices();let t=this._computedJointMatrices,n=e.jointMatrices,i=n.length;for(let o=0;o1&&(i.addDefine("MULTILINE_BATCH_TEXTURE"),i.addUniform("vec2","model_textureDimensions"),o.model_textureDimensions=function(){return l.textureDimensions}),e.uniformMap=St(o,e.uniformMap)};var IW=Iae;var CWn=_(T(),1);var Wae={name:"ClassificationPipelineStage"};Wae.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_CLASSIFICATION",void 0,xe.BOTH);let o=e.runtimePrimitive;c(o.batchLengths)||VBe(t,o)};function VBe(e,t){let n=qt.getAttributeBySemantic(e,pt.POSITION);if(!c(n))throw new le("Primitives must have a position attribute to be used for classification.");let i,o=e.indices,r=c(o);r&&(i=o.typedArray,o.typedArray=void 0);let s=r?o.count:n.count,a=qt.getAttributeBySemantic(e,pt.FEATURE_ID,0);if(!c(a)){t.batchLengths=[s],t.batchOffsets=[0];return}let l=a.typedArray;a.typedArray=void 0;let d=[],u=[0],f=r?i[0]:0,p=l[f],y=0;for(let g=1;gPBe(i,t,n)):[]}function PBe(e,t,n){let{getAttributeByName:i,getAttributeInfo:o,sanitizeGlslIdentifier:r}=qt,s=e.class.id,a=n?.classes[s],l=Object.entries(e.properties),d=new Array(l.length);for(let u=0;uFBe(n,t)):[]}function FBe(e,t){let{sanitizeGlslIdentifier:n}=qt,i=e.class.id,o=t?.classes[i],r=Object.entries(e.properties).filter(([a,l])=>l.isGpuCompatible()),s=new Array(r.length);for(let a=0;au),n.addStructField(Gi.STRUCT_ID_METADATA_FS,r,o);let y=`attributes.texCoord_${a}`,h=y;if(c(f)&&!te.equals(f,te.IDENTITY)){let Z=`${p}Transform`;n.addUniform("mat3",Z,xe.FRAGMENT),i[Z]=function(){return f},h=`vec2(${Z} * vec3(${y}, 1.0))`}let g=`texture(${p}, ${h}).${l}`,x=s.unpackInShader(g),S=kae({valueExpression:x,renderResources:e,glslType:r,metadataVariable:o,shaderDestination:xe.FRAGMENT,property:s}),V=`metadata.${o} = ${S};`;n.addFunctionLines(Gi.FUNCTION_ID_INITIALIZE_METADATA_FS,[V])}function Aae(e,t){let{classProperty:n}=t.property,{metadataVariable:i,glslType:o,shaderDestination:r}=t,s=Nae(Gi.METADATA_CLASS_FIELDS,n,`metadataClass.${i}`,o),a=`${o}MetadataClass`;e.addStructField(Gi.STRUCT_ID_METADATA_CLASS_FS,a,i),e.addFunctionLines(Gi.FUNCTION_ID_INITIALIZE_METADATA_FS,s),xe.includesVertexShader(r)&&(e.addStructField(Gi.STRUCT_ID_METADATA_CLASS_VS,a,i),e.addFunctionLines(Gi.FUNCTION_ID_INITIALIZE_METADATA_VS,s))}function Mae(e,t){let{propertyStatistics:n}=t;if(!c(n))return;let{metadataVariable:i,type:o,glslType:r}=t;if(o===lt.ENUM)return;let s=Gi.METADATA_STATISTICS_FIELDS,a=`metadataStatistics.${i}`,l=Nae(s,n,a,r),d=`${r}MetadataStatistics`;e.addStructField(Gi.STRUCT_ID_METADATA_STATISTICS_FS,d,i),e.addFunctionLines(Gi.FUNCTION_ID_INITIALIZE_METADATA_FS,l),xe.includesVertexShader(t.shaderDestination)&&(e.addStructField(Gi.STRUCT_ID_METADATA_STATISTICS_VS,d,i),e.addFunctionLines(Gi.FUNCTION_ID_INITIALIZE_METADATA_VS,l))}function Nae(e,t,n,i){function o(r){let s=t[r.specName];if(c(s))return`${n}.${r.shaderName} = ${i}(${s});`}return c(t)?e.map(o).filter(c):[]}function kae(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:l,shaderDestination:d}=e;s.addUniform(l,o,d),s.addUniform(l,r,d);let{offset:u,scale:f}=n;return a[o]=()=>u,a[r]=()=>f,`czm_valueTransform(${o}, ${r}, ${t})`}var Fu=Gi;var _wn=_(T(),1),YBe={INHERIT:0,OPAQUE:1,TRANSLUCENT:2},Iy=Object.freeze(YBe);var pa={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:ht};pa.process=function(e,t,n){let{shaderBuilder:i,model:o,alphaOptions:r}=e,{customShader:s}=o,{lightingModel:a,translucencyMode:l}=s;c(a)&&(e.lightingOptions.lightingModel=a),l===Iy.TRANSLUCENT?r.pass=Xe.TRANSLUCENT:l===Iy.OPAQUE&&(r.pass=void 0);let d=$Be(s,t);if(!d.customShaderEnabled)return;if(i3e(i,s,d),d.shouldComputePositionWC&&i.addDefine("COMPUTE_POSITION_WC_CUSTOM_SHADER",void 0,xe.BOTH),c(s.vertexShaderText)&&i.addDefine("HAS_CUSTOM_VERTEX_SHADER",void 0,xe.VERTEX),c(s.fragmentShaderText)){i.addDefine("HAS_CUSTOM_FRAGMENT_SHADER",void 0,xe.FRAGMENT);let p=bb.getDefineName(s.mode);i.addDefine(p,void 0,xe.FRAGMENT)}let u=s.uniforms;for(let p in u)if(u.hasOwnProperty(p)){let y=u[p];i.addUniform(y.type,p)}let f=s.varyings;for(let p in f)if(f.hasOwnProperty(p)){let y=f[p];i.addVarying(y,p)}e.uniformMap=St(e.uniformMap,s.uniformMap)};function HBe(e){let t={};for(let n=0;n1?(y=e.attributeIndex,e.attributeIndex+=f):p&&!a?y=0:y=e.attributeIndex++,d3e(e,u,y,f,r,s)}x3e(i,t.attributes),t.primitiveType===ve.POINTS&&i.addDefine("PRIMITIVE_TYPE_POINTS"),i.addVertexLines(HW),i.addFragmentLines(YW)};function d3e(e,t,n,i,o,r){let s=e.shaderBuilder,a=qt.getAttributeInfo(t),l=o&&!r;i>1?f3e(e,t,n,i):m3e(e,t,n,l),p3e(s,a,l),h3e(s,a),c(t.semantic)&&u3e(s,t),b3e(s,a,o),y3e(s,a,l),g3e(s,a)}function u3e(e,t){let{semantic:n,setIndex:i}=t;switch(n){case pt.NORMAL:e.addDefine("HAS_NORMALS");break;case pt.TANGENT:e.addDefine("HAS_TANGENTS");break;case pt.FEATURE_ID:e.addDefine(`HAS${n}_${i}`);break;case pt.TEXCOORD:case pt.COLOR:e.addDefine(`HAS_${n}_${i}`)}}function m3e(e,t,n,i){let{quantization:o,semantic:r,setIndex:s}=t,{type:a,componentDatatype:l}=c(o)?o:t;r===pt.FEATURE_ID&&s>=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=s+1);let d=r===pt.POSITION,u=d?0:n,f=rn.getNumberOfComponents(a),p={index:u,value:c(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,count:t.count,componentsPerAttribute:f,componentDatatype:l,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};if(e.attributes.push(p),!d||!i)return;let y=e.runtimePrimitive.positionBuffer2D,h={index:n,vertexBuffer:y,count:t.count,componentsPerAttribute:f,componentDatatype:q.FLOAT,offsetInBytes:0,strideInBytes:void 0,normalize:t.normalized};e.attributes.push(h)}function f3e(e,t,n,i){let{quantization:o,normalized:r}=t,{type:s,componentDatatype:a}=c(o)?o:t,d=rn.getNumberOfComponents(s)/i,u=q.getSizeInBytes(a),f=d*u,p=t.byteStride;for(let y=0;y0,d=!c(a)&&l;if(c(r)&&!d){let g=B3e(a),x=Y3e(r,g);H3e(i,x);let V=z3e(x).indexOf("normalMC")>=0,Z=qt.getAttributeBySemantic(t,pt.NORMAL);if(V&&!Z)throw new le("Style references the NORMAL semantic but the point cloud does not have normals");i.addDefine("COMPUTE_POSITION_WC_STYLE",void 0,xe.VERTEX),x.styleTranslucent&&(e.alphaOptions.pass=Xe.TRANSLUCENT)}let u=o.pointCloudShading;u.attenuation&&i.addDefine("HAS_POINT_CLOUD_ATTENUATION",void 0,xe.VERTEX),u.backFaceCulling&&i.addDefine("HAS_POINT_CLOUD_BACK_FACE_CULLING",void 0,xe.VERTEX);let f,p,y;mr.is3DTiles(o.type)&&(p=!0,f=o.content,y=f.tile.refine===Bo.ADD),i.addUniform("vec4","model_pointCloudParameters",xe.VERTEX),i.addVertexLines(nw);let h=e.uniformMap;h.model_pointCloudParameters=function(){let g=k3e,x=1;p&&(x=y?5:f.tileset.memoryAdjustedScreenSpaceError),g.x=u.maximumAttenuation??x,g.x*=n.pixelRatio;let S=U3e(e,t,u,f);g.y=S*u.geometricErrorScale;let V=n.context,Z=n.camera.frustum,R;return n.mode===se.SCENE2D||Z instanceof sn?R=Number.POSITIVE_INFINITY:R=V.drawingBufferHeight/n.camera.frustum.sseDenominator,g.z=R,p&&(g.w=f.tileset.timeSinceLoad),g}};var ece=new m;function U3e(e,t,n,i){if(c(i)){let u=i.tile.geometricError;if(u>0)return u}if(c(n.baseResolution))return n.baseResolution;let o=qt.getAttributeBySemantic(t,pt.POSITION),r=o.count,s=e.runtimeNode.transform,a=m.subtract(o.max,o.min,ece);a=M.multiplyByPointAsVector(s,a,ece);let l=a.x*a.y*a.z;return w.cbrt(l/r)}var O3e={colorStyleFunction:void 0,showStyleFunction:void 0,pointSizeStyleFunction:void 0,styleTranslucent:!1},D3e={POSITION:"attributes.positionMC",POSITION_ABSOLUTE:"v_positionWC",COLOR:"attributes.color_0",NORMAL:"attributes.normalMC"};function B3e(e){let t=He(D3e);if(!c(e))return t;for(let n=0;n0,p=c(i.skin),y=c(r),g=!(y&&c(r.fragmentShaderText))||r.mode!==bb.REPLACE_MATERIAL,x=qt.hasQuantizedAttributes(n.attributes),S=o.debugWireframe&&ve.isTriangles(n.primitiveType)&&(o._enableDebugWireframe||a),V=o.pointCloudShading,Z=c(V)&&V.attenuation,R=c(V)&&V.backFaceCulling,E=n.primitiveType===ve.POINTS&&(c(s)||Z||R),I=o._enableShowOutline&&c(n.outlineCoordinates),v=pYe(o,i,n),P=c(o.classificationType);d&&t.push(cw),t.push(KW),S&&t.push(fw),P&&t.push(WW),f&&t.push(ew),p&&t.push(dw),E&&t.push(iw),x&&t.push(BW),g&&t.push(qW),t.push(Xy),t.push(Fu),t.push(Ld),v.hasPropertyTable&&(t.push(Wy),t.push(IW),t.push(vW)),u&&t.push(mw),y&&t.push(OW),t.push(QW),o.allowPicking&&t.push(tw),I&&t.push(sw),t.push(XW),t.push(aw)};function pYe(e,t,n){let i;return c(t.instances)&&(i=qt.getFeatureIdsByLabel(t.instances.featureIds,e.instanceFeatureIdLabel),c(i))?{hasFeatureIds:!0,hasPropertyTable:c(i.propertyTableId)}:(i=qt.getFeatureIdsByLabel(n.featureIds,e.featureIdLabel),c(i)?{hasFeatureIds:!0,hasPropertyTable:c(i.propertyTableId)}:{hasFeatureIds:!1,hasPropertyTable:!1})}var hw=hce;var CFn=_(T(),1);function Pz(e){e=e??z.EMPTY_OBJECT,C.typeOf.object("options.skin",e.skin),C.typeOf.object("options.sceneGraph",e.sceneGraph),this._sceneGraph=e.sceneGraph;let t=e.skin;this._skin=t,this._inverseBindMatrices=void 0,this._joints=[],this._jointMatrices=[],bYe(this)}Object.defineProperties(Pz.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 bYe(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 l=0;l czm_splitPosition) discard; if (model_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard; #endif } `;var lk={name:"ModelSplitterPipelineStage",SPLIT_DIRECTION_UNIFORM_NAME:"model_splitDirection"};lk.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine("HAS_MODEL_SPLITTER",void 0,xe.FRAGMENT),i.addFragmentLines(Tw);let o={};i.addUniform("float",lk.SPLIT_DIRECTION_UNIFORM_NAME,xe.FRAGMENT),o[lk.SPLIT_DIRECTION_UNIFORM_NAME]=function(){return t.splitDirection},e.uniformMap=St(o,e.uniformMap)};var Sw=lk;var eAn=_(T(),1);function xYe(e,t){C.typeOf.object("modelRenderResources",e),C.typeOf.object("runtimeNode",t),this.model=e.model,this.shaderBuilder=e.shaderBuilder.clone(),this.uniformMap=He(e.uniformMap),this.alphaOptions=He(e.alphaOptions),this.renderStateOptions=He(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}var Cw=xYe;var fAn=_(T(),1);var oAn=_(T(),1);function _Ye(e){e=e??z.EMPTY_OBJECT,this.lightingModel=e.lightingModel??Lh.UNLIT}var Vw=_Ye;function TYe(e,t){C.typeOf.object("nodeRenderResources",e),C.typeOf.object("runtimePrimitive",t),this.model=e.model,this.runtimeNode=e.runtimeNode,this.attributes=e.attributes.slice(),this.attributeIndex=e.attributeIndex,this.featureIdVertexAttributeSetIndex=e.featureIdVertexAttributeSetIndex,this.uniformMap=He(e.uniformMap),this.alphaOptions=He(e.alphaOptions),this.renderStateOptions=He(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=c(n.indices)?n.indices.count:qt.getAttributeBySemantic(n,"POSITION").count,this.hasPropertyTable=!1,this.indices=n.indices,this.wireframeIndexBuffer=void 0,this.primitiveType=n.primitiveType;let i=qt.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 Vw,this.pickId=void 0}var Lw=TYe;var y9n=_(T(),1);var GAn=_(T(),1);function Fz(e){e=e??z.EMPTY_OBJECT;let t=e.command,n=e.primitiveRenderResources;C.typeOf.object("options.command",t),C.typeOf.object("options.primitiveRenderResources",n);let 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!==Un.CESIUM_3D_TILE,this._classifies3DTiles=o!==Un.TERRAIN,this._useDebugWireframe=i._enableDebugWireframe&&i.debugWireframe,this._pickId=n.pickId,this._commandListTerrain=[],this._commandList3DTiles=[],this._commandListIgnoreShow=[],this._commandListDebugWireframe=[],this._commandListTerrainPicking=[],this._commandList3DTilesPicking=[],LYe(this)}function SYe(e){return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:!0,frontFunction:e,frontOperation:{fail:ft.KEEP,zFail:ft.DECREMENT_WRAP,zPass:ft.KEEP},backFunction:e,backOperation:{fail:ft.KEEP,zFail:ft.INCREMENT_WRAP,zPass:ft.KEEP},reference:kt.CESIUM_3D_TILE_MASK,mask:kt.CESIUM_3D_TILE_MASK},stencilMask:kt.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:lc.LESS_OR_EQUAL},depthMask:!1}}var CYe={stencilTest:{enabled:!0,frontFunction:On.NOT_EQUAL,frontOperation:{fail:ft.ZERO,zFail:ft.ZERO,zPass:ft.ZERO},backFunction:On.NOT_EQUAL,backOperation:{fail:ft.ZERO,zFail:ft.ZERO,zPass:ft.ZERO},reference:0,mask:kt.CLASSIFICATION_MASK},stencilMask:kt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:un.PRE_MULTIPLIED_ALPHA_BLEND},VYe={stencilTest:{enabled:!0,frontFunction:On.NOT_EQUAL,frontOperation:{fail:ft.ZERO,zFail:ft.ZERO,zPass:ft.ZERO},backFunction:On.NOT_EQUAL,backOperation:{fail:ft.ZERO,zFail:ft.ZERO,zPass:ft.ZERO},reference:0,mask:kt.CLASSIFICATION_MASK},stencilMask:kt.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1},gce=[];function LYe(e){let t=e._command,n=gce;if(e._useDebugWireframe){t.pass=Xe.OPAQUE,n.length=0,n.push(t),e._commandListDebugWireframe=Zw(e,n,e._commandListDebugWireframe);let r=e._commandListDebugWireframe,s=r.length;for(let a=0;as||o<-s&&r>-s}function d1(e,t){if(!c(t))return;let n=yb.clone(t),i=et.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 wYe(e){d1(e,e._originalCommand),d1(e,e._translucentCommand),d1(e,e._skipLodBackfaceCommand),d1(e,e._skipLodStencilCommand),d1(e,e._silhouetteModelCommand),d1(e,e._silhouetteColorCommand)}function PYe(e){let t=et.shallowClone(e);t.pass=Xe.TRANSLUCENT;let n=He(e.renderState,!0);return n.cull.enabled=!1,n.depthMask=!1,n.blending=un.ALPHA_BLEND,t.renderState=Oe.fromCache(n),t}function vYe(e,t){let n=t._silhouetteId%255,i=et.shallowClone(e),o=He(e.renderState,!0);return o.stencilTest={enabled:!0,frontFunction:oe.ALWAYS,backFunction:oe.ALWAYS,reference:n,mask:-1,frontOperation:{fail:oe.KEEP,zFail:oe.KEEP,zPass:oe.REPLACE},backOperation:{fail:oe.KEEP,zFail:oe.KEEP,zPass:oe.REPLACE}},t.isInvisible()&&(o.colorMask={red:!1,green:!1,blue:!1,alpha:!1}),i.renderState=Oe.fromCache(o),i}function FYe(e,t){let n=t._silhouetteId%255,i=et.shallowClone(e),o=He(e.renderState,!0);o.cull.enabled=!1,(e.pass===Xe.TRANSLUCENT||t.silhouetteColor.alpha<1)&&(i.pass=Xe.TRANSLUCENT,o.depthMask=!1,o.blending=un.ALPHA_BLEND),o.stencilTest={enabled:!0,frontFunction:oe.NOTEQUAL,backFunction:oe.NOTEQUAL,reference:n,mask:-1,frontOperation:{fail:oe.KEEP,zFail:oe.KEEP,zPass:oe.KEEP},backOperation:{fail:oe.KEEP,zFail:oe.KEEP,zPass:oe.KEEP}};let s=He(e.uniformMap);return s.model_silhouettePass=function(){return!0},i.renderState=Oe.fromCache(o),i.uniformMap=s,i.castShadows=!1,i.receiveShadows=!1,i}function AYe(e,t,n){let i=e._skipLodStencilCommand,o=i.command,r=t._selectionDepth,s=MYe(o);if(r!==s){let a=NYe(r),l=He(o.renderState,!0);l.stencilTest.reference=a,o.renderState=Oe.fromCache(l),n&&(i.derivedCommand2D.renderState=l)}}function MYe(e){return(e.renderState.stencilTest.reference&kt.SKIP_LOD_MASK)>>>kt.SKIP_LOD_BIT_SHIFT}function NYe(e){return kt.CESIUM_3D_TILE_MASK|e<0&&(f=er(n,t,a),t+=a,l>0&&(p=new Uint8Array(e,t,l),t+=l));let y=new of(d,u),h=y.getGlobalProperty("POINTS_LENGTH");if(y.featuresLength=h,!c(h))throw new le("Feature table global property: POINTS_LENGTH must be defined");let g=y.getGlobalProperty("RTC_CENTER",q.FLOAT,3);c(g)&&(g=m.unpack(g));let x=sHe(y,f);if(x.rtcCenter=g,x.pointsLength=h,!x.hasPositions){let S=aHe(y);x.positions=S,x.hasPositions=x.hasPositions||c(S)}if(!x.hasPositions)throw new le("Either POSITION or POSITION_QUANTIZED must be defined.");if(!x.hasNormals){let S=lHe(y);x.normals=S,x.hasNormals=x.hasNormals||c(S)}if(!x.hasColors){let S=cHe(y);x.colors=S,x.hasColors=x.hasColors||c(S),x.hasConstantColor=c(x.constantColor),x.isTranslucent=c(S)&&S.isTranslucent}if(!x.hasBatchIds){let S=dHe(y);x.batchIds=S,x.hasBatchIds=x.hasBatchIds||c(S)}if(x.hasBatchIds){let S=y.getGlobalProperty("BATCH_LENGTH");if(!c(S))throw new le("Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.");x.batchLength=S}return c(p)&&(p=new Uint8Array(p),x.batchTableJson=f,x.batchTableBinary=p),x};function sHe(e,t){let n=e.json,i,o,r,s=c(n.extensions)?n.extensions["3DTILES_draco_point_compression"]:void 0,a=c(t)&&c(t.extensions)?t.extensions["3DTILES_draco_point_compression"]:void 0;c(a)&&(r=a.properties);let l,d,u,f,p;if(c(s)){o=s.properties;let h=s.byteOffset,g=s.byteLength;if(!c(o)||!c(h)||!c(g))throw new le("Draco properties, byteOffset, and byteLength must be defined");i=e.buffer.slice(h,h+g),l=c(o.POSITION),d=c(o.RGB)||c(o.RGBA),u=c(o.NORMAL),f=c(o.BATCH_ID),p=c(o.RGBA)}let y;return c(i)&&(y={buffer:i,featureTableProperties:o,batchTableProperties:r,properties:St(o,r),dequantizeInShader:!0}),{draco:y,hasPositions:l,hasColors:d,isTranslucent:p,hasNormals:u,hasBatchIds:f}}function aHe(e){let t=e.json,n;if(c(t.POSITION))return n=e.getPropertyArray("POSITION",q.FLOAT,3),{name:pt.POSITION,semantic:pt.POSITION,typedArray:n,isQuantized:!1,componentDatatype:q.FLOAT,type:rn.VEC3};if(c(t.POSITION_QUANTIZED)){n=e.getPropertyArray("POSITION_QUANTIZED",q.UNSIGNED_SHORT,3);let i=e.getGlobalProperty("QUANTIZED_VOLUME_SCALE",q.FLOAT,3);if(!c(i))throw new le("Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.");let o=65535,r=e.getGlobalProperty("QUANTIZED_VOLUME_OFFSET",q.FLOAT,3);if(!c(r))throw new le("Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.");return{name:pt.POSITION,semantic:pt.POSITION,typedArray:n,isQuantized:!0,componentDatatype:q.FLOAT,type:rn.VEC3,quantizedRange:o,quantizedVolumeOffset:m.unpack(r),quantizedVolumeScale:m.unpack(i),quantizedComponentDatatype:q.UNSIGNED_SHORT,quantizedType:rn.VEC3}}}function cHe(e){let t=e.json,n;if(c(t.RGBA))return n=e.getPropertyArray("RGBA",q.UNSIGNED_BYTE,4),{name:pt.COLOR,semantic:pt.COLOR,setIndex:0,typedArray:n,componentDatatype:q.UNSIGNED_BYTE,type:rn.VEC4,normalized:!0,isRGB565:!1,isTranslucent:!0};if(c(t.RGB))return n=e.getPropertyArray("RGB",q.UNSIGNED_BYTE,3),{name:"COLOR",semantic:pt.COLOR,setIndex:0,typedArray:n,componentDatatype:q.UNSIGNED_BYTE,type:rn.VEC3,normalized:!0,isRGB565:!1,isTranslucent:!1};if(c(t.RGB565))return n=e.getPropertyArray("RGB565",q.UNSIGNED_SHORT,1),{name:"COLOR",semantic:pt.COLOR,setIndex:0,typedArray:n,componentDatatype:q.FLOAT,type:rn.VEC3,normalized:!1,isRGB565:!0,isTranslucent:!1};if(c(t.CONSTANT_RGBA)){let i=e.getGlobalProperty("CONSTANT_RGBA",q.UNSIGNED_BYTE,4),o=i[3],r=Y.fromBytes(i[0],i[1],i[2],o),s=o<255;return{name:pt.COLOR,semantic:pt.COLOR,setIndex:0,constantColor:r,componentDatatype:q.FLOAT,type:rn.VEC4,isQuantized:!1,isTranslucent:s}}}function lHe(e){let t=e.json,n;if(c(t.NORMAL))return n=e.getPropertyArray("NORMAL",q.FLOAT,3),{name:pt.NORMAL,semantic:pt.NORMAL,typedArray:n,octEncoded:!1,octEncodedZXY:!1,componentDatatype:q.FLOAT,type:rn.VEC3};if(c(t.NORMAL_OCT16P))return n=e.getPropertyArray("NORMAL_OCT16P",q.UNSIGNED_BYTE,2),{name:pt.NORMAL,semantic:pt.NORMAL,typedArray:n,octEncoded:!0,octEncodedZXY:!1,quantizedRange:(1<<8)-1,quantizedType:rn.VEC2,quantizedComponentDatatype:q.UNSIGNED_BYTE,componentDatatype:q.FLOAT,type:rn.VEC3}}function dHe(e){let t=e.json;if(c(t.BATCH_ID)){let n=e.getPropertyArray("BATCH_ID",q.UNSIGNED_SHORT,1);return{name:pt.FEATURE_ID,semantic:pt.FEATURE_ID,setIndex:0,typedArray:n,componentDatatype:q.fromTypedArray(n),type:rn.SCALAR}}}var I_=Lce;var uHe=Cn.Components,mHe=Cn.Scene,fHe=Cn.Node,hHe=Cn.Primitive,pHe=Cn.Attribute,Zce=Cn.Quantization,bHe=Cn.FeatureIdAttribute,yHe=Cn.Material,gHe=Cn.MetallicRoughness;function Py(e){e=e??z.EMPTY_OBJECT;let t=e.arrayBuffer,n=e.byteOffset??0;C.typeOf.object("options.arrayBuffer",t),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=xt.UNLOADED,this._buffers=[],this._components=void 0,this._transform=M.IDENTITY}c(Object.create)&&(Py.prototype=Object.create(Ji.prototype),Py.prototype.constructor=Py);Object.defineProperties(Py.prototype,{cacheKey:{get:function(){}},components:{get:function(){return this._components}},transform:{get:function(){return this._transform}}});Py.prototype.load=function(){if(c(this._promise))return this._promise;this._parsedContent=I_.parse(this._arrayBuffer,this._byteOffset),this._state=xt.PROCESSING,this._promise=Promise.resolve(this)};Py.prototype.process=function(e){if(c(this._error)){let t=this._error;throw this._error=void 0,t}if(this._state===xt.READY)return!0;if(this._state===xt.PROCESSING){if(c(this._decodePromise))return!1;this._decodePromise=xHe(this,e.context)}return!1};function xHe(e,t){let i=e._parsedContent.draco,o;if(c(i)?o=eb.decodePointCloud(i,t):o=Promise.resolve(),!!c(o))return e._decodePromise=o,o.then(function(r){if(!e.isDestroyed())return c(r)&&_He(e,i,r),IHe(e,t),e._state=xt.READY,e}).catch(function(r){e.unload(),e._state=xt.FAILED;let s="Failed to load Draco pnts";e._error=e.getError(s,r)})}function _He(e,t,n){e._state=xt.READY;let i=e._parsedContent,o;if(c(n.POSITION)){if(o={name:"POSITION",semantic:pt.POSITION,typedArray:n.POSITION.array,componentDatatype:q.FLOAT,type:rn.VEC3,isQuantized:!1},c(n.POSITION.data.quantization)){let a=n.POSITION.data.quantization,l=a.range,d=m.fromElements(l,l,l),u=m.unpack(a.minValues),f=(1<0&&WHe(e,a,f,t),c(n.rtcCenter)&&(u.transform=M.multiplyByTranslation(u.transform,n.rtcCenter,u.transform));let p=n.positions;c(p)&&p.isQuantized&&(u.transform=M.multiplyByTranslation(u.transform,p.quantizedVolumeOffset,u.transform)),e._components=u,e._parsedContent=void 0,e._arrayBuffer=void 0}function WHe(e,t,n,i){let o=t.attributes,r=n.length;for(let s=0;s=0&&(a=_e)}}}}if(a!==Number.MAX_VALUE){if(s=bn.getPoint(t,a,s),n.mode!==se.SCENE3D){m.fromElements(s.y,s.z,s.x,s);let u=n.mapProjection,f=u.ellipsoid,p=u.unproject(s,NHe);f.cartographicToCartesian(p,s)}return s}}function Az(e,t,n,i,o,r,s,a,l,d){let u=n+t*i;if(d.x=e[u],d.y=e[u+1],d.z=e[u+2],c(o))if(o.octEncoded){if(d=Fn.octDecodeInRange(d,o.normalizationRange,d),o.octEncodedZXY){let f=d.x;d.x=d.z,d.z=d.y,d.y=f}}else d=m.multiplyComponents(d,o.quantizedVolumeStepSize,d),d=m.add(d,o.quantizedVolumeOffset,d);return d=M.multiplyByPoint(r,d,d),s!==1&&Lr.getPosition(d,l,s,a,d),d}function ao(e){e=e??z.EMPTY_OBJECT,C.typeOf.object("options.loader",e.loader),C.typeOf.object("options.resource",e.resource),this._loader=e.loader,this._resource=e.resource,this.type=e.type??mr.GLTF,this.modelMatrix=M.clone(e.modelMatrix??M.IDENTITY),this._modelMatrix=M.clone(this.modelMatrix),this._scale=e.scale??1,this._minimumPixelSize=e.minimumPixelSize??0,this._maximumScale=e.maximumScale,this._clampedScale=c(this._maximumScale)?Math.min(this._scale,this._maximumScale):this._scale,this._computedScale=this._clampedScale,this._updateModelMatrix=!1,this.referenceMatrix=void 0,this._iblReferenceFrameMatrix=te.clone(te.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 iW(this),this._clampAnimations=e.clampAnimations??!0,this._userAnimationDirty=!1,this._id=e.id,this._idDirty=!1,this._color=Y.clone(e.color),this._colorBlendMode=e.colorBlendMode??bc.HIGHLIGHT,this._colorBlendAmount=e.colorBlendAmount??.5;let t=e.silhouetteColor??Y.RED;this._silhouetteColor=Y.clone(t),this._silhouetteSize=e.silhouetteSize??0,this._silhouetteDirty=!1,this._silhouetteId=void 0,this._cull=e.cull??!0,this._opaquePass=e.opaquePass??Xe.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??ze.NONE,this._heightDirty=this._heightReference!==ze.NONE,this._removeUpdateHeightCallback=void 0,this._enableVerticalExaggeration=e.enableVerticalExaggeration??!0,this._hasVerticalExaggeration=!1,this._clampedModelMatrix=void 0;let o=e.scene;c(o)&&c(o.terrainProviderChanged)&&(this._terrainProviderChangedCallback=o.terrainProviderChanged.addEventListener(()=>{this._heightDirty=!0})),this._scene=o,this._distanceDisplayCondition=e.distanceDisplayCondition;let r=new Vh(e.pointCloudShading);this._pointCloudShading=r,this._attenuation=r.attenuation,this._pointCloudBackFaceCulling=r.backFaceCulling;let s=e.clippingPlanes;c(s)&&s.owner===void 0?hs.setOwner(s,this,"_clippingPlanes"):this._clippingPlanes=s,this._clippingPlanesState=0,this._clippingPlanesMatrix=M.clone(M.IDENTITY);let a=e.clippingPolygons;c(a)&&a.owner===void 0?qm.setOwner(a,this,"_clippingPolygons"):this._clippingPolygons=a,this._clippingPolygonsState=0,this._lightColor=m.clone(e.lightColor),this._imageBasedLighting=c(e.imageBasedLighting)?e.imageBasedLighting:new $x,this._shouldDestroyImageBasedLighting=!c(e.imageBasedLighting),this._environmentMapManager=void 0;let l=new sb(e.environmentMapOptions);sb.setOwner(l,this,"_environmentMapManager"),this._backFaceCulling=e.backFaceCulling??!0,this._backFaceCullingDirty=!1,this._shadows=e.shadows??Sn.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===mr.GLTF&&ht("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 Ct(d)),this._credits=[],this._credit=d,this._resourceCredits=[],this._gltfCredits=[],this._showCreditsOnScreen=e.showCreditsOnScreen??!1,this._showCreditsOnScreenDirty=!0,this._splitDirection=e.splitDirection??Ar.NONE,this._enableShowOutline=e.enableShowOutline??!0,this.showOutline=e.showOutline??!0,this.outlineColor=e.outlineColor??Y.BLACK,this._classificationType=e.classificationType,this._statistics=new ww,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 ye,this._readyEvent=new ye,this._texturesReadyEvent=new ye,this._sceneGraph=void 0,this._nodesByName={},this.pickObject=e.pickObject}function Mz(e,t){if(e._errorEvent.numberOfListeners>0){e._errorEvent.raiseEvent(t);return}console.log(t)}function UHe(e,t){let n=e._featureTables,i=t.propertyTables,o=i.length;for(let r=0;r0&&t===0||e===0&&t>0;this._silhouetteDirty=this._silhouetteDirty||n,this._backFaceCullingDirty=this._backFaceCullingDirty||n}this._silhouetteSize=e}},boundingSphere:{get:function(){if(!this._ready)throw new L("The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.");let e=c(this._clampedModelMatrix)?this._clampedModelMatrix:this.modelMatrix;return Ice(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===mr.GLTF&&ht("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}`),C.typeOf.string("value",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}`),C.typeOf.string("value",e),e!==this._instanceFeatureIdLabel&&(this._featureTableIdDirty=!0),this._instanceFeatureIdLabel=e}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){e!==this._clippingPlanes&&(hs.setOwner(e,this,"_clippingPlanes"),this.resetDrawCommands())}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){e!==this._clippingPolygons&&(qm.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}},lightColor:{get:function(){return this._lightColor},set:function(e){c(e)!==c(this._lightColor)&&this.resetDrawCommands(),this._lightColor=m.clone(e,this._lightColor)}},imageBasedLighting:{get:function(){return this._imageBasedLighting},set:function(e){C.typeOf.object("imageBasedLighting",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){C.typeOf.object("environmentMapManager",e),e!==this.environmentMapManager&&(sb.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}}});ao.prototype.getNode=function(e){if(!this._ready)throw new L("The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.");return C.typeOf.string("name",e),this._nodesByName[e]};ao.prototype.setArticulationStage=function(e,t){if(C.typeOf.number("value",t),!this._ready)throw new L("The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.");this._sceneGraph.setArticulationStage(e,t)};ao.prototype.applyArticulations=function(){if(!this._ready)throw new L("The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.");this._sceneGraph.applyArticulations()};ao.prototype.getExtension=function(e){if(C.typeOf.string("extensionName",e),!this._ready)throw new L("The model is not loaded. Use Model.readyEvent or wait for Model.ready to be true.");return this._loader.components.extensions[e]};ao.prototype.makeStyleDirty=function(){this._styleDirty=!0};ao.prototype.resetDrawCommands=function(){this._drawCommandsBuilt=!1};var DHe=new M,BHe=new te,YHe=new M;ao.prototype.update=function(e){let t=!1;try{t=HHe(this,e)}catch(n){if(!this._loader.incrementallyLoadTextures&&n.name==="TextureError")Mz(this,n);else{let i=qt.getError("model",this._resource,n);Mz(this,i)}}if(zHe(this,e),KHe(this,e),JHe(this,e),!this._resourcesLoaded&&t){this._resourcesLoaded=!0;let n=this._loader.components;if(!c(n)){if(this._loader.isUnloaded())return;let r=qt.getError("model",this._resource,new le("Failed to load model."));Mz(r),this._rejectLoad=this._rejectLoad&&this._rejectLoad(r)}let i=n.structuralMetadata;c(i)&&i.propertyTableCount>0&&UHe(this,i);let o=new Ww({model:this,modelComponents:n});this._sceneGraph=o,this._gltfCredits=o.components.asset.credits}if(!(!this._resourcesLoaded||e.mode===se.MORPHING)){if(QHe(this),jHe(this),qHe(this,e),$He(this),eze(this,e),tze(this,e),nze(this,e),ize(this,e),oze(this,e),rze(this,e),sze(this,e),this._defaultTexture=e.context.defaultTexture,aze(this,e),cze(this,e),lze(this),dze(this,e),hze(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)),mze(this),pze(this,e),bze(this),yze(this,e)}};function HHe(e,t){return!e._resourcesLoaded||e._loader.incrementallyLoadTextures&&!e._texturesLoaded?(t.afterRender.push(()=>!0),e._loader.process(t)):!0}function zHe(e,t){c(e._customShader)&&e._customShader.update(t)}function KHe(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=!c(e._imageBasedLighting.sphericalHarmonicCoefficients)||!c(e._imageBasedLighting.specularEnvironmentMaps),n.update(t),n.shouldRegenerateShaders&&e.resetDrawCommands())}function JHe(e,t){e._imageBasedLighting.update(t),e._imageBasedLighting.shouldRegenerateShaders&&e.resetDrawCommands()}function QHe(e){if(!e._featureTableIdDirty)return;e._featureTableIdDirty=!1;let t=e._sceneGraph.components,n=t.structuralMetadata;c(n)&&n.propertyTableCount>0&&(e.featureTableId=OHe(t,e),e._styleDirty=!0,e.resetDrawCommands())}function jHe(e){e._styleDirty&&(e.applyStyle(e._style),e._styleDirty=!1)}function qHe(e,t){let n=e._featureTables,i=n.length,o=!1;for(let r=0;r=i.height&&(i.height=n.height):lC(e.heightReference)&&(i.height+=n.height),t.cartographicToCartesian(i,fk);let o=e._clampedModelMatrix;M.clone(e.modelMatrix,o),o[12]=fk.x,o[13]=fk.y,o[14]=fk.z,e._heightDirty=!0}}var xze=new m;function _ze(e,t){let n=e.distanceDisplayCondition;if(!c(n))return!0;let i=n.near*n.near,o=n.far*n.far,r;if(t.mode===se.SCENE2D){let a=(t.camera.frustum.right-t.camera.frustum.left)*.5;r=a*a}else{let s=M.getTranslation(e.modelMatrix,xze);Oi.computeActualEllipsoidPosition(t,s,s),r=m.distanceSquared(s,t.camera.positionWC)}return r>=i&&r<=o}function Tze(e,t){let n=t.creditDisplay,i=e._credits,o=i.length;for(let r=0;r0&&e.alpha<1};ao.prototype.isInvisible=function(){let e=this.color;return c(e)&&e.alpha===0};function Wce(e){return e.context.stencilBuffer}ao.prototype.hasSilhouette=function(e){return Wce(e)&&this._silhouetteSize>0&&this._silhouetteColor.alpha>0&&!c(this._classificationType)};ao.prototype.hasSkipLevelOfDetail=function(e){if(!mr.is3DTiles(this.type))return!1;let t=e.context.stencilBuffer,n=this._content.tileset;return t&&n.isSkippingLevelOfDetail};ao.prototype.isClippingEnabled=function(){let e=this._clippingPlanes;return c(e)&&e.enabled&&e.length!==0};ao.prototype.pick=function(e,t,n,i,o){return m1(this,e,t,n,i,o)};ao.prototype.isClippingPolygonsEnabled=function(){let e=this._clippingPolygons;return c(e)&&e.enabled&&e.length!==0};ao.prototype.isDestroyed=function(){return!1};ao.prototype.destroy=function(){let e=this._loader;c(e)&&e.destroy();let t=this._featureTables;if(c(t)){let r=t.length;for(let s=0;s0,i=c(this.structuralMetadata)?this.structuralMetadata.propertyAttributes:void 0,o=c(i)&&c(i[0]);if(t&&(!n||o)){this.resetDrawCommands();return}n?(this.featureTables[this.featureTableId].applyStyle(e),Xce(this,e)):(this.applyColorAndShow(e),this._styleCommandsNeeded=void 0)};function Fw(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 af=ao;function Or(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(Or.prototype,{featuresLength:{get:function(){let e=this._model,t=e.featureTables,n=e.featureTableId;return c(t)&&c(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(c(t)&&c(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}}});Or.prototype.getTextureIds=function(){return this._model.statistics.getTextureIds()};Or.prototype.getTextureByteLengthById=function(e){return this._model.statistics.getTextureByteLengthById(e)};Or.prototype.getExtension=function(e){return this._model.getExtension(e)};Or.prototype.getFeature=function(e){let t=this._model,n=t.featureTableId;if(!c(n))throw new L("No feature ID set is selected. Make sure Cesium3DTileset.featureIdLabel or Cesium3DTileset.instanceFeatureIdLabel is defined");let i=t.featureTables[n];if(!c(i))throw new L("No feature table found for the selected feature ID set");let o=i.featuresLength;if(!c(e)||e<0||e>=o)throw new L(`featureId is required and must be between 0 and featuresLength - 1 (${o-1}).`);return i.getFeature(e)};Or.prototype.hasProperty=function(e,t){let n=this._model,i=n.featureTableId;return c(i)?n.featureTables[i].hasProperty(e,t):!1};Or.prototype.applyDebugSettings=function(e,t){t=e?t:Y.WHITE,this.featuresLength===0?this._model.color=t:c(this.batchTable)&&this.batchTable.setAllColor(t)};Or.prototype.applyStyle=function(e){this._model.style=e};Or.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,c(o)&&i.clippingPlanesDirty&&(n._clippingPlanes=o.enabled&&i._isClipped?o:void 0);let r=e.environmentMapManager;n.environmentMapManager!==o&&(n._environmentMapManager=r),c(o)&&c(n._clippingPlanes)&&n._clippingPlanes!==o&&(n._clippingPlanes=o,n._clippingPlanesState=0);let s=e.clippingPolygons;c(s)&&i.clippingPolygonsDirty&&(n._clippingPolygons=s.enabled&&i._isClippedByPolygon?s:void 0),c(s)&&c(n._clippingPolygons)&&n._clippingPolygons!==s&&(n._clippingPolygons=s,n._clippingPolygonsState=0),n.update(t),!this._ready&&n.ready&&(n.activeAnimations.addAll({loop:Al.REPEAT}),this._ready=!0)};Or.prototype.isDestroyed=function(){return!1};Or.prototype.destroy=function(){return this._model=this._model&&this._model.destroy(),he(this)};Or.fromGltf=async function(e,t,n,i){let o=new Or(e,t,n),s=Aw(e,t,o,{gltf:i,basePath:n}),a=e.vectorClassificationOnly?void 0:e.classificationType;s.classificationType=a;let l=await af.fromGltfAsync(s);return o._model=l,o};Or.fromB3dm=async function(e,t,n,i,o){let r=new Or(e,t,n),a=Aw(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),l=e.vectorClassificationOnly?void 0:e.classificationType;a.classificationType=l;let d=await af.fromB3dm(a);return r._model=d,r};Or.fromI3dm=async function(e,t,n,i,o){let r=new Or(e,t,n),a=Aw(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),l=await af.fromI3dm(a);return r._model=l,r};Or.fromPnts=async function(e,t,n,i,o){let r=new Or(e,t,n),a=Aw(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),l=await af.fromPnts(a);return r._model=l,r};Or.fromGeoJson=async function(e,t,n,i){let o=new Or(e,t,n),s=Aw(e,t,o,{geoJson:i,resource:n}),a=await af.fromGeoJson(s);return o._model=a,o};Or.prototype.pick=function(e,t,n){if(!c(this._model)||!this._ready)return;let i=t.verticalExaggeration,o=t.verticalExaggerationRelativeHeight;return this._model.pick(e,t,i,o,re.WGS84,n)};function Aw(e,t,n,i){let o={cull:!1,releaseGltfJson:!0,opaquePass:Xe.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 St(i,o)}var Rd=Or;var a5n=_(T(),1);function Au(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(Au.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}}});Au.fromJson=function(e,t,n,i){let o=new Au(e,t,n);return o._tileset.loadTileset(o._resource,i,o._tile),o._ready=!0,o};Au.prototype.hasProperty=function(e,t){return!1};Au.prototype.getFeature=function(e){};Au.prototype.applyDebugSettings=function(e,t){};Au.prototype.applyStyle=function(e){};Au.prototype.update=function(e,t){};Au.prototype.pick=function(e,t,n){};Au.prototype.isDestroyed=function(){return!1};Au.prototype.destroy=function(){return he(this)};var Mw=Au;var f3n=_(T(),1);var pDn=_(T(),1);var Ikn=_(T(),1);var l5n=_(T(),1),Nw=`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; in vec4 v_originTextureCoordinateAndTranslate; in vec4 v_compressed; 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)); vec2 translation = v_originTextureCoordinateAndTranslate.zw; if (applyTranslate) { 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; } vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); return eyeCoordinate.z / eyeCoordinate.w; } #endif #ifdef SDF float getDistance(vec2 position) { return texture(u_atlas, position).r; } vec4 getSDFColor(vec2 position, float outlineWidth, vec4 outlineColor, float smoothing) { float distance = getDistance(position); if (outlineWidth > 0.0) { 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; float distance = getDistance(v_textureCoordinates); #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) float smoothing = fwidth(distance); vec2 sampleOffset = 0.354 * vec2(dFdx(v_textureCoordinates) + dFdy(v_textureCoordinates)); vec4 center = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing); 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); color = (center + color1 + color2 + color3 + color4)/5.0; #else 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 #if !defined(OPAQUE) && !defined(TRANSLUCENT) if (color.a < 0.005) { discard; } #else #ifdef OPAQUE if (color.a < 0.995) { discard; } #else if (color.a >= 0.995) { 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); if (globeDepth1 != 0.0 && globeDepth1 > epsilonEyeDepth) { float globeDepth2 = getGlobeDepth(adjustedST, vec2(0.0, 1.0), applyTranslate, dimensions, imageSize); if (globeDepth2 != 0.0 && globeDepth2 > epsilonEyeDepth) { float globeDepth3 = getGlobeDepth(adjustedST, vec2(1.0, 1.0), applyTranslate, dimensions, imageSize); if (globeDepth3 != 0.0 && globeDepth3 > epsilonEyeDepth) { discard; } } } } #endif } `;var u5n=_(T(),1),kw=`#ifdef INSTANCED in vec2 direction; #endif in vec4 positionHighAndScale; in vec4 positionLowAndRotation; in vec4 compressedAttribute0; in vec4 compressedAttribute1; in vec4 compressedAttribute2; in vec4 eyeOffset; in vec4 scaleByDistance; in vec4 pixelOffsetScaleByDistance; in vec4 compressedAttribute3; in vec2 sdf; in float splitDirection; #if defined(VERTEX_DEPTH_CHECK) || defined(FRAGMENT_DEPTH_CHECK) in vec4 textureCoordinateBoundsOrLabelTranslate; #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; 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) { 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; } vec4 eyeCoordinate = czm_windowToEyeCoordinates(posWC.xy, globeDepth); return eyeCoordinate.z / eyeCoordinate.w; } #endif void main() { 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) { 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) { 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; if (scale == 0.0) { positionEC.xyz = vec3(0.0); } #endif float translucency = 1.0; #ifdef EYE_DISTANCE_TRANSLUCENCY translucency = czm_nearFarScalar(translucencyByDistance, lengthSq); 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) { 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))) { 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 D5n=_(T(),1);var g5n=_(T(),1);var f5n=_(T(),1),Cze=Object.freeze({NONE:0,LOADING:2,LOADED:3,ERROR:4,FAILED:5}),is=Cze;function gb(e){C.defined("billboardCollection",e),this._billboardCollection=e,this._id=void 0,this._loadState=is.NONE,this._loadError=void 0,this._index=-1,this._width=void 0,this._height=void 0,this._hasSubregion=!1,this.dirty=!1}Object.defineProperties(gb.prototype,{loadError:{get:function(){return this._loadError}},loadState:{get:function(){return this._loadState}},ready:{get:function(){return this._loadState===is.LOADED}},hasImage:{get:function(){return this._loadState!==is.NONE}},id:{get:function(){return this._id}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});gb.prototype.unload=async function(){this._loadState!==is.NONE&&(this._id=void 0,this._loadError=void 0,this._loadState=is.NONE,this._index=-1,this._width=void 0,this._height=void 0,this.dirty=!0)};gb.prototype.loadImage=async function(e,t){if(this._id===e)return;let n=this._billboardCollection,i=n.billboardTextureCache,o=i.get(e);if(c(o)&&t.loadState===is.LOADING||t.loadState===is.LOADED){gb.clone(o,this);return}c(o)||(o=new gb(n),i.set(e,o)),o._id=this._id=e,o._loadState=this._loadState=is.LOADING,o._loadError=this._loadError=void 0;let r,s=this._billboardCollection.textureAtlas;try{r=await s.addImage(e,t)}catch(l){if(o._loadState=is.ERROR,o._loadError=l,this._id!==e)return;this._loadState=is.ERROR,this._loadError=l;return}if(!c(r)||r===-1){if(o._loadState=is.FAILED,o._index=-1,this._id!==e)return;this._loadState=is.FAILED,this._index=-1;return}o._index=r,o._loadState=is.LOADED;let a=s.rectangles[r];o._width=a.width,o._height=a.height,this._id===e&&(this._index=r,this._loadState=is.LOADED,this._width=a.width,this._height=a.height,this.dirty=!0)};gb.prototype.addImageSubRegion=async function(e,t){this._id=e,this._loadState=is.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=is.ERROR,this._loadError=o;return}if(!c(n)||n===-1){this._loadState=is.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=is.LOADED,this.dirty=!0};gb.prototype.computeTextureCoordinates=function(e){return this._billboardCollection.textureAtlas.computeTextureCoordinates(this._index,e)};gb.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 xb=gb;function pi(e,t){if(e=e??z.EMPTY_OBJECT,c(e.disableDepthTestDistance)&&e.disableDepthTestDistance<0)throw new L("disableDepthTestDistance must be greater than or equal to 0.0.");let n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,o=e.scaleByDistance,r=e.distanceDisplayCondition;if(c(n)){if(n.far<=n.near)throw new L("translucencyByDistance.far must be greater than translucencyByDistance.near.");n=Nt.clone(n)}if(c(i)){if(i.far<=i.near)throw new L("pixelOffsetScaleByDistance.far must be greater than pixelOffsetScaleByDistance.near.");i=Nt.clone(i)}if(c(o)){if(o.far<=o.near)throw new L("scaleByDistance.far must be greater than scaleByDistance.near.");o=Nt.clone(o)}if(c(r)){if(r.far<=r.near)throw new L("distanceDisplayCondition.far must be greater than distanceDisplayCondition.near.");r=vt.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??ze.NONE,this._verticalOrigin=e.verticalOrigin??Mn.CENTER,this._horizontalOrigin=e.horizontalOrigin??xi.CENTER,this._scale=e.scale??1,this._color=Y.clone(e.color??Y.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 xb(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;c(s)&&(c(a)||(typeof s=="string"?a=s:c(s.src)?a=s.src:a=Hn()),this._imageTexture.loadImage(a,s)),c(e.imageSubRegion)&&this._imageTexture.addImageSubRegion(a,e.imageSubRegion),this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=se.SCENE3D,this._clusterShow=!0,this._outlineColor=Y.clone(e.outlineColor??Y.BLACK),this._outlineWidth=e.outlineWidth??0,this._updateClamping(),this._splitDirection=e.splitDirection??Ar.NONE}var wce=pi.SHOW_INDEX=0,pk=pi.POSITION_INDEX=1,Mce=pi.PIXEL_OFFSET_INDEX=2,Vze=pi.EYE_OFFSET_INDEX=3,Lze=pi.HORIZONTAL_ORIGIN_INDEX=4,Zze=pi.VERTICAL_ORIGIN_INDEX=5,Rze=pi.SCALE_INDEX=6,Pce=pi.IMAGE_INDEX_INDEX=7,vce=pi.COLOR_INDEX=8,Gze=pi.ROTATION_INDEX=9,Eze=pi.ALIGNED_AXIS_INDEX=10,Xze=pi.SCALE_BY_DISTANCE_INDEX=11,Ize=pi.TRANSLUCENCY_BY_DISTANCE_INDEX=12,Wze=pi.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX=13,wze=pi.DISTANCE_DISPLAY_CONDITION=14,Pze=pi.DISABLE_DEPTH_DISTANCE=15;pi.TEXTURE_COORDINATE_BOUNDS=16;var Fce=pi.SDF_INDEX=17,vze=pi.SPLIT_DIRECTION_INDEX=18;pi.NUMBER_OF_PROPERTIES=19;function ir(e,t){let n=e._billboardCollection;c(n)&&(n._updateBillboard(e,t),e._dirty=!0)}Object.defineProperties(pi.prototype,{show:{get:function(){return this._show},set:function(e){C.typeOf.bool("value",e),this._show!==e&&(this._show=e,ir(this,wce))}},position:{get:function(){return this._position},set:function(e){C.typeOf.object("value",e);let t=this._position;m.equals(t,e)||(m.clone(e,t),m.clone(e,this._actualPosition),this._updateClamping(),ir(this,pk))}},heightReference:{get:function(){return this._heightReference},set:function(e){C.typeOf.number("value",e);let t=this._heightReference;e!==t&&(this._heightReference=e,this._updateClamping(),ir(this,pk))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){C.typeOf.object("value",e);let t=this._pixelOffset;D.equals(t,e)||(D.clone(e,t),ir(this,Mce))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){if(c(e)&&(C.typeOf.object("value",e),e.far<=e.near))throw new L("far distance must be greater than near distance.");let t=this._scaleByDistance;Nt.equals(t,e)||(this._scaleByDistance=Nt.clone(e,t),ir(this,Xze))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){if(c(e)&&(C.typeOf.object("value",e),e.far<=e.near))throw new L("far distance must be greater than near distance.");let t=this._translucencyByDistance;Nt.equals(t,e)||(this._translucencyByDistance=Nt.clone(e,t),ir(this,Ize))}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){if(c(e)&&(C.typeOf.object("value",e),e.far<=e.near))throw new L("far distance must be greater than near distance.");let t=this._pixelOffsetScaleByDistance;Nt.equals(t,e)||(this._pixelOffsetScaleByDistance=Nt.clone(e,t),ir(this,Wze))}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){C.typeOf.object("value",e);let t=this._eyeOffset;m.equals(t,e)||(m.clone(e,t),ir(this,Vze))}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){C.typeOf.number("value",e),this._horizontalOrigin!==e&&(this._horizontalOrigin=e,ir(this,Lze))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){C.typeOf.number("value",e),this._verticalOrigin!==e&&(this._verticalOrigin=e,ir(this,Zze))}},scale:{get:function(){return this._scale},set:function(e){C.typeOf.number("value",e),this._scale!==e&&(this._scale=e,ir(this,Rze))}},color:{get:function(){return this._color},set:function(e){C.typeOf.object("value",e);let t=this._color;Y.equals(t,e)||(Y.clone(e,t),ir(this,vce))}},rotation:{get:function(){return this._rotation},set:function(e){C.typeOf.number("value",e),this._rotation!==e&&(this._rotation=e,ir(this,Gze))}},alignedAxis:{get:function(){return this._alignedAxis},set:function(e){C.typeOf.object("value",e);let t=this._alignedAxis;m.equals(t,e)||(m.clone(e,t),ir(this,Eze))}},width:{get:function(){return this._width??this._imageTexture.width},set:function(e){c(e)&&C.typeOf.number("width",e),this._width!==e&&(this._width=e,ir(this,Pce))}},height:{get:function(){return this._height??this._imageTexture.height},set:function(e){c(e)&&C.typeOf.number("height",e),this._height!==e&&(this._height=e,ir(this,Pce))}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){C.typeOf.bool("value",e),this._sizeInMeters!==e&&(this._sizeInMeters=e,ir(this,vce))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(!vt.equals(e,this._distanceDisplayCondition)){if(c(e)&&(C.typeOf.object("value",e),e.far<=e.near))throw new L("far distance must be greater than near distance.");this._distanceDisplayCondition=vt.clone(e,this._distanceDisplayCondition),ir(this,wze)}}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){if(c(e)&&(C.typeOf.number("value",e),e<0))throw new L("disableDepthTestDistance must be greater than or equal to 0.0.");this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,ir(this,Pze))}},id:{get:function(){return this._id},set:function(e){this._id=e,c(this._pickId)&&(this._pickId.object.id=e)}},pickPrimitive:{get:function(){return this._pickPrimitive},set:function(e){this._pickPrimitive=e,c(this._pickId)&&(this._pickId.object.primitive=e)}},pickId:{get:function(){return this._pickId}},image:{get:function(){return this._imageTexture.id},set:function(e){if(!c(e)){this._imageTexture.unload();return}let t;typeof e=="string"?t=e:e instanceof Ge?t=e._url:c(e.src)?t=e.src:t=Hn(),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),ir(this,pk)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,ir(this,wce))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){if(!c(e))throw new L("value is required.");let t=this._outlineColor;Y.equals(t,e)||(Y.clone(e,t),ir(this,Fce))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,ir(this,Fce))}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,ir(this,vze))}}});pi.prototype.getPickId=function(e){return c(this._pickId)||(this._pickId=e.createPickId({primitive:this._pickPrimitive,collection:this._collection,id:this._id})),this._pickId};pi.prototype._updateClamping=function(){pi._updateClamping(this._billboardCollection,this)};var Uw=new pe;pi._updateClamping=function(e,t){if(!c(e)||!c(e._scene)){if(t._heightReference!==ze.NONE)throw new L("Height reference is not supported without a scene.");return}let n=e._scene,i=n.ellipsoid??re.default,o=n.frameState.mode,r=o!==t._mode;if(t._mode=o,(t._heightReference===ze.NONE||r)&&c(t._removeCallbackFunc)&&(t._removeCallbackFunc(),t._removeCallbackFunc=void 0,t._clampedPosition=void 0),t._heightReference===ze.NONE||!c(t._position))return;c(t._removeCallbackFunc)&&t._removeCallbackFunc();let s=i.cartesianToCartographic(t._position);if(!c(s)){t._actualClampedPosition=void 0;return}function a(d){let u=i.cartographicToCartesian(d,t._clampedPosition);if(lC(t._heightReference))t._mode===se.SCENE3D?(d.height+=s.height,i.cartographicToCartesian(d,u)):u.x+=s.height;else if(t._heightReference===ze.CLIP_TO_GROUND)if(t._mode===se.SCENE3D){let f=i.cartesianToCartographic(d,Uw);s.height>=f.height&&(f.height=s.height),i.cartographicToCartesian(f,d)}else s.height>=d.x&&(d.x=s.height);t._clampedPosition=u}t._removeCallbackFunc=n.updateHeight(s,a,t._heightReference),pe.clone(s,Uw);let l=n.getHeight(s,t._heightReference);c(l)&&(Uw.height=l),a(Uw)};pi.prototype.computeTextureCoordinates=function(e){return this._imageTexture.computeTextureCoordinates(e)};pi.prototype.setImage=function(e,t){C.typeOf.string("id",e),C.defined("image",t),this._imageTexture.loadImage(e,t)};pi.prototype.setImageTexture=function(e){C.defined("billboardTexture",e),xb.clone(e,this._imageTexture)};pi.prototype.setImageSubRegion=function(e,t){C.typeOf.string("id",e),C.defined("subRegion",t),this._imageTexture.addImageSubRegion(e,t)};pi.prototype._setTranslate=function(e){if(!c(e))throw new L("value is required.");let t=this._translate;D.equals(t,e)||(D.clone(e,t),ir(this,Mce))};pi.prototype._getActualPosition=function(){return c(this._clampedPosition)?this._clampedPosition:this._actualPosition};pi.prototype._setActualPosition=function(e){c(this._clampedPosition)||m.clone(e,this._actualPosition),ir(this,pk)};var Ace=new ce;pi._computeActualPosition=function(e,t,n,i){return c(e._clampedPosition)?(n.mode!==e._mode&&e._updateClamping(),e._clampedPosition):n.mode===se.SCENE3D?t:(M.multiplyByPoint(i,t,Ace),Oi.computeActualEllipsoidPosition(n,Ace))};var Nce=new m;pi._computeScreenSpacePosition=function(e,t,n,i,o,r){let s=M.multiplyByPoint(e,t,Nce),a=Oi.worldWithEyeOffsetToWindowCoordinates(o,s,n,r);if(c(a))return D.add(a,i,a),a};var hk=new D(0,0);pi.prototype.computeScreenSpacePosition=function(e,t){let n=this._billboardCollection;if(c(t)||(t=new D),!c(n))throw new L("Billboard must be in a collection. Was it removed?");if(!c(e))throw new L("scene is required.");D.clone(this._pixelOffset,hk),D.add(hk,this._translate,hk);let i=n.modelMatrix,o=this._position;if(c(this._clampedPosition)&&(o=this._clampedPosition,e.mode!==se.SCENE3D)){let s=e.mapProjection,a=s.ellipsoid,l=s.unproject(o,Uw);o=a.cartographicToCartesian(l,Nce),i=M.IDENTITY}return pi._computeScreenSpacePosition(i,o,this._eyeOffset,hk,e,t)};pi.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===xi.RIGHT?s-=i:e.horizontalOrigin===xi.CENTER&&(s-=i*.5);let a=t.y;return e.verticalOrigin===Mn.BOTTOM||e.verticalOrigin===Mn.BASELINE?a-=o:e.verticalOrigin===Mn.CENTER&&(a-=o*.5),c(n)||(n=new je),n.x=s,n.y=a,n.width=i,n.height=o,n};pi.prototype.equals=function(e){return this===e||c(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&&Y.equals(this._color,e._color)&&D.equals(this._pixelOffset,e._pixelOffset)&&D.equals(this._translate,e._translate)&&m.equals(this._eyeOffset,e._eyeOffset)&&Nt.equals(this._scaleByDistance,e._scaleByDistance)&&Nt.equals(this._translucencyByDistance,e._translucencyByDistance)&&Nt.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&vt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._splitDirection===e._splitDirection};pi.prototype._destroy=function(){c(this._customData)&&(this._billboardCollection._scene.globe._surface.removeTileCustomData(this._customData),this._customData=void 0),c(this._removeCallbackFunc)&&(this._removeCallbackFunc(),this._removeCallbackFunc=void 0),this.image=void 0,this._pickId=this._pickId&&this._pickId.destroy(),this._billboardCollection=void 0};var co=pi;var Y5n=_(T(),1),Fze={OPAQUE:0,TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2},Lo=Object.freeze(Fze);var z5n=_(T(),1),Aze={FONT_SIZE:48,PADDING:10,RADIUS:8,CUTOFF:.25},Ys=Object.freeze(Aze);var Mze=co.SHOW_INDEX,Ow=co.POSITION_INDEX,kce=co.PIXEL_OFFSET_INDEX,Uce=co.EYE_OFFSET_INDEX,Nze=co.HORIZONTAL_ORIGIN_INDEX,kze=co.VERTICAL_ORIGIN_INDEX,Uze=co.SCALE_INDEX,W_=co.IMAGE_INDEX_INDEX,Oce=co.COLOR_INDEX,Oze=co.ROTATION_INDEX,Dze=co.ALIGNED_AXIS_INDEX,Dce=co.SCALE_BY_DISTANCE_INDEX,Bce=co.TRANSLUCENCY_BY_DISTANCE_INDEX,Yce=co.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX,Hce=co.DISTANCE_DISPLAY_CONDITION,Bze=co.DISABLE_DEPTH_DISTANCE,Yze=co.TEXTURE_COORDINATE_BOUNDS,zce=co.SDF_INDEX,Kce=co.SPLIT_DIRECTION_INDEX,Kz=co.NUMBER_OF_PROPERTIES,lo,Hze={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},zze={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 Nu(e){e=e??z.EMPTY_OBJECT,this._scene=e.scene,this._batchTable=e.batchTable;let t=e.textureAtlas;c(t)||(t=new Zx),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(Kz),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=M.clone(e.modelMatrix??M.IDENTITY),this._modelMatrix=M.clone(M.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowTextureAtlas=e.debugShowTextureAtlas??!1,this.blendOption=e.blendOption??Lo.OPAQUE_AND_TRANSLUCENT,this._blendOption=void 0,this._mode=se.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=Y.clone(Y.WHITE),this._uniforms={u_atlas:()=>this.textureAtlas.texture,u_highlightColor:()=>this._highlightColor};let n=this._scene;c(n)&&c(n.terrainProviderChanged)&&(this._removeCallbackFunc=n.terrainProviderChanged.addEventListener(function(){let i=this._billboards,o=i.length;for(let r=0;r0)&&(e._shaderDisableDepthDistance=!0,d===Number.POSITIVE_INFINITY&&(d=-1));let f,p;c(i._labelDimensions)?(p=i._labelDimensions.x,f=i._labelDimensions.y):(p=i.width??0,f=i.height??0);let y=Math.floor(w.clamp(p,0,Bz)),h=Math.floor(w.clamp(f,0,Bz)),g=y*Bz+h;e._instanced?(o=i._index,r(o,s,a,d,g)):(o=i._index*4,r(o+0,s,a,d,g),r(o+1,s,a,d,g),r(o+2,s,a,d,g),r(o+3,s,a,d,g))}function ale(e,t,n,i){if(Lu(i.heightReference)){let p=e._scene,y=t.context,h=t.globeTranslucencyState.translucent,g=c(p.globe)&&p.globe.depthTestAgainstTerrain;e._shaderClampToGround=y.depthTexture&&!h&&g}let o,r=n[lo.textureCoordinateBoundsOrLabelTranslate];if(mt.maximumVertexTextureImageUnits>0){let p=0,y=0;c(i._labelTranslate)&&(p=i._labelTranslate.x,y=i._labelTranslate.y),e._instanced?(o=i._index,r(o,p,y,0,0)):(o=i._index*4,r(o+0,p,y,0,0),r(o+1,p,y,0,0),r(o+2,p,y,0,0),r(o+3,p,y,0,0));return}let s=0,a=0,l=0,d=0;if(i.ready){let p=i.computeTextureCoordinates(Qz);s=p.x,a=p.y,l=p.width,d=p.height}let u=s+l,f=a+d;e._instanced?(o=i._index,r(o,s,a,u,f)):(o=i._index*4,r(o+0,s,a,u,f),r(o+1,s,a,u,f),r(o+2,s,a,u,f),r(o+3,s,a,u,f))}function nKe(e,t,n,i){if(!c(e._batchTable))return;let o=n[lo.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 cle(e,t,n,i){if(!e._sdf)return;let o,r=n[lo.sdf],s=i.outlineColor,a=i.outlineWidth,l=Y.floatToByte(s.red),d=Y.floatToByte(s.green),u=Y.floatToByte(s.blue),f=l*f1+d*Zh+u,p=a/Ys.RADIUS,y=Y.floatToByte(s.alpha)*f1+Y.floatToByte(p)*Zh;e._instanced?(o=i._index,r(o,f,y)):(o=i._index*4,r(o+0,f+qce,y),r(o+1,f+$ce,y),r(o+2,f+ele,y),r(o+3,f+tle,y))}function lle(e,t,n,i){let o=n[lo.splitDirection],r=0,s=i.splitDirection;c(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 iKe(e,t,n,i){Qce(e,t,n,i),nle(e,t,n,i),ile(e,t,n,i),Hz(e,t,n,i),zz(e,t,n,i),ole(e,t,n,i),rle(e,t,n,i),sle(e,t,n,i),ale(e,t,n,i),nKe(e,t,n,i),cle(e,t,n,i),lle(e,t,n,i)}function Yz(e,t,n,i,o,r){let s;i.mode===se.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;let a=[];for(let l=0;l{if(!this.isDestroyed())return r.update(e.context)}),!c(r.texture))return;oKe(this,e),n=this._billboards,i=n.length;let s=this._billboardsToUpdate,a=this._billboardsToUpdateIndex,l=this._propertiesChanged,d=r.guid,u=this._createVertexArray||this._textureAtlasGUID!==d;this._textureAtlasGUID=d;let f,p=e.passes,y=p.pick;if(u||!y&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(let P=0;P0){this._vaf=jze(t,i,this._buffersUsage,this._instanced,this._batchTable,this._sdf),f=this._vaf.writers;for(let P=0;P0){let P=aKe;P.length=0,(l[Ow]||l[Oze]||l[Uze])&&P.push(Qce),(l[W_]||l[kce]||l[Nze]||l[kze]||l[Mze])&&(P.push(nle),this._instanced&&P.push(zz)),(l[W_]||l[Dze]||l[Bce])&&(P.push(ile),P.push(Hz)),(l[W_]||l[Oce])&&P.push(Hz),(l[W_]||l[Uce])&&P.push(zz),l[Dce]&&P.push(ole),l[Yce]&&P.push(rle),(l[Hce]||l[Bze]||l[W_]||l[Ow])&&P.push(sle),(l[W_]||l[Ow])&&P.push(ale),l[zce]&&P.push(cle),l[Kce]&&P.push(lle);let F=P.length;if(f=this._vaf.writers,a/i>.1){for(let N=0;Ni*1.5&&(s.length=i),!c(this._vaf)||!c(this._vaf.va))return;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,ue.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let h,g=M.IDENTITY;e.mode===se.SCENE3D?(g=this.modelMatrix,h=ue.clone(this._baseVolumeWC,this._boundingVolume)):h=ue.clone(this._baseVolume2D,this._boundingVolume),rKe(this,e,h);let x=this._blendOption!==this.blendOption;if(this._blendOption=this.blendOption,x){this._blendOption===Lo.OPAQUE||this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=Oe.fromCache({depthTest:{enabled:!0,func:oe.LESS},depthMask:!0}):this._rsOpaque=void 0;let P=this._blendOption===Lo.TRANSLUCENT;this._blendOption===Lo.TRANSLUCENT||this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=Oe.fromCache({depthTest:{enabled:!0,func:P?oe.LEQUAL:oe.LESS},depthMask:P,blending:un.ALPHA_BLEND}):this._rsTranslucent=void 0}this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let S,V,Z,R,E,I=mt.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){S=kw,V=Nw,E=[],c(this._batchTable)&&(E.push("VECTOR_TILE"),S=this._batchTable.getVertexShaderCallback(!1,"a_batchId",void 0)(S),V=this._batchTable.getFragmentShaderCallback(!1,void 0)(V)),Z=new Be({defines:E,sources:[S]}),this._instanced&&Z.defines.push("INSTANCED"),this._shaderRotation&&Z.defines.push("ROTATION"),this._shaderAlignedAxis&&Z.defines.push("ALIGNED_AXIS"),this._shaderScaleByDistance&&Z.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&Z.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderPixelOffsetScaleByDistance&&Z.defines.push("EYE_DISTANCE_PIXEL_OFFSET"),this._shaderDistanceDisplayCondition&&Z.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&Z.defines.push("DISABLE_DEPTH_DISTANCE"),this._shaderClampToGround&&(I?Z.defines.push("VERTEX_DEPTH_CHECK"):Z.defines.push("FRAGMENT_DEPTH_CHECK"));let P=1-Ys.CUTOFF;this._sdf&&Z.defines.push("SDF");let F=c(this._batchTable)?"VECTOR_TILE":"";this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT&&(R=new Be({defines:["OPAQUE",F],sources:[V]}),this._shaderClampToGround&&(I?R.defines.push("VERTEX_DEPTH_CHECK"):R.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(R.defines.push("SDF"),R.defines.push(`SDF_EDGE ${P}`)),this._sp=tn.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:Z,fragmentShaderSource:R,attributeLocations:lo}),R=new Be({defines:["TRANSLUCENT",F],sources:[V]}),this._shaderClampToGround&&(I?R.defines.push("VERTEX_DEPTH_CHECK"):R.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(R.defines.push("SDF"),R.defines.push(`SDF_EDGE ${P}`)),this._spTranslucent=tn.replaceCache({context:t,shaderProgram:this._spTranslucent,vertexShaderSource:Z,fragmentShaderSource:R,attributeLocations:lo})),this._blendOption===Lo.OPAQUE&&(R=new Be({defines:[F],sources:[V]}),this._shaderClampToGround&&(I?R.defines.push("VERTEX_DEPTH_CHECK"):R.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(R.defines.push("SDF"),R.defines.push(`SDF_EDGE ${P}`)),this._sp=tn.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:Z,fragmentShaderSource:R,attributeLocations:lo})),this._blendOption===Lo.TRANSLUCENT&&(R=new Be({defines:[F],sources:[V]}),this._shaderClampToGround&&(I?R.defines.push("VERTEX_DEPTH_CHECK"):R.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(R.defines.push("SDF"),R.defines.push(`SDF_EDGE ${P}`)),this._spTranslucent=tn.replaceCache({context:t,shaderProgram:this._spTranslucent,vertexShaderSource:Z,fragmentShaderSource:R,attributeLocations:lo})),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 v=e.commandList;if(p.render||p.pick){let P=this._colorCommands,F=this._blendOption===Lo.OPAQUE,N=this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT,b=this._vaf.va,G=b.length,X=this._uniforms,W;c(this._batchTable)?(X=this._batchTable.getUniformMapCallback()(X),W=this._batchTable.getPickId()):W="v_pickColor",P.length=G;let A=N?G*2:G;for(let k=0;k0}},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){c(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,lKe);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=Y.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&&h1(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}}});ba.defaultColor=Y.WHITE;ba.defaultPointOutlineColor=Y.BLACK;ba.defaultPointOutlineWidth=0;ba.defaultPointSize=8;function h1(e){let t=e._billboard;if(c(e._billboardImage)&&e._billboardImage!==t.image){t.image=e._billboardImage;return}if(c(e._billboardImage))return;let n=e._color??ba.defaultColor,i=e._pointOutlineColor??ba.defaultPointOutlineColor,o=e._pointOutlineWidth??ba.defaultPointOutlineWidth,r=e._pointSize??ba.defaultPointSize,s=e._billboardColor,a=e._billboardOutlineColor,l=e._billboardOutlineWidth,d=e._billboardSize;if(Y.equals(n,s)&&Y.equals(i,a)&&o===l&&r===d)return;e._billboardColor=Y.clone(n,e._billboardColor),e._billboardOutlineColor=Y.clone(i,e._billboardOutlineColor),e._billboardOutlineWidth=o,e._billboardSize=r;let u=n.alpha,f=n.toCssColorString(),p=i.toCssColorString(),y=JSON.stringify([f,r,p,o]);t.setImage(y,w_(u,f,p,o,r))}ba.prototype.hasProperty=function(e){return this._content.batchTable.hasProperty(this._batchId,e)};ba.prototype.getPropertyIds=function(e){return this._content.batchTable.getPropertyIds(this._batchId,e)};ba.prototype.getProperty=function(e){return this._content.batchTable.getProperty(this._batchId,e)};ba.prototype.getPropertyInherited=function(e){return Us.getPropertyInherited(this._content,this._batchId,e)};ba.prototype.setProperty=function(e,t){this._content.batchTable.setProperty(this._batchId,e,t),this._content.featurePropertiesDirty=!0};ba.prototype.isExactClass=function(e){return this._content.batchTable.isExactClass(this._batchId,e)};ba.prototype.isClass=function(e){return this._content.batchTable.isClass(this._batchId,e)};ba.prototype.getExactClassName=function(){return this._content.batchTable.getExactClassName(this._batchId)};var _b=ba;var FUn=_(T(),1);var Hkn=_(T(),1);function dKe(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",""),l=document.createElement("canvas"),d=100,u=r.width+d|0,f=3*a,p=f/2;l.width=u,l.height=f;let y=l.getContext("2d");y.font=n,y.fillStyle="white",y.fillRect(0,0,l.width+1,l.height+1),i&&(y.strokeStyle="black",y.lineWidth=e.lineWidth,y.strokeText(t,d/2,p)),o&&(y.fillStyle="black",y.fillText(t,d/2,p));let h=y.getImageData(0,0,u,f).data,g=h.length,x=u*4,S,V,Z,R;for(S=0;S=0;--S)if(h[S]!==255){R=S/x|0;break}let E=-1;for(S=0;S]/,o=[],r="",s=ps.LTR,a="",l=e.length;for(let d=0;d";case">":return"<"}}var _Ke="\u05D0-\u05EA",TKe="\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF",ble=new RegExp(`[${_Ke}${TKe}]`);function SKe(e){let t=e.split(` `),n="";for(let i=0;id+1?s[d+1].Type===ps.RTL?(l=f+l,a=0):(l=Hw(l,a,u.Word),a+=u.Word.length):l=Hw(l,0,f)):u.Type===ps.RTL?l=Hw(l,a,f):u.Type===ps.LTR?(l+=u.Word,a=l.length):(u.Type===ps.WEAK||u.Type===ps.BRACKETS)&&(d>0&&s[d-1].Type===ps.RTL?s.length>d+1?s[d+1].Type===ps.RTL?l=Hw(l,a,f):(l+=u.Word,a=l.length):l+=u.Word:(l+=u.Word,a=l.length))}n+=l,i0,l=t._backgroundBillboard,d=e._backgroundBillboardCollection;a?(c(l)||(l=RKe(d,e),t._backgroundBillboard=l),l.color=t._backgroundColor,l.show=t._show,l.position=t._position,l.eyeOffset=t._eyeOffset,l.pixelOffset=t._pixelOffset,l.horizontalOrigin=xi.LEFT,l.verticalOrigin=t._verticalOrigin,l.heightReference=t._heightReference,l.scale=t.totalScale,l.pickPrimitive=t,l.id=t._id,l.translucencyByDistance=t._translucencyByDistance,l.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,l.scaleByDistance=t._scaleByDistance,l.distanceDisplayCondition=t._distanceDisplayCondition,l.disableDepthTestDistance=t._disableDepthTestDistance,l.clusterShow=t.clusterShow):c(l)&&(d.remove(l),t._backgroundBillboard=l=void 0);let u=e._glyphBillboardCollection,f=u.billboardTextureCache,p=e._textDimensionsCache;for(let y=0;y0&&v.height>0&&!XKe.test(h)){let P=(0,Tle.default)(v,{cutoff:Ys.CUTOFF,radius:Ys.RADIUS}),F=v.getContext("2d"),N=v.width,b=v.height,G=F.getImageData(0,0,N,b);for(let X=0;X0?R=E.pop():(R=u.add({collection:e}),R._labelDimensions=new D,R._labelTranslate=new D),Z.billboard=R),R.setImageTexture(V),R.show=t._show,R.position=t._position,R.eyeOffset=t._eyeOffset,R.pixelOffset=t._pixelOffset,R.horizontalOrigin=xi.LEFT,R.verticalOrigin=t._verticalOrigin,R.heightReference=t._heightReference,R.scale=t.totalScale,R.pickPrimitive=t,R.id=t._id,R.translucencyByDistance=t._translucencyByDistance,R.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,R.scaleByDistance=t._scaleByDistance,R.distanceDisplayCondition=t._distanceDisplayCondition,R.disableDepthTestDistance=t._disableDepthTestDistance,R._batchIndex=t._batchIndex,R.outlineColor=t.outlineColor,t.style===Yo.FILL_AND_OUTLINE?(R.color=t._fillColor,R.outlineWidth=t.outlineWidth):t.style===Yo.FILL?(R.color=t._fillColor,R.outlineWidth=0):t.style===Yo.OUTLINE&&(R.color=Y.TRANSPARENT,R.outlineWidth=t.outlineWidth)}t._repositionAllGlyphs=!0}function _le(e,t,n){return t===xi.CENTER?-e/2:t===xi.RIGHT?-(e+n.x):n.x}var fr=new D,WKe=new D;function wKe(e){let t=e._glyphs,n=e._renderedText,i=0,o=0,r=[],s=Number.NEGATIVE_INFINITY,a=0,l=1,d=t.length,u=e._backgroundBillboard,f=D.clone(c(u)?e._backgroundPadding:D.ZERO,WKe);f.x/=e._relativeSize,f.y/=e._relativeSize;for(let F=0;F0&&(h===xi.CENTER?V=-o/2-f.x:h===xi.RIGHT?V=-(o+f.x*2):V=0,fr.x=V*y,g===Mn.TOP?fr.y=p-a-s:g===Mn.CENTER?fr.y=(p-a)/2-s:g===Mn.BASELINE?fr.y=-f.y-s:fr.y=0,fr.y=fr.y*y,u.width=E,u.height=I,u._setTranslate(fr),u._labelTranslate=D.clone(fr,u._labelTranslate)),Lu(e.heightReference))for(let F=0;F0?Lo.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)};Rh.prototype.isDestroyed=function(){return!1};Rh.prototype.destroy=function(){return this.removeAll(),this._glyphBillboardCollection=this._glyphBillboardCollection.destroy(),this._backgroundBillboardCollection=this._backgroundBillboardCollection.destroy(),he(this)};var Gh=Rh;var QOn=_(T(),1);var MUn=_(T(),1),zw=`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 dOn=_(T(),1);var jUn=_(T(),1);var tl={};tl.numberOfPoints=function(e,t,n){let i=m.distance(e,t);return Math.ceil(i/n)};tl.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 PKe=new pe;tl.extractHeights=function(e,t){let n=e.length,i=new Array(n);for(let o=0;o0){t=t??M.IDENTITY;let o=M.inverseTransformation(t,vKe),r=M.multiplyByPoint(o,m.ZERO,FKe),s=m.normalize(M.multiplyByPointAsVector(o,m.UNIT_Y,Vle),Vle),a=cn.fromPointNormal(r,s,AKe),l=m.normalize(M.multiplyByPointAsVector(o,m.UNIT_X,Lle),Lle),d=cn.fromPointNormal(r,l,MKe),u=1;n.push(m.clone(e[0]));let f=n[0],p=e.length;for(let y=1;y2&&(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;c(t)&&(i=M.clone(t.modelMatrix)),this._modelMatrix=i,this._segments=vi.wrapLongitude(this._actualPositions,i),this._actualLength=void 0,this._propertiesChanged=new Uint32Array(Ele),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 Gle=Ed.POSITION_INDEX=0,YKe=Ed.SHOW_INDEX=1,HKe=Ed.WIDTH_INDEX=2,zKe=Ed.MATERIAL_INDEX=3,Jw=Ed.POSITION_SIZE_INDEX=4,KKe=Ed.DISTANCE_DISPLAY_CONDITION=5,Ele=Ed.NUMBER_OF_PROPERTIES=6;function Sb(e,t){++e._propertiesChanged[t];let n=e._polylineCollection;c(n)&&(n._updatePolyline(e,t),e._dirty=!0)}Object.defineProperties(Ed.prototype,{show:{get:function(){return this._show},set:function(e){if(!c(e))throw new L("value is required.");e!==this._show&&(this._show=e,Sb(this,YKe))}},positions:{get:function(){return this._positions},set:function(e){if(!c(e))throw new L("value is required.");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)&&Sb(this,Jw),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),Sb(this,Gle),this.update()}},material:{get:function(){return this._material},set:function(e){if(!c(e))throw new L("material is required.");this._material!==e&&(this._material=e,Sb(this,zKe))}},width:{get:function(){return this._width},set:function(e){if(!c(e))throw new L("value is required.");let t=this._width;e!==t&&(this._width=e,Sb(this,HKe))}},loop:{get:function(){return this._loop},set:function(e){if(!c(e))throw new L("value is required.");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,Sb(this,Jw)}}},id:{get:function(){return this._id},set:function(e){this._id=e,c(this._pickId)&&(this._pickId.object.id=e)}},pickId:{get:function(){return this._pickId}},isDestroyed:{get:function(){return!c(this._polylineCollection)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(c(e)&&e.far<=e.near)throw new L("far distance must be greater than near distance.");vt.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=vt.clone(e,this._distanceDisplayCondition),Sb(this,KKe))}}});Ed.prototype.update=function(){let e=M.IDENTITY;c(this._polylineCollection)&&(e=this._polylineCollection.modelMatrix);let t=this._segments.positions.length,n=this._segments.lengths,i=this._propertiesChanged[Gle]>0||this._propertiesChanged[Jw]>0;if((!M.equals(e,this._modelMatrix)||i)&&(this._segments=vi.wrapLongitude(this._actualPositions,e),this._boundingVolumeWC=ue.transform(this._boundingVolume,e,this._boundingVolumeWC)),this._modelMatrix=M.clone(e,this._modelMatrix),this._segments.positions.length!==t)Sb(this,Jw);else{let o=n.length;for(let r=0;r2){if(o[iK]||o[Xle]){let h=e.mode===se.SCENE2D?i._boundingVolume2D:i._boundingVolumeWC,g=Bn.fromCartesian(h.center,Mle),x=ce.fromElements(g.low.x,g.low.y,g.low.z,h.radius,Nle);this._batchTable.setBatchedAttribute(i._index,2,g.high),this._batchTable.setBatchedAttribute(i._index,3,x)}if(o[qKe]){let h=kle;h.x=0,h.y=Number.MAX_VALUE;let g=i.distanceDisplayCondition;c(g)&&(h.x=g.near,h.y=g.far),this._batchTable.setBatchedAttribute(i._index,4,h)}}i._clean()}}l.length=0,this._polylinesUpdated=!1}o=this._propertiesChanged;for(let l=0;l0){let H=F.isTranslucent();a>=s?(b=new et({owner:e}),n.push(b)):b=n[a],++a,G=St(p(F._uniforms),e._uniformMap),b.boundingVolume=ue.clone(Qw,b.boundingVolume),b.modelMatrix=i,b.shaderProgram=E,b.vertexArray=g.va,b.renderState=H?e._translucentRS:e._opaqueRS,b.pass=H?Xe.TRANSLUCENT:Xe.OPAQUE,b.debugShowBoundingVolume=u,b.pickId="v_pickColor",b.uniformMap=G,b.count=N,b.offset=R,R+=N,N=0,l=!0,r.push(b)}F=W._material,F.update(o),P=A}let k=W._locatorBuckets,B=k.length;for(let H=0;H0&&(a>=s?(b=new et({owner:e}),n.push(b)):b=n[a],++a,G=St(p(F._uniforms),e._uniformMap),b.boundingVolume=ue.clone(Qw,b.boundingVolume),b.modelMatrix=i,b.shaderProgram=E,b.vertexArray=g.va,b.renderState=F.isTranslucent()?e._translucentRS:e._opaqueRS,b.pass=F.isTranslucent()?Xe.TRANSLUCENT:Xe.OPAQUE,b.debugShowBoundingVolume=u,b.pickId="v_pickColor",b.uniformMap=G,b.count=N,b.offset=R,l=!0,r.push(b)),P=void 0}}n.length=a}lf.prototype.isDestroyed=function(){return!1};lf.prototype.destroy=function(){return Ule(this),rK(this),Ole(this),this._batchTable=this._batchTable&&this._batchTable.destroy(),he(this)};function tJe(e){let t=!1,n=e._propertiesChanged,i=e._positionBufferUsage;return n[iK]?(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 Wle=[0,0,0];function wle(e,t,n){e._createVertexArray=!1,rK(e),Ule(e),oJe(e);let i=[[]],o=i[0],r=e._batchTable,s=e._useHighlightColor,a=[0],l=0,d=[[]],u=0,f=e._polylineBuckets,p,y;for(p in f)f.hasOwnProperty(p)&&(y=f[p],y.updateShader(t,r,s),u+=y.lengthOfPositions);if(u>0){let h=e._mode,g=new Float32Array(6*u*3),x=new Float32Array(u*4),S,V=0,Z=0,R=0;for(p in f)if(f.hasOwnProperty(p)){y=f[p],y.write(g,x,V,Z,R,r,t,n),h===se.MORPHING&&(c(S)||(S=new Float32Array(6*u*3)),y.writeForMorph(S,V));let G=y.lengthOfPositions;V+=6*G*3,Z+=G*4,R+=G*4,l=y.updateIndices(i,a,d,l)}let E=e._positionBufferUsage.bufferUsage,I=Ne.STATIC_DRAW;e._positionBuffer=_t.createVertexBuffer({context:t,typedArray:g,usage:E});let v;c(S)&&(v=_t.createVertexBuffer({context:t,typedArray:S,usage:E})),e._texCoordExpandAndBatchIndexBuffer=_t.createVertexBuffer({context:t,typedArray:x,usage:I});let P=3*Float32Array.BYTES_PER_ELEMENT,F=4*Float32Array.BYTES_PER_ELEMENT,N=0,b=i.length;for(let G=0;G0){let X=new Uint16Array(o),W=_t.createIndexBuffer({context:t,typedArray:X,usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT});N+=a[G];let A=6*(G*(P*w.SIXTY_FOUR_KILOBYTES)-N*P),k=P+A,B=P+k,O=P+B,H=P+O,U=P+H,K=G*(F*w.SIXTY_FOUR_KILOBYTES)-N*F,Q=[{index:Ul.position3DHigh,componentsPerAttribute:3,componentDatatype:q.FLOAT,offsetInBytes:A,strideInBytes:6*P},{index:Ul.position3DLow,componentsPerAttribute:3,componentDatatype:q.FLOAT,offsetInBytes:k,strideInBytes:6*P},{index:Ul.position2DHigh,componentsPerAttribute:3,componentDatatype:q.FLOAT,offsetInBytes:A,strideInBytes:6*P},{index:Ul.position2DLow,componentsPerAttribute:3,componentDatatype:q.FLOAT,offsetInBytes:k,strideInBytes:6*P},{index:Ul.prevPosition3DHigh,componentsPerAttribute:3,componentDatatype:q.FLOAT,offsetInBytes:B,strideInBytes:6*P},{index:Ul.prevPosition3DLow,componentsPerAttribute:3,componentDatatype:q.FLOAT,offsetInBytes:O,strideInBytes:6*P},{index:Ul.prevPosition2DHigh,componentsPerAttribute:3,componentDatatype:q.FLOAT,offsetInBytes:B,strideInBytes:6*P},{index:Ul.prevPosition2DLow,componentsPerAttribute:3,componentDatatype:q.FLOAT,offsetInBytes:O,strideInBytes:6*P},{index:Ul.nextPosition3DHigh,componentsPerAttribute:3,componentDatatype:q.FLOAT,offsetInBytes:H,strideInBytes:6*P},{index:Ul.nextPosition3DLow,componentsPerAttribute:3,componentDatatype:q.FLOAT,offsetInBytes:U,strideInBytes:6*P},{index:Ul.nextPosition2DHigh,componentsPerAttribute:3,componentDatatype:q.FLOAT,offsetInBytes:H,strideInBytes:6*P},{index:Ul.nextPosition2DLow,componentsPerAttribute:3,componentDatatype:q.FLOAT,offsetInBytes:U,strideInBytes:6*P},{index:Ul.texCoordExpandAndBatchIndex,componentsPerAttribute:4,componentDatatype:q.FLOAT,vertexBuffer:e._texCoordExpandAndBatchIndexBuffer,offsetInBytes:K}],ie,j,$,ne;h===se.SCENE3D?(j=e._positionBuffer,ie="vertexBuffer",$=Wle,ne="value"):h===se.SCENE2D||h===se.COLUMBUS_VIEW?(j=Wle,ie="value",$=e._positionBuffer,ne="vertexBuffer"):(j=v,ie="vertexBuffer",$=e._positionBuffer,ne="vertexBuffer"),Q[0][ie]=j,Q[1][ie]=j,Q[2][ne]=$,Q[3][ne]=$,Q[4][ie]=j,Q[5][ie]=j,Q[6][ne]=$,Q[7][ne]=$,Q[8][ie]=j,Q[9][ie]=j,Q[10][ne]=$,Q[11][ne]=$;let be=new ni({context:t,attributes:Q,indexBuffer:W});e._vertexArrays.push({va:be,buckets:d[G]})}}}function nJe(e,t){return t instanceof Pt?t.id:t}var xk=[];function iJe(e){let t=zi._uniformList[e.type],n=t.length;xk.length=2*n;let i=0;for(let o=0;o1){a.update();let l=a.material,d=i[l.type];c(d)||(d=i[l.type]=new Eh(l,t,n)),d.addPolyline(a)}}}function rJe(e,t){let n=t.mode;(e._mode!==n||!M.equals(e._modelMatrix,e.modelMatrix))&&(e._mode=n,e._modelMatrix=M.clone(e.modelMatrix),e._createVertexArray=!0)}function oK(e){if(e._polylinesRemoved){e._polylinesRemoved=!1;let t=[],n=[],i=0,o,r=e._polylines.length;for(let s=0;s0,x=y._index,S=this.getSegments(y,a),V=S.positions,Z=S.lengths,R=V.length,E=y.getPickId(s).color,I=0,v=0,P;for(let B=0;B0||Ls.x>0&&Uu.x<0)&&m.clone(Ls,Uu),(Ls.x<0&&Ou.x>0||Ls.x>0&&Ou.x<0)&&m.clone(Ls,Ou));let K=H?2:0,Q=U?2:4;for(let ie=K;ie2&&(r.setBatchedAttribute(x,2,X),r.setBatchedAttribute(x,3,W),r.setBatchedAttribute(x,4,A))}};var cJe=new m,lJe=new m,dJe=new m,Ple=new m;Eh.prototype.writeForMorph=function(e,t){let n=this.modelMatrix,i=this.polylines,o=i.length;for(let r=0;r0&&(l=a[a.length-1]+1);let d=this.polylines,u=d.length;for(let f=0;f0)y[0]=g;else continue}else y=p._segments.lengths;let h=y.length;if(h>0){let g=0;for(let x=0;xw.SIXTY_FOUR_KILOBYTES&&(p._locatorBuckets.push({locator:r,count:g}),g=0,t.push(4),a=[],e.push(a),l=0,r.count=s,s=0,i=0,r=new nK(0,0,this),n[++o]=[r]),a.push(l,l+2,l+1),a.push(l+1,l+2,l+3),g+=6,s+=6,i+=6,l+=4}p._locatorBuckets.push({locator:r,count:g}),l+4>w.SIXTY_FOUR_KILOBYTES&&(t.push(0),a=[],e.push(a),l=0,r.count=s,i=0,s=0,r=new nK(0,0,this),n[++o]=[r])}p._clean()}return r.count=s,i};Eh.prototype.getPolylineStartIndex=function(e){let t=this.polylines,n=0,i=t.length;for(let o=0;o0){e._boundingVolume2D=ue.fromPoints(o,e._boundingVolume2D);let d=e._boundingVolume2D.center;e._boundingVolume2D.center=new m(d.z,d.x,d.y)}return p1.positions=o,p1.lengths=e._segments.lengths,p1};var Fle;Eh.prototype.writeUpdate=function(e,t,n,i){let o=this.mode,r=i.ellipsoid.maximumRadius*w.PI,s=t._actualLength;if(s){e+=this.getPolylineStartIndex(t);let a=Fle,l=6*s*3;!c(a)||a.lengthl&&(a=new Float32Array(a.buffer,0,l));let d=this.getSegments(t,i),u=d.positions,f=d.lengths,p=0,y=0,h=0,g;s=u.length;for(let x=0;x0||Ls.x>0&&Uu.x<0)&&m.clone(Ls,Uu),(Ls.x<0&&Ou.x>0||Ls.x>0&&Ou.x<0)&&m.clone(Ls,Ou));let R=V?2:0,E=Z?2:4;for(let I=R;I{if(e.isDestroyed())return;e._positions=new Float64Array(a.positions);let l=e._billboardCollection,d=e._labelCollection,u=e._polylineCollection;n=e._positions;let f=e._batchIds,p=n.length/3;for(let y=0;y{e.isDestroyed()||(e._error=a)})}My.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{if(e.isDestroyed())return;e._positions=void 0,e._counts=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0;let h=new Float64Array(y.packedBuffer),g=h[0];ZJe(e,h),e._indices=Me.getSizeInBytes(g)===2?new Uint16Array(y.indices):new Uint32Array(y.indices),e._indexOffsets=new Uint32Array(y.indexOffsets),e._indexCounts=new Uint32Array(y.indexCounts),e._batchedPositions=new Float32Array(y.positions),e._vertexBatchIds=new Uint16Array(y.batchIds),XJe(e),e._ready=!0}).catch(y=>{e.isDestroyed()||(e._error=y)})}function XJe(e){c(e._primitive)||(e._primitive=new o_({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)}Cb.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};Cb.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};Cb.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};Cb.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};Cb.prototype.update=function(e){if(!this._ready){if(c(this._promise)||(this._promise=EJe(this)),c(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)};Cb.prototype.isDestroyed=function(){return!1};Cb.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};var eP=Cb;var nBn=_(T(),1);var IDn=_(T(),1),tP=`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 uf(e){this._positions=e.positions,this._widths=e.widths,this._counts=e.counts,this._batchIds=e.batchIds,this._ellipsoid=e.ellipsoid??re.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=Y.clone(Y.WHITE),this._highlightColor=this._constantColor,this._trianglesLength=0,this._geometryByteLength=0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(uf.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function IJe(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+de.packedLength+re.packedLength+m.packedLength,a=new Float64Array(s),l=0;return a[l++]=n,a[l++]=i,de.pack(t,a,l),l+=de.packedLength,re.pack(o,a,l),l+=re.packedLength,m.pack(r,a,l),a}var WJe=new gi("createVectorTilePolylines",5),b1={previousPosition:0,currentPosition:1,nextPosition:2,expandAndWidth:3,a_batchId:4};function wJe(e,t){if(c(e._va))return;let n=e._positions,i=e._widths,o=e._counts,r=e._transferrableBatchIds,s=e._packedBuffer;c(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=IJe(e));let a=[n.buffer,i.buffer,o.buffer,r.buffer,s.buffer],l={positions:n.buffer,widths:i.buffer,counts:o.buffer,batchIds:r.buffer,packedBuffer:s.buffer,keepDecodedPositions:e._keepDecodedPositions},d=WJe.scheduleTask(l,a);if(c(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 f=u.indexDatatype;e._indices=f===Me.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),PJe(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function PJe(e,t){if(!c(e._va)){let n=e._currentPositions,i=e._previousPositions,o=e._nextPositions,r=e._expandAndWidth,s=e._vertexBatchIds,a=e._indices,l=i.byteLength+n.byteLength+o.byteLength;l+=r.byteLength+s.byteLength+a.byteLength,e._trianglesLength=a.length/3,e._geometryByteLength=l;let d=_t.createVertexBuffer({context:t,typedArray:i,usage:Ne.STATIC_DRAW}),u=_t.createVertexBuffer({context:t,typedArray:n,usage:Ne.STATIC_DRAW}),f=_t.createVertexBuffer({context:t,typedArray:o,usage:Ne.STATIC_DRAW}),p=_t.createVertexBuffer({context:t,typedArray:r,usage:Ne.STATIC_DRAW}),y=_t.createVertexBuffer({context:t,typedArray:s,usage:Ne.STATIC_DRAW}),h=_t.createIndexBuffer({context:t,typedArray:a,usage:Ne.STATIC_DRAW,indexDatatype:a.BYTES_PER_ELEMENT===2?Me.UNSIGNED_SHORT:Me.UNSIGNED_INT}),g=[{index:b1.previousPosition,vertexBuffer:d,componentDatatype:q.FLOAT,componentsPerAttribute:3},{index:b1.currentPosition,vertexBuffer:u,componentDatatype:q.FLOAT,componentsPerAttribute:3},{index:b1.nextPosition,vertexBuffer:f,componentDatatype:q.FLOAT,componentsPerAttribute:3},{index:b1.expandAndWidth,vertexBuffer:p,componentDatatype:q.FLOAT,componentsPerAttribute:2},{index:b1.a_batchId,vertexBuffer:y,componentDatatype:q.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new ni({context:t,attributes:g,indexBuffer:h}),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 nP=new M,Ble=new m;function vJe(e,t){c(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return M.clone(n,nP),M.multiplyByPoint(nP,e._center,Ble),M.setTranslation(nP,Ble,nP),nP},u_highlightColor:function(){return e._highlightColor}})}function FJe(e){if(c(e._rs))return;let t={enabled:!0,factor:-5,units:-5};e._rs=Oe.fromCache({blending:un.ALPHA_BLEND,depthMask:!1,depthTest:{enabled:!0},polygonOffset:t})}var AJe=`uniform vec4 u_highlightColor; void main() { out_FragColor = u_highlightColor; } `;function MJe(e,t){if(c(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(tP),o=n.getFragmentShaderCallback(!1,void 0,!1)(AJe),r=new Be({defines:["VECTOR_TILE",Ot.isInternetExplorer()?"":"CLIP_POLYLINE"],sources:[bd,i]}),s=new Be({defines:["VECTOR_TILE"],sources:[o]});e._sp=tn.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:b1})}function NJe(e,t){if(!c(e._command)){let n=e._batchTable.getUniformMapCallback()(e._uniformMap);e._command=new et({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:n,boundingVolume:e._boundingVolume,pass:Xe.TRANSLUCENT,pickId:e._batchTable.getPickId()})}t.commandList.push(e._command)}uf.getPolylinePositions=function(e,t){let n=e._batchIds,i=e._decodedPositions,o=e._decodedPositionOffsets;if(!c(n)||!c(i))return;let r,s,a=n.length,l=0,d=0;for(r=0;r 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 Vb(e){this._positions=e.positions,this._widths=e.widths,this._counts=e.counts,this._batchIds=e.batchIds,this._ellipsoid=e.ellipsoid??re.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(ui._defaultMinTerrainHeight,ui._defaultMaxTerrainHeight),this._boundingVolume=Xn.fromRectangle(e.rectangle,ui._defaultMinTerrainHeight,ui._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=Y.clone(Y.WHITE),this._highlightColor=this._constantColor,this._trianglesLength=0,this._geometryByteLength=0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(Vb.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function BJe(e,t,n){let i=ui.getMinimumMaximumHeights(t,n),o=i.minimumTerrainHeight,r=i.maximumTerrainHeight,s=e._minimumMaximumVectorHeights;s.x=o,s.y=r;let a=e._boundingVolume,l=e._rectangle;Xn.fromRectangle(l,o,r,n,a)}function YJe(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+de.packedLength+re.packedLength+m.packedLength,a=new Float64Array(s),l=0;return a[l++]=n,a[l++]=i,de.pack(t,a,l),l+=de.packedLength,re.pack(o,a,l),l+=re.packedLength,m.pack(r,a,l),a}var HJe=new gi("createVectorTileClampedPolylines"),Ny={startEllipsoidNormal:0,endEllipsoidNormal:1,startPositionAndHeight:2,endPositionAndHeight:3,startFaceNormalAndVertexCorner:4,endFaceNormalAndHalfWidth:5,a_batchId:6};function zJe(e,t){if(c(e._va))return;let n=e._positions,i=e._widths,o=e._counts,r=e._transferrableBatchIds,s=e._packedBuffer;c(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=YJe(e));let a=[n.buffer,i.buffer,o.buffer,r.buffer,s.buffer],l={positions:n.buffer,widths:i.buffer,counts:o.buffer,batchIds:r.buffer,packedBuffer:s.buffer,keepDecodedPositions:e._keepDecodedPositions},d=HJe.scheduleTask(l,a);if(c(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 f=u.indexDatatype;e._indices=f===Me.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),KJe(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function KJe(e,t){if(!c(e._va)){let n=e._startEllipsoidNormals,i=e._endEllipsoidNormals,o=e._startPositionAndHeights,r=e._endPositionAndHeights,s=e._startFaceNormalAndVertexCornerIds,a=e._endFaceNormalAndHalfWidths,l=e._vertexBatchIds,d=e._indices,u=n.byteLength+i.byteLength;u+=o.byteLength+r.byteLength,u+=s.byteLength+a.byteLength,u+=l.byteLength+d.byteLength,e._trianglesLength=d.length/3,e._geometryByteLength=u;let f=_t.createVertexBuffer({context:t,typedArray:n,usage:Ne.STATIC_DRAW}),p=_t.createVertexBuffer({context:t,typedArray:i,usage:Ne.STATIC_DRAW}),y=_t.createVertexBuffer({context:t,typedArray:o,usage:Ne.STATIC_DRAW}),h=_t.createVertexBuffer({context:t,typedArray:r,usage:Ne.STATIC_DRAW}),g=_t.createVertexBuffer({context:t,typedArray:s,usage:Ne.STATIC_DRAW}),x=_t.createVertexBuffer({context:t,typedArray:a,usage:Ne.STATIC_DRAW}),S=_t.createVertexBuffer({context:t,typedArray:l,usage:Ne.STATIC_DRAW}),V=_t.createIndexBuffer({context:t,typedArray:d,usage:Ne.STATIC_DRAW,indexDatatype:d.BYTES_PER_ELEMENT===2?Me.UNSIGNED_SHORT:Me.UNSIGNED_INT}),Z=[{index:Ny.startEllipsoidNormal,vertexBuffer:f,componentDatatype:q.FLOAT,componentsPerAttribute:3},{index:Ny.endEllipsoidNormal,vertexBuffer:p,componentDatatype:q.FLOAT,componentsPerAttribute:3},{index:Ny.startPositionAndHeight,vertexBuffer:y,componentDatatype:q.FLOAT,componentsPerAttribute:4},{index:Ny.endPositionAndHeight,vertexBuffer:h,componentDatatype:q.FLOAT,componentsPerAttribute:4},{index:Ny.startFaceNormalAndVertexCorner,vertexBuffer:g,componentDatatype:q.FLOAT,componentsPerAttribute:4},{index:Ny.endFaceNormalAndHalfWidth,vertexBuffer:x,componentDatatype:q.FLOAT,componentsPerAttribute:4},{index:Ny.a_batchId,vertexBuffer:S,componentDatatype:q.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new ni({context:t,attributes:Z,indexBuffer:V}),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 rP=new M,Yle=new m;function JJe(e,t){c(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return M.clone(n,rP),M.multiplyByPoint(rP,e._center,Yle),M.setTranslation(rP,Yle,rP),rP},u_highlightColor:function(){return e._highlightColor},u_minimumMaximumVectorHeights:function(){return e._minimumMaximumVectorHeights}})}function Hle(e){return Oe.fromCache({cull:{enabled:!0,face:_i.FRONT},blending:un.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:On.EQUAL,frontOperation:{fail:ft.KEEP,zFail:ft.KEEP,zPass:ft.KEEP},backFunction:On.EQUAL,backOperation:{fail:ft.KEEP,zFail:ft.KEEP,zPass:ft.KEEP},reference:kt.CESIUM_3D_TILE_MASK,mask:kt.CESIUM_3D_TILE_MASK}})}function QJe(e){c(e._rs)||(e._rs=Hle(!1),e._rs3DTiles=Hle(!0))}function jJe(e,t){if(c(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(iP),o=n.getFragmentShaderCallback(!1,void 0,!0)(oP),r=new Be({defines:["VECTOR_TILE",Ot.isInternetExplorer()?"":"CLIP_POLYLINE"],sources:[bd,i]}),s=new Be({defines:["VECTOR_TILE"],sources:[o]});e._sp=tn.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:Ny})}function qJe(e,t){let n=e._command;if(!c(e._command)){let o=e._batchTable.getUniformMapCallback()(e._uniformMap);n=e._command=new et({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:o,boundingVolume:e._boundingVolume,pass:Xe.TERRAIN_CLASSIFICATION,pickId:e._batchTable.getPickId()});let r=et.shallowClone(n,n.derivedCommands.tileset);r.renderState=e._rs3DTiles,r.pass=Xe.CESIUM_3D_TILE_CLASSIFICATION,n.derivedCommands.tileset=r}let i=e._classificationType;(i===Un.TERRAIN||i===Un.BOTH)&&t.commandList.push(n),(i===Un.CESIUM_3D_TILE||i===Un.BOTH)&&t.commandList.push(n.derivedCommands.tileset)}Vb.prototype.getPositions=function(e){return A_.getPolylinePositions(this,e)};Vb.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o{e.isDestroyed()||(e._error=t)})}Vb.prototype.update=function(e){let t=e.context;if(!this._ready){if(c(this._promise)||(this._promise=iQe(this).then(zJe(this,t))),c(this._error)){let i=this._error;throw this._error=void 0,i}return}JJe(this,t),jJe(this,t),QJe(this);let n=e.passes;(n.render||n.pick)&&qJe(this,e)};Vb.prototype.isDestroyed=function(){return!1};Vb.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),he(this)};var sP=Vb;var zBn=_(T(),1);var aK=32767,oQe=new pe,rQe=new m;function sQe(e,t,n,i,o){let r=e.length/3,s=e.subarray(0,r),a=e.subarray(r,2*r),l=e.subarray(2*r,3*r);Fn.zigZagDeltaDecode(s,a,l);let d=new Float64Array(e.length);for(let u=0;u0&&c(e.POLYGON_BATCH_IDS)){let p=t.byteOffset+e.POLYGON_BATCH_IDS.byteOffset;n=new Uint16Array(t.buffer,p,s)}if(a>0&&c(e.POLYLINE_BATCH_IDS)){let p=t.byteOffset+e.POLYLINE_BATCH_IDS.byteOffset;i=new Uint16Array(t.buffer,p,a)}if(l>0&&c(e.POINT_BATCH_IDS)){let p=t.byteOffset+e.POINT_BATCH_IDS.byteOffset;o=new Uint16Array(t.buffer,p,l)}let d=c(n)||c(i)||c(o),u=s>0&&!c(n)||a>0&&!c(i)||l>0&&!c(o);if(d&&u)throw new le("If one group of batch ids is defined, then all batch ids must be defined");if(!c(n)&&!c(i)&&!c(o)){let p=0;if(!c(n)&&s>0)for(n=new Uint16Array(s),r=0;r0)for(i=new Uint16Array(a),r=0;r0)for(o=new Uint16Array(l),r=0;r0&&(S=er(i,n,d),n+=d,u>0&&(V=new Uint8Array(t,n,u),V=new Uint8Array(V),n+=u));let Z=g.POLYGONS_LENGTH??0,R=g.POLYLINES_LENGTH??0,E=g.POINTS_LENGTH??0,I=Z+R+E,v=new zp(e,I,S,V,aQe(e));if(e._batchTable=v,I===0)return;let P=new of(g,x),F=P.getGlobalProperty("REGION");if(!c(F))throw new le("Feature table global property: REGION must be defined");let N=de.unpack(F),b=F[4],G=F[5],X=e._tile.computedTransform,W=P.getGlobalProperty("RTC_CENTER",q.FLOAT,3);c(W)?(W=m.unpack(W),M.multiplyByPoint(X,W,W)):(W=de.center(N),W.height=w.lerp(b,G,.5),W=re.WGS84.cartographicToCartesian(W));let A=cQe(g,x);if(n+=(4-n%4)%4,Z>0){P.featuresLength=Z;let k=P.getPropertyArray("POLYGON_COUNTS",q.UNSIGNED_INT,1)??P.getPropertyArray("POLYGON_COUNT",q.UNSIGNED_INT,1);if(!c(k))throw new le("Feature table property: POLYGON_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let B=P.getPropertyArray("POLYGON_INDEX_COUNTS",q.UNSIGNED_INT,1)??P.getPropertyArray("POLYGON_INDEX_COUNT",q.UNSIGNED_INT,1);if(!c(B))throw new le("Feature table property: POLYGON_INDEX_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let O=k.reduce(function(j,$){return j+$*2},0),H=B.reduce(function(j,$){return j+$},0),U=new Uint32Array(t,n,H);n+=f;let K=new Uint16Array(t,n,O);n+=p;let Q,ie;c(g.POLYGON_MINIMUM_HEIGHTS)&&c(g.POLYGON_MAXIMUM_HEIGHTS)&&(Q=P.getPropertyArray("POLYGON_MINIMUM_HEIGHTS",q.FLOAT,1),ie=P.getPropertyArray("POLYGON_MAXIMUM_HEIGHTS",q.FLOAT,1)),e._polygons=new eP({positions:K,counts:k,indexCounts:B,indices:U,minimumHeight:b,maximumHeight:G,polygonMinimumHeights:Q,polygonMaximumHeights:ie,center:W,rectangle:N,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:v,batchIds:A.polygons,modelMatrix:X})}if(R>0){P.featuresLength=R;let k=P.getPropertyArray("POLYLINE_COUNTS",q.UNSIGNED_INT,1)??P.getPropertyArray("POLYLINE_COUNT",q.UNSIGNED_INT,1);if(!c(k))throw new le("Feature table property: POLYLINE_COUNTS must be defined when POLYLINES_LENGTH is greater than 0");let B=P.getPropertyArray("POLYLINE_WIDTHS",q.UNSIGNED_SHORT,1);if(!c(B)){B=new Uint16Array(R);for(let ie=0;ie0){let k=new Uint16Array(t,n,E*3);n+=h,e._points=new $w({positions:k,batchIds:A.points,minimumHeight:b,maximumHeight:G,rectangle:N,batchTable:v})}}function cK(e){let t=e.featuresLength;if(!c(e._features)&&t>0){let n=new Array(t);c(e._polygons)&&e._polygons.createFeatures(e,n),c(e._polylines)&&e._polylines.createFeatures(e,n),c(e._points)&&e._points.createFeatures(e,n),e._features=n}}ff.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)};ff.prototype.getFeature=function(e){let t=this.featuresLength;if(!c(e)||e<0||e>=t)throw new L(`batchId is required and between zero and featuresLength - 1 (${t-1}).`);return c(this._features)||cK(this),this._features[e]};ff.prototype.applyDebugSettings=function(e,t){c(this._polygons)&&this._polygons.applyDebugSettings(e,t),c(this._polylines)&&this._polylines.applyDebugSettings(e,t),c(this._points)&&this._points.applyDebugSettings(e,t)};ff.prototype.applyStyle=function(e){c(this._features)||cK(this),c(this._polygons)&&this._polygons.applyStyle(e,this._features),c(this._polylines)&&this._polylines.applyStyle(e,this._features),c(this._points)&&this._points.applyStyle(e,this._features)};ff.prototype.update=function(e,t){let n=!0;c(this._polygons)&&(this._polygons.classificationType=this._tileset.classificationType,this._polygons.debugWireframe=this._tileset.debugWireframe,this._polygons.update(t),n=n&&this._polygons.ready),c(this._polylines)&&(this._polylines.update(t),n=n&&this._polylines.ready),c(this._points)&&(this._points.update(t),n=n&&this._points.ready),c(this._batchTable)&&n&&(c(this._features)||cK(this),this._batchTable.update(e,t),this._ready=!0)};ff.prototype.pick=function(e,t,n){};ff.prototype.getPolylinePositions=function(e){let t=this._polylines;if(c(t))return t.getPositions(e)};ff.prototype.isDestroyed=function(){return!1};ff.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(),he(this)};function mQe(e,t,n,i,o,r){let s=t.length,a=0;for(let l=0;l=0?i[r]:void 0}var k_=pQe;var cYn=_(T(),1);var tYn=_(T(),1);function Rb(e){e=e??z.EMPTY_OBJECT;let t=e.tile,n=e.class;C.typeOf.object("options.tile",t),C.typeOf.object("options.class",n),this._class=n,this._properties=t.properties,this._extensions=t.extensions,this._extras=t.extras}Object.defineProperties(Rb.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Rb.prototype.hasProperty=function(e){return Nn.hasProperty(e,this._properties,this._class)};Rb.prototype.hasPropertyBySemantic=function(e){return Nn.hasPropertyBySemantic(e,this._properties,this._class)};Rb.prototype.getPropertyIds=function(e){return Nn.getPropertyIds(this._properties,this._class,e)};Rb.prototype.getProperty=function(e){return Nn.getProperty(e,this._properties,this._class)};Rb.prototype.setProperty=function(e,t){return Nn.setProperty(e,t,this._properties,this._class)};Rb.prototype.getPropertyBySemantic=function(e){return Nn.getPropertyBySemantic(e,this._properties,this._class)};Rb.prototype.setPropertyBySemantic=function(e,t){return Nn.setPropertyBySemantic(e,t,this._properties,this._class)};var dP=Rb;function dK(e,t){let n=ri(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!c(n))return;if(!c(e.schema)){dK._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??z.EMPTY_OBJECT;if(c(n.class)){let o=i[n.class];return new dP({tile:n,class:o})}}dK._oneTimeWarning=ht;var uP=dK;var IYn=_(T(),1);var pYn=_(T(),1);function bQe(e){let t=new Uint8Array(e),n=Hm(t);if(n==="glTF"&&(n="glb"),Zs.isBinaryFormat(n))return{contentType:n,binaryPayload:t};let i=yQe(t);if(c(i.root))return{contentType:Zs.EXTERNAL_TILESET,jsonPayload:i};if(c(i.asset))return{contentType:Zs.GLTF,jsonPayload:i};if(c(i.tileAvailability))return{contentType:Zs.IMPLICIT_SUBTREE_JSON,jsonPayload:i};if(c(i.type))return{contentType:Zs.GEOJSON,jsonPayload:i};if(c(i.voxelTable))return{contentType:Zs.VOXEL_JSON,jsonPayload:i};throw new le("Invalid tile content.")}function yQe(e){let t;try{t=er(e)}catch{throw new le("Invalid tile content.")}return t}var Gb=bQe;function Bu(e,t,n,i){this._tileset=e,this._tile=t,this._tilesetResource=n,this._contents=[],this._contentsCreated=!1;let o=c(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;sTQe(e,r,s)),o=await Promise.all(i);if(e._contentsCreated=!0,e._contents=o.filter(c),e._externalTilesetCount===e._contents.length){let r=e._tile;r.hasRenderableContent=!1}return o}async function TQe(e,t,n){if(c(t))try{let i=Gb(t),o=e._tileset,r=e._innerContentResources[n],s=e._tile;i.contentType===Zs.EXTERNAL_TILESET&&(e._externalTilesetCount++,s.hasTilesetContent=!0),e._disableSkipLevelOfDetail=e._disableSkipLevelOfDetail||i.contentType===Zs.GEOMETRY||i.contentType===Zs.VECTOR;let a,l=M_[i.contentType];c(i.binaryPayload)?a=await Promise.resolve(l(o,s,r,i.binaryPayload.buffer,0)):a=await Promise.resolve(l(o,s,r,i.jsonPayload));let d=e._innerContentHeaders[n];if(s.hasImplicitContentMetadata){let f=s.implicitSubtree,p=s.implicitCoordinates;a.metadata=f.getContentMetadataView(p,n)}else s.hasImplicitContent||(a.metadata=N_(o,d));let u=k_(o,d);return c(u)&&(a.group=new e_({metadata:u})),a}catch(i){Jle(e,n,i)}}function Jle(e,t,n){let i=e._tileset,o=e._innerContentResources[t].url,r=c(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}`))}Bu.prototype.cancelRequests=function(){for(let e=0;ea?y=w.TWO_PI-l+a:y=a-l;let g=Math.ceil(y/t)+1,x=Math.ceil(h/t)+1,S=y/(g-1),V=h/(x-1),Z=de.northwest(e,r),R=de.center(e,VQe);(n!==0||i!==0)&&(R.longitudew.PI_OVER_TWO||u<-w.PI_OVER_TWO||u>w.PI_OVER_TWO)throw new L("Rotated rectangle is invalid. It crosses over either the north or south pole.");N.granYCos=b.granYCos,N.granYSin=b.granYSin,N.granXCos=b.granXCos,N.granXSin=b.granXSin,F.north=d,F.south=u,F.east=a,F.west=l}if(i!==0){n=n-i;let b=de.northwest(F,s),G=qle(b,n,S,V,R,g,x);N.stGranYCos=G.granYCos,N.stGranXCos=G.granXCos,N.stGranYSin=G.granYSin,N.stGranXSin=G.granXSin,N.stNwCorner=b,N.stWest=G.west,N.stSouth=G.south}return N};var Rs=mK;var LQe=new ue,ZQe=new ue,RQe=new m,GQe=new de;function $le(e,t){let n=e._ellipsoid,i=t.height,o=t.width,r=t.northCap,s=t.southCap,a=i,l=2,d=0,u=4;r&&(l-=1,a-=1,d+=1,u-=2),s&&(l-=1,a-=1,d+=1,u-=2),d+=l*o+2*a-u;let f=new Float64Array(d*3),p=0,y=0,h,g=RQe;if(r)Rs.computePosition(t,n,!1,y,0,g),f[p++]=g.x,f[p++]=g.y,f[p++]=g.z;else for(h=0;h=0;h--)Rs.computePosition(t,n,!1,y,h,g),f[p++]=g.x,f[p++]=g.y,f[p++]=g.z;for(h=0,y=i-2;y>0;y--)Rs.computePosition(t,n,!1,y,h,g),f[p++]=g.x,f[p++]=g.y,f[p++]=g.z;let x=f.length/3*2,S=Me.createTypedArray(f.length/3,x),V=0;for(let R=0;R0){Hu.longitude=(t.west+t.east)*.5,Hu.latitude=d;let g=n.cartographicToCartesian(Hu,_1.origin);m.clone(l,_1.direction);let x=cn.fromPointNormal(e.southwestCornerCartesian,e.westNormal,ode);qn.rayPlane(_1,x,e.southwestCornerCartesian),u=n.geodeticSurfaceNormal(g,Sk)}else u=n.geodeticSurfaceNormalCartographic(de.southeast(t),Sk);let f=m.cross(u,a,ide);m.normalize(f,e.southNormal);let p=t.north,y;if(p<0){Hu.longitude=(t.west+t.east)*.5,Hu.latitude=p;let g=n.cartographicToCartesian(Hu,_1.origin);m.negate(l,_1.direction);let x=cn.fromPointNormal(e.northeastCornerCartesian,e.eastNormal,ode);qn.rayPlane(_1,x,e.northeastCornerCartesian),y=n.geodeticSurfaceNormal(g,Sk)}else y=n.geodeticSurfaceNormalCartographic(de.northwest(t),Sk);let h=m.cross(a,y,ide);m.normalize(h,e.northNormal)}var FQe=new m,AQe=new m,MQe=new m(0,-1,0),NQe=new m(0,0,-1),rde=new m;function kQe(e,t){let n=t.camera,i=n.positionWC,o=n.positionCartographic,r=0;if(!de.contains(e.rectangle,o)){let d=e.southwestCornerCartesian,u=e.northeastCornerCartesian,f=e.westNormal,p=e.southNormal,y=e.eastNormal,h=e.northNormal;t.mode!==se.SCENE3D&&(d=t.mapProjection.project(de.southwest(e.rectangle),FQe),d.z=d.y,d.y=d.x,d.x=0,u=t.mapProjection.project(de.northeast(e.rectangle),AQe),u.z=u.y,u.y=u.x,u.x=0,f=MQe,y=m.UNIT_Y,p=NQe,h=m.UNIT_Z);let g=m.subtract(i,d,rde),x=m.dot(g,f),S=m.dot(g,p),V=m.subtract(i,u,rde),Z=m.dot(V,y),R=m.dot(V,h);x>0?r+=x*x:Z>0&&(r+=Z*Z),S>0?r+=S*S:R>0&&(r+=R*R)}let s,a,l;if(t.mode===se.SCENE3D?(s=o.height,a=e.minimumHeight,l=e.maximumHeight):(s=i.x,a=0,l=0),s>l){let d=s-l;r+=d*d}else if(s0?(n.push(0),i.push(this._planeVertices[0]),o=this._edgeNormals[0]):cn.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,cn.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,l;if(n.length===1)return l=this._boundingPlanes[n[0]],a=SK(cn.projectPointOntoPlane(l,t,TK),i[0],l,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=mde(t,p[0],p[1]),m.distance(a,t)}let u=Number.MAX_VALUE,f;for(r=0;r<2;r++)l=this._boundingPlanes[n[r]],a=SK(cn.projectPointOntoPlane(l,t,TK),i[r],l,this._edgeNormals[n[r]]),f=m.distanceSquared(a,t),f3)return a=SK(cn.projectPointOntoPlane(this._boundingPlanes[1],t,TK),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 ije=new m,oje=new m;function mde(e,t,n){let i=m.subtract(n,t,ije),o=m.subtract(e,t,oje),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 rje=new cn(m.UNIT_X,0);function SK(e,t,n,i){let o=Number.MAX_VALUE,r,s,a;for(let l=0;l0&&(h=!0,f+=d),s1||ri(n,"3DTILES_multiple_contents"),s=o&&!r?n.contents[0]:n.content;this._contentHeader=s,this.transform=c(n.transform)?M.unpack(n.transform):M.clone(M.IDENTITY);let a=c(i)?i.computedTransform:e.modelMatrix,l=M.multiply(a,this.transform,new M),d=c(i)?i._initialTransform:M.IDENTITY;this._initialTransform=M.multiply(d,this.transform,new M),this.computedTransform=l,this.metadata=uP(e,n),this._verticalExaggeration=1,this._verticalExaggerationRelativeHeight=0,this._boundingVolume=this.createBoundingVolume(n.boundingVolume,l),this._boundingVolume2D=void 0;let u;c(s)&&c(s.boundingVolume)&&(u=this.createBoundingVolume(s.boundingVolume,l)),this._contentBoundingVolume=u,this._contentBoundingVolume2D=void 0;let f;c(n.viewerRequestVolume)&&(f=this.createBoundingVolume(n.viewerRequestVolume,l)),this._viewerRequestVolume=f,this.geometricError=n.geometricError,this._geometricError=n.geometricError,c(this._geometricError)||(this._geometricError=c(i)?i._geometricError:e._geometricError,or._deprecationWarning("geometricErrorUndefined","Required property geometricError is undefined for this tile. Using parent's geometric error instead.")),this.updateGeometricErrorScale();let p;c(n.refine)?((n.refine==="replace"||n.refine==="add")&&or._deprecationWarning("lowercase-refine",`This tile uses a lowercase refine "${n.refine}". Instead use "${n.refine.toUpperCase()}".`),p=n.refine.toUpperCase()==="REPLACE"?Bo.REPLACE:Bo.ADD):c(i)?p=i.refine:p=Bo.REPLACE,this.refine=p,this.children=[],this.parent=i;let y,h=!1,g,x,S;if(t=Ge.createIfNeeded(t),r)g=Ho.UNLOADED,x=t.clone();else if(c(s)){let E=s.uri;c(s.url)&&(or._deprecationWarning("contentUrl",'This tileset JSON uses the "content.url" property which has been deprecated. Use "content.uri" instead.'),E=s.url),E===""?(or._deprecationWarning("contentUriEmpty","content.uri property is an empty string, which creates a circular dependency, making this tileset invalid. Omit the content property instead"),y=new y1(e,this),h=!0,g=Ho.READY):(g=Ho.UNLOADED,x=t.getDerivedResource({url:E}),S=ic.getServerKey(x.getUrlComponent()))}else y=new y1(e,this),h=!0,g=Ho.READY;this._content=y,this._contentResource=x,this._contentState=g,this._expiredContent=void 0,this._serverKey=S,this.hasEmptyContent=h,this.hasTilesetContent=!1,this.hasImplicitContent=!1,this.hasRenderableContent=!h,this.hasImplicitContentMetadata=!1,this.hasMultipleContents=r,this.cacheNode=void 0;let V=n.expire,Z,R;c(V)&&(Z=V.duration,c(V.date)&&(R=ee.fromIso8601(V.date))),this.expireDuration=Z,this.expireDate=R,this.lastStyleTime=0,this._optimChildrenWithinParent=Du.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=Y.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 ee,this._commandsLength=0,this._color=void 0,this._colorDirty=!1,this._request=void 0}or._deprecationWarning=Cs;Object.defineProperties(or.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 c(this._color)||(this._color=new Y),Y.clone(this._color)},set:function(e){this._color=Y.clone(e,this._color),this._colorDirty=!0}},contentAvailable:{get:function(){return this.contentReady&&this.hasRenderableContent||c(this._expiredContent)&&!this.contentFailed}},contentReady:{get:function(){return this._contentState===Ho.READY}},contentUnloaded:{get:function(){return this._contentState===Ho.UNLOADED}},hasUnloadedRenderableContent:{get:function(){return this.hasRenderableContent&&this.contentUnloaded}},contentExpired:{get:function(){return this._contentState===Ho.EXPIRED}},contentFailed:{get:function(){return this._contentState===Ho.FAILED}},commandsLength:{get:function(){return this._commandsLength}}});var Uy=new m;function mje(e,t){let{tileset:n,boundingSphere:i}=e,{radius:o,center:r}=i,{camera:s}=t,a=m.multiplyByScalar(s.directionWC,e._centerZDepth,Uy),l=m.add(s.positionWC,a,Uy),d=m.subtract(l,r,Uy);if(m.magnitude(d)>o){let R=m.normalize(d,Uy),E=m.multiplyByScalar(R,o,Uy),I=m.add(r,E,Uy),v=m.subtract(I,s.positionWC,Uy),P=m.normalize(v,Uy);e._foveatedFactor=1-Math.abs(m.dot(s.directionWC,P))}else e._foveatedFactor=0;let p=e.refine===Bo.REPLACE,y=n.isSkippingLevelOfDetail;if(p&&!y||!n.foveatedScreenSpaceError||n.foveatedConeSize===1||e._priorityProgressiveResolution&&p&&y||n._pass===Fo.PRELOAD_FLIGHT||n._pass===Fo.PRELOAD)return!1;let h=1-Math.cos(s.frustum.fov*.5),g=n.foveatedConeSize*h;if(e._foveatedFactor<=g)return!1;let x=h-g,S=w.clamp((e._foveatedFactor-g)/x,0,1),V=n.foveatedInterpolationCallback(n.foveatedMinimumScreenSpaceErrorRelaxation,n.memoryAdjustedScreenSpaceError,S),Z=e._screenSpaceError===0&&c(e.parent)?e.parent._screenSpaceError*.5:e._screenSpaceError;return n.memoryAdjustedScreenSpaceError-V<=Z}var _de=new ee;or.prototype.getScreenSpaceError=function(e,t,n){let i=this._tileset,o=n??1,r=c(this.parent)?this.parent.geometricError:i._scaledGeometricError,s=t?r:this.geometricError;if(s===0)return 0;let{camera:a,context:l}=e,d=a.frustum,u=l.drawingBufferWidth,f=l.drawingBufferHeight*o,p;if(e.mode===se.SCENE2D||d instanceof sn){let y=d.offCenterFrustum;c(y)&&(d=y);let h=Math.max(d.top-d.bottom,d.right-d.left)/Math.max(u,f);p=s/h}else{let y=Math.max(this._distanceToCamera,w.EPSILON7),h=d.sseDenominator;if(p=s*f/(y*h),i.dynamicScreenSpaceError){let g=i._dynamicScreenSpaceErrorComputedDensity,x=i.dynamicScreenSpaceErrorFactor,S=w.fog(y,g)*x;p-=S}}return p/=e.pixelRatio,p};function fje(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=c(o)&&o._screenSpaceErrorProgressiveResolution>n;return r&&s&&(t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!0,i=!0),i}function hje(e,t){let n=t.parent,o=c(n)&&(!e.isSkippingLevelOfDetail||t._screenSpaceError===0||n.hasTilesetContent||n.hasImplicitContent)?n._screenSpaceError:t._screenSpaceError;return e.root._screenSpaceError-o}or.prototype.updateVisibility=function(e){let{parent:t,tileset:n}=this;if(this._updatedVisibilityFrame===n._updatedVisibilityFrame)return;let i=c(t)?t.computedTransform:n.modelMatrix,o=c(t)?t._visibilityPlaneMask:fs.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!==fs.MASK_OUTSIDE,this._inRequestVolume=this.insideViewerRequestVolume(e),this._priorityReverseScreenSpaceError=hje(n,this),this._priorityProgressiveResolution=fje(n,this),this.priorityDeferred=mje(this,e),this._updatedVisibilityFrame=n._updatedVisibilityFrame};or.prototype.updateExpiration=function(){if(c(this.expireDate)&&this.contentReady&&!this.hasEmptyContent&&!this.hasMultipleContents){let e=ee.now(_de);ee.lessThan(this.expireDate,e)&&(this._contentState=Ho.EXPIRED,this._expiredContent=this._content)}};function pje(e){if(!c(e.expireDuration))return;let t=ee.now(_de);ee.addSeconds(t,e.expireDuration,t),c(e.expireDate)?ee.lessThan(e.expireDate,t)&&ee.clone(t,e.expireDate):e.expireDate=ee.clone(t)}function bje(e){return function(){return e._priority}}or.prototype.requestContent=function(){if(!this.hasEmptyContent)return this.hasMultipleContents?yje(this):xje(this)};function yje(e){let t=e._content,n=e._tileset;if(!c(t)){let o=ri(e._header,"3DTILES_multiple_contents")?e._header.extensions["3DTILES_multiple_contents"]:e._header;t=new mP(n,e,e._contentResource.clone(),o),e._content=t}let i=t.requestInnerContents();if(c(i))return e._contentState=Ho.LOADING,i.then(o=>{if(!e.isDestroyed()&&c(o))return e._contentState=Ho.PROCESSING,t}).catch(o=>{if(!e.isDestroyed())throw e._contentState=Ho.FAILED,o})}async function gje(e,t,n,i,o){let r=e._contentState;e._contentState=Ho.LOADING,++t.statistics.numberOfPendingRequests;let s;try{s=await o}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;if(n.cancelled||n.state===jn.CANCELLED){e._contentState=r,++t.statistics.numberOfAttemptedRequests;return}throw e._contentState=Ho.FAILED,a}if(e.isDestroyed()){--t.statistics.numberOfPendingRequests;return}if(n.cancelled||n.state===jn.CANCELLED){e._contentState=r,--t.statistics.numberOfPendingRequests,++t.statistics.numberOfAttemptedRequests;return}try{let a=await _je(e,s);return--t.statistics.numberOfPendingRequests,e.isDestroyed()?void 0:(i&&(e.expireDate=void 0),e._content=a,e._contentState=Ho.PROCESSING,a)}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;throw e._contentState=Ho.FAILED,a}}function xje(e){let t=e._contentResource.clone(),n=e.contentExpired;n&&t.setQueryParameters({expired:e.expireDate.toString()});let i=new Jo({throttle:!0,throttleByServer:!0,type:us.TILES3D,priorityFunction:bje(e),serverKey:e._serverKey});e._request=i,t.request=i;let o=e._tileset,r=t.fetchArrayBuffer();if(!c(r)){++o.statistics.numberOfAttemptedRequests;return}return gje(e,o,i,n,r)}async function _je(e,t){let n=Gb(t),i=e._tileset;i._disableSkipLevelOfDetail=i._disableSkipLevelOfDetail||n.contentType===Zs.GEOMETRY||n.contentType===Zs.VECTOR,(n.contentType===Zs.IMPLICIT_SUBTREE||n.contentType===Zs.IMPLICIT_SUBTREE_JSON)&&(e.hasImplicitContent=!0,e.hasRenderableContent=!1),n.contentType===Zs.EXTERNAL_TILESET&&(e.hasTilesetContent=!0,e.hasRenderableContent=!1);let o,r=M_[n.contentType];if(e.isDestroyed())return;c(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 l=e.implicitSubtree,d=e.implicitCoordinates;o.metadata=l.getContentMetadataView(d,0)}else e.hasImplicitContent||(o.metadata=N_(i,s));let a=k_(i,s);return c(a)&&(o.group=new e_({metadata:a})),o}or.prototype.cancelRequests=function(){this.hasMultipleContents?this._content.cancelRequests():this._request.cancel()};or.prototype.unloadContent=function(){this.hasRenderableContent&&(this._content=this._content&&this._content.destroy(),this._contentState=Ho.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 Tde=new ue;function LK(e,t){if(t.mode!==se.SCENE3D&&!c(e._boundingVolume2D)){let n=e._boundingVolume.boundingSphere,i=ue.projectTo2D(n,t.mapProjection,Tde);e._boundingVolume2D=new Wb(i.center,i.radius)}return t.mode!==se.SCENE3D?e._boundingVolume2D:e._boundingVolume}function Tje(e,t){if(t.mode!==se.SCENE3D&&!c(e._contentBoundingVolume2D)){let n=e._contentBoundingVolume.boundingSphere,i=ue.projectTo2D(n,t.mapProjection,Tde);e._contentBoundingVolume2D=new Wb(i.center,i.radius)}return t.mode!==se.SCENE3D?e._contentBoundingVolume2D:e._contentBoundingVolume}or.prototype.visibility=function(e,t){let n=e.cullingVolume,i=LK(this,e),o=this._tileset,r=o.clippingPlanes;if(c(r)&&r.enabled){let a=r.computeIntersectionWithBoundingVolume(i,o.clippingPlanesOriginMatrix);if(this._isClipped=a!==zt.INSIDE,a===zt.OUTSIDE)return fs.MASK_OUTSIDE}let s=o.clippingPolygons;if(c(s)&&s.enabled){let a=s.computeIntersectionWithBoundingVolume(i);this._isClippedByPolygon=a!==zt.OUTSIDE}return n.computeVisibilityWithPlaneMask(i,t)};or.prototype.contentVisibility=function(e){if(!c(this._contentBoundingVolume))return zt.INSIDE;if(this._visibilityPlaneMask===fs.MASK_INSIDE)return zt.INSIDE;let t=e.cullingVolume,n=Tje(this,e),i=this._tileset,o=i.clippingPlanes;if(c(o)&&o.enabled){let s=o.computeIntersectionWithBoundingVolume(n,i.clippingPlanesOriginMatrix);if(this._isClipped=s!==zt.INSIDE,s===zt.OUTSIDE)return zt.OUTSIDE}let r=i.clippingPolygons;if(c(r)&&r.enabled){let s=r.computeIntersectionWithBoundingVolume(n);if(this._isClippedByPolygon=s!==zt.OUTSIDE,s===zt.INSIDE)return zt.OUTSIDE}return t.computeVisibility(n)};or.prototype.distanceToTile=function(e){return LK(this,e).distanceToCamera(e)};var Sje=new m;or.prototype.distanceToTileCenter=function(e){let n=LK(this,e).boundingVolume,i=m.subtract(n.center,e.camera.positionWC,Sje);return m.dot(e.camera.directionWC,i)};or.prototype.insideViewerRequestVolume=function(e){let t=this._viewerRequestVolume;return!c(t)||t.distanceToCamera(e)===0};var Sde=new te,Cde=new m,Cje=new te,ZK=new m,Vde=new de,Lde=new Xn,VK=new M;function Vje(e,t,n){let i=m.fromElements(e[0],e[1],e[2],ZK),o=te.fromArray(e,3,Cje);i=M.multiplyByPoint(t,i,i);let r=M.getMatrix3(t,Sde);return o=te.multiply(r,o,o),c(n)?(n.update(i,o),n):new Ol(i,o)}function bde(e,t,n,i){let o=de.unpack(e,0,Vde),r=e[4],s=e[5],a=Xn.fromRectangle(o,r,s,re.WGS84,Lde),l=a.center,d=a.halfAxes;t=M.multiplyTransformation(t,M.inverseTransformation(n,VK),VK),l=M.multiplyByPoint(t,l,l);let u=M.getMatrix3(t,Sde);return d=te.multiply(u,d,d),c(i)&&i instanceof Ol?(i.update(l,d),i):new Ol(l,d)}function Lje(e,t,n,i){if(!M.equalsEpsilon(t,n,w.EPSILON8))return i instanceof Ol?bde(e,t,n,i):bde(e,t,n,void 0);let o=de.unpack(e,0,Vde);return i instanceof Xd?(i.rectangle=de.clone(o,i.rectangle),i.minimumHeight=e[4],i.maximumHeight=e[5],i.computeBoundingVolumes(re.WGS84),i):new Xd({rectangle:o,minimumHeight:e[4],maximumHeight:e[5]})}function Zje(e,t,n){let i=m.fromElements(e[0],e[1],e[2],ZK),o=e[3];i=M.multiplyByPoint(t,i,i);let r=M.getScale(t,Cde),s=m.maximumComponent(r);return o*=s,c(n)?(n.update(i,o),n):new Wb(i,o)}or.prototype.createBoundingVolume=function(e,t,n){let i=this.metadata,o;if(c(i)&&(o=g_.parseBoundingVolumeSemantic("TILE",i)),c(o)&&(e=o),!c(e))throw new le("boundingVolume must be defined");if(ri(e,"3DTILES_bounding_volume_S2"))return new bP(e.extensions["3DTILES_bounding_volume_S2"]);let{box:r,region:s,sphere:a}=e;if(c(r)){let l=Vje(r,t,n);return this._verticalExaggeration!==1&&yde(l,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),l}if(c(s)){let l=Lje(s,t,this._initialTransform,n);return this._verticalExaggeration===1||(l instanceof Ol?yde(l,this._verticalExaggeration,this._verticalExaggerationRelativeHeight):(l.minimumHeight=Lr.getHeight(l.minimumHeight,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),l.maximumHeight=Lr.getHeight(l.maximumHeight,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),l.computeBoundingVolumes(re.WGS84))),l}if(c(a)){let l=Zje(a,t,n);if(this._verticalExaggeration!==1){let d=Lr.getPosition(l.center,re.WGS84,this._verticalExaggeration,this._verticalExaggerationRelativeHeight,ZK),u=l.radius*this._verticalExaggeration;l.update(d,u)}return l}throw new le("boundingVolume must contain a sphere, region, or box")};var Rje=m.unpackArray(new Array(8*3).fill(0));function yde(e,t,n){let i=e.boundingVolume.computeCorners(Rje).map(r=>Lr.getPosition(r,re.WGS84,t,n,r)),o=Xn.fromPoints(i,Lde);e.update(o.center,o.halfAxes)}or.prototype.updateTransform=function(e,t){e=e??M.IDENTITY;let n=M.multiplyTransformation(e,this.transform,VK),i=!M.equals(n,this.computedTransform),o=c(t)&&(this._verticalExaggeration!==t.verticalExaggeration||this._verticalExaggerationRelativeHeight!==t.verticalExaggerationRelativeHeight);if(!i&&!o)return;i&&M.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),c(this._contentBoundingVolume)&&(this._contentBoundingVolume=this.createBoundingVolume(s.boundingVolume,this.computedTransform,this._contentBoundingVolume)),c(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()};or.prototype.updateGeometricErrorScale=function(){let e=M.getScale(this.computedTransform,Cde),t=m.maximumComponent(e);if(this.geometricError=this._geometricError*t,!c(this.parent)){let n=this._tileset;n._scaledGeometricError=n._geometricError*t}};function Gje(e,t,n,i){if(!i.isRender)return;let o=c(e._contentHeader)&&c(e._contentHeader.boundingVolume),r=t.debugShowBoundingVolume||t.debugShowContentBoundingVolume&&!o;if(r){let l;e._finalResolution?e.hasRenderableContent?l=Y.WHITE:l=Y.DARKGRAY:l=Y.YELLOW,c(e._debugBoundingVolume)||(e._debugBoundingVolume=e._boundingVolume.createDebugVolume(l)),e._debugBoundingVolume.update(n);let d=e._debugBoundingVolume.getGeometryInstanceAttributes("outline");d.color=Yt.toValue(l,d.color)}else!r&&c(e._debugBoundingVolume)&&(e._debugBoundingVolume=e._debugBoundingVolume.destroy());t.debugShowContentBoundingVolume&&o?(c(e._debugContentBoundingVolume)||(e._debugContentBoundingVolume=e._contentBoundingVolume.createDebugVolume(Y.BLUE)),e._debugContentBoundingVolume.update(n)):!t.debugShowContentBoundingVolume&&c(e._debugContentBoundingVolume)&&(e._debugContentBoundingVolume=e._debugContentBoundingVolume.destroy()),t.debugShowViewerRequestVolume&&c(e._viewerRequestVolume)?(c(e._debugViewerRequestVolume)||(e._debugViewerRequestVolume=e._viewerRequestVolume.createDebugVolume(Y.YELLOW)),e._debugViewerRequestVolume.update(n)):!t.debugShowViewerRequestVolume&&c(e._debugViewerRequestVolume)&&(e._debugViewerRequestVolume=e._debugViewerRequestVolume.destroy());let s=t.debugColorizeTiles&&!e._debugColorizeTiles||c(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=Y.WHITE),e._colorDirty&&(e._colorDirty=!1,e._content.applyDebugSettings(!0,e._color)),a&&t.makeStyleDirty()}function Eje(e,t,n){let i=e._expiredContent;if(!e.hasMultipleContents&&c(i)){if(!e.contentReady){try{i.update(t,n)}catch{}return}e._expiredContent.destroy(),e._expiredContent=void 0}if(c(e.content))try{e.content.update(t,n)}catch(o){throw e._contentState=Ho.FAILED,o}}function Xje(e,t){let n=t.clippingPlanes,i=0;c(n)&&e._isClipped&&n.enabled&&(i=n.clippingPlanesState),i!==e._clippingPlanesState&&(e._clippingPlanesState=i,e.clippingPlanesDirty=!0)}function Ije(e,t){let n=t.clippingPolygons,i=0;c(n)&&e._isClippedByPolygon&&n.enabled&&(i=n.clippingPolygonsState),i!==e._clippingPolygonsState&&(e._clippingPolygonsState=i,e.clippingPolygonsDirty=!0)}or.prototype.update=function(e,t,n){let{commandList:i}=t,o=i.length;Xje(this,e),Ije(this,e),Gje(this,e,t,n),Eje(this,e,t);let r=i.length;this._commandsLength=r-o;for(let s=o;se.cacheBytes||n);){let s=r.item;r=r.next,this.unloadTile(e,s,t)}};J_.prototype.trim=function(){this._trimTiles=!0};var TP=J_;var DJn=_(T(),1);function Rk(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 GK(e,t){let n;return t==="_loadTimestamp"?n=ee.toDate(e).getTime():n=e,n}Rk.prototype.setReferenceMinimumMaximum=function(e,t,n){this._referenceMinimum[n]=GK(e,n),this._referenceMaximum[n]=GK(t,n)};function Pje(e,t){let n=e.tilePropertyName;if(c(n)){let i=GK(t[n],n);return c(i)?(e._maximum=Math.max(i,e._maximum),e._minimum=Math.min(i,e._minimum),i):(e.tilePropertyName=void 0,i)}}var RK=[new Y(.1,.1,.1,1),new Y(.153,.278,.878,1),new Y(.827,.231,.49,1),new Y(.827,.188,.22,1),new Y(1,.592,.259,1),new Y(1,.843,0,1)];Rk.prototype.colorize=function(e,t){let n=this.tilePropertyName;if(!c(n)||!e.contentAvailable||e._selectedFrame!==t.frameNumber)return;let i=Pje(this,e),o=this._previousMinimum,r=this._previousMaximum;if(o===Number.MAX_VALUE||r===-Number.MAX_VALUE)return;let s=r-o+w.EPSILON7,l=w.clamp(i-o,0,s)/s,d=RK.length-1,u=l*d,f=Math.floor(u),p=Math.ceil(u),y=u-f,h=RK[f],g=RK[p],x=Y.clone(Y.WHITE);x.red=w.lerp(h.red,g.red,y),x.green=w.lerp(h.green,g.green,y),x.blue=w.lerp(h.blue,g.blue,y),e._debugColor=x};Rk.prototype.resetMinimumMaximum=function(){let e=this.tilePropertyName;if(c(e)){let t=this._referenceMinimum[e],n=this._referenceMaximum[e],i=c(t)&&c(n);this._previousMinimum=i?t:this._minimum,this._previousMaximum=i?n:this._maximum,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE}};var SP=Rk;var zJn=_(T(),1);function G1(){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}G1.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};G1.prototype.incrementSelectionCounts=function(e){this.numberOfFeaturesSelected+=e.featuresLength,this.numberOfPointsSelected+=e.pointsLength,this.numberOfTrianglesSelected+=e.trianglesLength;let t=e.innerContents;if(c(t)){let n=t.length;for(let i=0;i>1)&858993459,e=(e^e>>2)&252645135,e=(e^e>>4)&16711935,e=(e^e>>8)&65535,e}function XK(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}LP.encode2D=function(e,t){if(C.typeOf.number("x",e),C.typeOf.number("y",t),e<0||e>65535||t<0||t>65535)throw new L("inputs must be 16-bit unsigned integers");return(Ede(e)|Ede(t)<<1)>>>0};LP.decode2D=function(e,t){if(C.typeOf.number("mortonIndex",e),e<0||e>4294967295)throw new L("input must be a 32-bit unsigned integer");return c(t)||(t=new Array(2)),t[0]=Xde(e),t[1]=Xde(e>>1),t};LP.encode3D=function(e,t,n){if(C.typeOf.number("x",e),C.typeOf.number("y",t),C.typeOf.number("z",n),e<0||e>1023||t<0||t>1023||n<0||n>1023)throw new L("inputs must be 10-bit unsigned integers");return EK(e)|EK(t)<<1|EK(n)<<2};LP.decode3D=function(e,t){if(C.typeOf.number("mortonIndex",e),e<0||e>1073741823)throw new L("input must be a 30-bit unsigned integer");return c(t)||(t=new Array(3)),t[0]=XK(e),t[1]=XK(e>>1),t[2]=XK(e>>2),t};var Oy=LP;function zo(e){if(C.typeOf.string("options.subdivisionScheme",e.subdivisionScheme),C.typeOf.number("options.subtreeLevels",e.subtreeLevels),C.typeOf.number("options.level",e.level),C.typeOf.number("options.x",e.x),C.typeOf.number("options.y",e.y),e.subdivisionScheme===tr.OCTREE&&C.typeOf.number("options.z",e.z),e.level<0)throw new L("level must be non-negative");if(e.x<0)throw new L("x must be non-negative");if(e.y<0)throw new L("y must be non-negative");if(e.subdivisionScheme===tr.OCTREE&&e.z<0)throw new L("z must be non-negative");let t=1<=t)throw new L("x is out of range");if(e.y>=t)throw new L("y is out of range");if(e.subdivisionScheme===tr.OCTREE&&e.z>=t)throw new L("z is out of range");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===tr.OCTREE&&(this.z=e.z)}Object.defineProperties(zo.prototype,{childIndex:{get:function(){let e=0;return e|=this.x&1,e|=(this.y&1)<<1,this.subdivisionScheme===tr.OCTREE&&(e|=(this.z&1)<<2),e}},mortonIndex:{get:function(){return this.subdivisionScheme===tr.OCTREE?Oy.encode3D(this.x,this.y,this.z):Oy.encode2D(this.x,this.y)}},tileIndex:{get:function(){let e=this.subdivisionScheme===tr.OCTREE?((1<<3*this.level)-1)/7:((1<<2*this.level)-1)/3,t=this.mortonIndex;return e+t}}});function IK(e,t){if(e.subdivisionScheme!==t.subdivisionScheme)throw new L("coordinates must have same subdivisionScheme");if(e.subtreeLevels!==t.subtreeLevels)throw new L("coordinates must have same subtreeLevels")}zo.prototype.getDescendantCoordinates=function(e){C.typeOf.object("offsetCoordinates",e),IK(this,e);let t=this.level+e.level,n=(this.x<this.level)throw new L("ancestor cannot be above the tileset root");let t=1<>t,i=e.y>>t,o=this.x===n,r=this.y===i;if(this.subdivisionScheme===tr.OCTREE){let s=e.z>>t,a=this.z===s;return o&&r&&a}return o&&r};zo.prototype.isEqual=function(e){return C.typeOf.object("otherCoordinates",e),this.subdivisionScheme===e.subdivisionScheme&&this.subtreeLevels===e.subtreeLevels&&this.level===e.level&&this.x===e.x&&this.y===e.y&&(this.subdivisionScheme===tr.OCTREE?this.z===e.z:!0)};zo.prototype.isImplicitTilesetRoot=function(){return this.level===0};zo.prototype.isSubtreeRoot=function(){return this.level%this.subtreeLevels===0};zo.prototype.isBottomOfSubtree=function(){return this.level%this.subtreeLevels===this.subtreeLevels-1};zo.prototype.getTemplateValues=function(){let e={level:this.level,x:this.x,y:this.y};return this.subdivisionScheme===tr.OCTREE&&(e.z=this.z),e};var Ide=[0,0,0];zo.fromMortonIndex=function(e,t,n,i){let o;return e===tr.OCTREE?(o=Oy.decode3D(i,Ide),new zo({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1],z:o[2]})):(o=Oy.decode2D(i,Ide),new zo({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1]}))};zo.fromTileIndex=function(e,t,n){let i,o,r;return e===tr.OCTREE?(i=Math.floor(w.log2(7*n+1)/3),o=((1<<3*i)-1)/7,r=n-o):(i=Math.floor(w.log2(3*n+1)/2),o=((1<<2*i)-1)/3,r=n-o),zo.fromMortonIndex(e,t,i,r)};var j_=zo;var XQn=_(T(),1);var VQn=_(T(),1);function vb(){}vb.selectTiles=function(e,t){L.throwInstantiationError()};vb.sortChildrenByDistanceToCamera=function(e,t){return t._distanceToCamera===0&&e._distanceToCamera===0?t._centerZDepth-e._centerZDepth:t._distanceToCamera-e._distanceToCamera};vb.canTraverse=function(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:e._screenSpaceError>e.tileset.memoryAdjustedScreenSpaceError};vb.selectTile=function(e,t){if(e.contentVisibility(t)===zt.OUTSIDE)return;e._wasSelectedLastFrame=!0;let{content:n,tileset:i}=e;n.featurePropertiesDirty?(n.featurePropertiesDirty=!1,e.lastStyleTime=0,i._selectedTilesToStyle.push(e)):e._selectedFrame0;if((e.hasTilesetContent||e.hasImplicitContent)&&n){let r=e.children[0];Wde(r,t),e._visible=r._visible;return}if(Nje(e,t)){e._visible=!1;return}let i=e.refine===Bo.REPLACE,o=e._optimChildrenWithinParent===Du.USE_OPTIMIZATION;if(i&&o&&n&&!kje(e,t)){++e.tileset._statistics.numberOfTilesCulledWithChildrenUnion,e._visible=!1;return}}function Nje(e,t){let{parent:n,tileset:i}=e;return!c(n)||n.hasTilesetContent||n.hasImplicitContent||n.refine!==Bo.ADD?!1:e.getScreenSpaceError(t,!0)<=i.memoryAdjustedScreenSpaceError}function kje(e,t){let n=!1,i=e.children;for(let o=0;o0;){ZP.stackMaximumLength=Math.max(ZP.stackMaximumLength,s.length);let a=s.pop(),l=a.refine===Bo.ADD,d=a.refine===Bo.REPLACE,u=Oje(a);u&&Dje(a,s,t),(l||d&&!u)&&(Bje(e,a),o(a,t),Yje(a,t),a.hasRenderableContent&&!a.contentAvailable&&(n=!1)),r(a,t)}return ZP.stack.trim(ZP.stackMaximumLength),n};function Oje(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:(e.hasEmptyContent,!0)}function Dje(e,t,n){let{children:i}=e;for(let o=0;o0;){GP.stackMaximumLength=Math.max(GP.stackMaximumLength,a.length);let l=a.pop(),d=l.parent,u=!c(d)||d._refines;l._refines=i(l)?Hje(l,a,t)&&u:!1;let f=!l._refines&&u;l.hasRenderableContent?l.refine===Bo.ADD?(WK(l,t),o(l,t)):l.refine===Bo.REPLACE&&(o(l,t),f&&WK(l,t)):(n._emptyTiles.push(l),o(l,t),f&&WK(l,t)),r(l,t),s(l,t)}}function Kje(e,t){let{canTraverse:n,updateTile:i,loadTile:o,touchTile:r}=zs,s=!0,a=EP.stack;for(a.push(e);a.length>0;){EP.stackMaximumLength=Math.max(EP.stackMaximumLength,a.length);let l=a.pop(),d=l.children,u=d.length,f=!l.hasRenderableContent&&n(l);if(!f&&!l.contentAvailable&&(s=!1),i(l,t),l.isVisible||(o(l,t),r(l,t)),f)for(let p=0;p0;){WP.stackMaximumLength=Math.max(WP.stackMaximumLength,r.length);let a=r.pop().children;for(let l=0;ln._depth+e.skipLevels)}function $je(e,t,n){let{tileset:i,children:o}=e,{updateTile:r,loadTile:s,touchTile:a}=zs;for(let d=0;dt:e._screenSpaceError>t:!0}function t4e(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}=zs,l=IP.stack;for(l.push(e);l.length>0;){IP.stackMaximumLength=Math.max(IP.stackMaximumLength,l.length);let d=l.pop();jje(d,t);let u=d.parent,f=!c(u)||u._refines;d._refines=o(d)?$je(d,l,t)&&f:!1;let p=!d._refines&&f;d.hasRenderableContent?d.refine===Bo.ADD?(Gk(d,t),r(d,t)):d.refine===Bo.REPLACE&&(e4e(d,i)?(r(d,t),p&&Gk(d,t)):p?(Gk(d,t),r(d,t)):qje(n,d)&&r(d,t)):(n._emptyTiles.push(d),r(d,t),p&&Gk(d,t)),s(d,t),a(d,t)}}function n4e(e,t){let{selectTile:n,canTraverse:i}=zs,{stack:o,ancestorStack:r}=Fb,s;for(o.push(e);o.length>0||r.length>0;){if(Fb.stackMaximumLength=Math.max(Fb.stackMaximumLength,o.length),Fb.ancestorStackMaximumLength=Math.max(Fb.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(!c(a))continue;let l=i(a);if(a._shouldSelect)if(a.refine===Bo.ADD)n(a,t);else{if(a._selectionDepth=r.length,a._selectionDepth>0&&(a.tileset.hasMixedContent=!0),s=a,!l){n(a,t);continue}r.push(a),a._stackLength=o.length}if(l){let d=a.children;for(let u=0;uui._defaultMinTerrainHeight&&(s._initialClippingPlanesOriginMatrix=wt.eastNorthUpToFixedFrame(p)),s._clippingPlanesOriginMatrix=M.clone(s._initialClippingPlanesOriginMatrix),s};rr.loadJson=function(e){return Ge.createIfNeeded(e).fetchJson()};rr.prototype.makeStyleDirty=function(){this._styleEngine.makeDirty()};rr.prototype.loadTileset=function(e,t,n){let i=t.asset;if(!c(i))throw new le("Tileset must have an asset property.");if(i.version!=="0.0"&&i.version!=="1.0"&&i.version!=="1.1")throw new le("The tileset must be 3D Tiles version 0.0, 1.0, or 1.1");c(t.extensionsRequired)&&rr.checkSupportedExtensions(t.extensionsRequired);let o=this._statistics,r=i.tilesetVersion;c(r)&&(this._basePath+=`?v=${r}`,e=e.clone(),e.setQueryParameters({v:r}));let s=Fde(this,e,t.root,n);c(n)&&(n.children.push(s),s._depth=n._depth+1);let a=[];for(a.push(s);a.length>0;){let l=a.pop();++o.numberOfTilesTotal,this._allTilesAdditive=this._allTilesAdditive&&l.refine===Bo.ADD;let d=l._header.children;if(c(d))for(let u=0;ux.minimumRadius){let Z=pe.fromCartesian(V,x,o4e);n=m.normalize(a.positionWC,Ade),i=a.directionWC,o=a.positionCartographic.height,r=0,s=Z.height*2}else{let Z=M.multiplyByPoint(g,a.positionWC,a4e);if(n=m.UNIT_Z,i=M.multiplyByPointAsVector(g,a.directionWC,c4e),i=m.normalize(i,i),o=Z.z,d instanceof Ol){let R=te.getColumn(S.halfAxes,2,l4e),E=m.magnitude(R);r=V.z-E,s=V.z+E}else if(d instanceof Wb){let R=S.radius;r=V.z-R,s=V.z+R}}}let u=e.dynamicScreenSpaceErrorHeightFalloff,f=r+(s-r)*u,p=s,y=w.clamp((o-f)/(p-f),0,1),h=1-Math.abs(m.dot(i,n));h=h*(1-y),e._dynamicScreenSpaceErrorComputedDensity=e.dynamicScreenSpaceErrorDensity*h}function u4e(e,t){if(t.hasEmptyContent)return;let{statistics:n}=e,i=t.contentExpired,o=t.requestContent();c(o)&&(o.then(r=>{!c(r)||t.isDestroyed()||e.isDestroyed()||(e._processingQueue.push(t),++n.numberOfTilesProcessing)}).catch(r=>{kde(r,e,t)}),i&&(t.hasTilesetContent||t.hasImplicitContent?L4e(e,t):(n.decrementLoadCounts(t.content),--n.numberOfTilesWithContentReady)),e._requestedTilesInFlight.push(t))}function Nde(e,t){return e._priority-t._priority}rr.prototype.postPassesUpdate=function(e){c(this._root)&&(m4e(this,e),R4e(this,e),this._cache.unloadTiles(this,Ode),this._styleApplied&&this._styleEngine.resetDirty(),this._styleApplied=!1)};rr.prototype.prePassesUpdate=function(e){if(!c(this._root))return;x4e(this,e);let t=this._clippingPlanes;this._clippingPlanesOriginMatrixDirty=!0,c(t)&&t.enabled&&t.update(e);let n=this._clippingPolygons;c(n)&&n.enabled&&n.update(e),c(this._loadTimestamp)||(this._loadTimestamp=ee.clone(e.time)),this._timeSinceLoad=Math.max(ee.secondsDifference(e.time,this._loadTimestamp)*1e3,0),this.dynamicScreenSpaceError&&d4e(this,e),e.newFrame&&this._cache.reset()};function m4e(e,t){let n=e._requestedTilesInFlight,i=0;for(let o=0;o=1;if(r._contentState!==Ho.LOADING){++i;continue}else if(s){r.cancelRequests(),++i;continue}i>0&&(n[o-i]=r)}n.length-=i}function f4e(e){let t=e._requestedTiles;t.sort(Nde);for(let n=0;n0?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 h4e(e){let t=e._processingQueue,n=0;for(let i=0;i0&&(t[i-n]=o)}t.length-=n}var p4e=new pe,b4e=new pe,y4e=new m;function g4e(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=pe.clone(r.positionCartographic,p4e),l=pe.fromCartesian(o.center,s,b4e);c(l)&&(a.height=l.height);let d=pe.toCartesian(a,s,y4e);m.distance(d,o.center)<=o.radius&&(r.invoked=!0,n.afterRender.push(()=>{c(r.callback)&&r.callback(),r.invoked=!1}))}}function x4e(e,t){h4e(e);let n=e._processingQueue,{cacheBytes:i,maximumCacheOverflowBytes:o,statistics:r}=e,s=i+o,a=!1;for(let l=0;ls){a=!0;break}let d=n[l];try{d.process(e,t),d.contentReady&&(--r.numberOfTilesProcessing,e.tileLoad.raiseEvent(d))}catch(u){--r.numberOfTilesProcessing,kde(u,e,d)}}e.totalMemoryUsageInBytes0&&_4e(e)}function _4e(e){ht("increase-screenSpaceError",`The tiles needed to meet maximumScreenSpaceError would use more memory than allocated for this tileset. The tileset will be rendered with a larger screen space error (see memoryAdjustedScreenSpaceError). Consider using larger values for cacheBytes and maximumCacheOverflowBytes.`),e._memoryAdjustedScreenSpaceError*=1.02;let t=e._processingQueue;for(let n=0;n0&&(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: ${Mde(e.content.texturesByteLength)}`,i+=` Geometry Memory: ${Mde(e.content.geometryByteLength)}`,o+=2),t.debugShowUrl)if(e.hasMultipleContents){i+=` Urls:`;let s=e.content.innerContentUrls;for(let a=0;a0;e._backfaceCommands.length=0,a&&(c(e._stencilClearCommand)||(e._stencilClearCommand=new ti({stencil:0,pass:Xe.CESIUM_3D_TILE,renderState:Oe.fromCache({stencilMask:kt.SKIP_LOD_MASK})})),i.push(e._stencilClearCommand));let{statistics:l,tileVisible:d}=e,u=n.isRender,f=i.length;for(let h=0;h=0;--x)i[f+g+x]=i[f+x];for(let x=0;x0&&e._pointCloudEyeDomeLighting.update(t,r,e.pointCloudShading,e.boundingSphere),e.debugShowGeometricError||e.debugShowRenderingStatistics||e.debugShowMemoryUsage||e.debugShowUrl?(c(e._tileDebugLabels)||(e._tileDebugLabels=new Gh),C4e(e,t)):e._tileDebugLabels=e._tileDebugLabels&&e._tileDebugLabels.destroy())}var Ude=[];function L4e(e,t){let n=t,i=Ude;for(i.push(t);i.length>0;){t=i.pop();let o=t.children;for(let r=0;r{t.push(Ct.clone(i))});let n=e.asset.extras;if(c(n)&&c(n.cesium)&&c(n.cesium.credits)){let i=n.cesium.credits;for(let o=0;oi.showOnScreen=i.showOnScreen||e._showCreditsOnScreen),e._credits=t}rr.prototype.getTraversal=function(e){let{pass:t}=e;return t===Fo.MOST_DETAILED_PRELOAD||t===Fo.MOST_DETAILED_PICK?RP:this.isSkippingLevelOfDetail?wP:XP};rr.prototype.update=function(e){this.updateForPass(e,e.tilesetPassState)};rr.prototype.updateForPass=function(e,t){C.typeOf.object("frameState",e),C.typeOf.object("tilesetPassState",t);let n=t.pass;if(n===Fo.PRELOAD&&(!this.preloadWhenHidden||this.show)||n===Fo.PRELOAD_FLIGHT&&(!this.preloadFlightDestinations||!this.show&&!this.preloadWhenHidden)||n===Fo.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=Fo.getPassOptions(n),a=s.ignoreCommands,l=t.commandList??i,d=l.length;if(e.commandList=l,e.camera=t.camera??o,e.cullingVolume=t.cullingVolume??r,s.isRender){let p=this._environmentMapManager;c(this._root)&&(p.position=this.boundingSphere.center),p.update(e)}let u=this._clippingPolygons;c(u)&&u.enabled&&u.queueCommands(e);let f=this._statisticsPerPass[n];(this.show||a)&&(this._pass=n,t.ready=X4e(this,e,f,s)),a&&(l.length=d),e.commandList=i,e.camera=o,e.cullingVolume=r};rr.prototype.hasExtension=function(e){return c(this._extensionsUsed)?this._extensionsUsed.indexOf(e)>-1:!1};rr.prototype.isDestroyed=function(){return!1};rr.prototype.destroy=function(){if(this._tileDebugLabels=this._tileDebugLabels&&this._tileDebugLabels.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._clippingPolygons=this._clippingPolygons&&this._clippingPolygons.destroy(),c(this._root)){let e=Ude;for(e.push(this._root);e.length>0;){let t=e.pop();t.destroy();let n=t.children;for(let i=0;i{let r=this._addHeightCallbacks,s=r.length;for(let a=0;a{let u=ue.distanceSquaredTo(l.contentBoundingVolume.boundingSphere,e.origin),f=ue.distanceSquaredTo(d.contentBoundingVolume.boundingSphere,e.origin);return u-f});let a;for(let l=0;l-1;i--)vK(this,e[i],t,n);return he(this)};Dy.prototype.getBoundingSphere=function(e,t){if(!c(e))throw new L("entity is required.");if(!c(t))throw new L("result is required.");let n=this._tilesetHash[e.id];if(!c(n)||n.loadFail)return ut.FAILED;let i=n.tilesetPrimitive;return c(i)?i.show?(ue.clone(i.boundingSphere,t),ut.DONE):ut.FAILED:ut.PENDING};Dy.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._entitiesToVisualize,a=this._tilesetHash,l=this._primitives;for(o=t.length-1;o>-1;o--)r=t[o],c(r._tileset)&&s.set(r.id,r);for(o=i.length-1;o>-1;o--)r=i[o],c(r._tileset)?s.set(r.id,r):(vK(this,r,a,l),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],vK(this,r,a,l),s.remove(r.id)};function vK(e,t,n,i){let o=n[t.id];c(o)&&(c(o.tilesetPrimitive)&&i.removeAndDestroy(o.tilesetPrimitive),delete n[t.id])}async function A4e(e,t,n,i){t[n.id]={url:e.url,loadFail:!1};try{let o=await bs.fromUrl(e);if(o.id=n,i.add(o),!c(t[n.id]))return;t[n.id].tilesetPrimitive=o}catch(o){console.error(o),t[n.id].loadFail=!0}}var PP=Dy;var S4n=_(T(),1);var M4e=Y.WHITE,N4e=Y.BLACK,k4e=new D(2,2);function E1(e){e=e??z.EMPTY_OBJECT,this._definitionChanged=new ye,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(E1.prototype,{isConstant:{get:function(){return J.isConstant(this._evenColor)&&J.isConstant(this._oddColor)&&J.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},evenColor:fe("evenColor"),oddColor:fe("oddColor"),repeat:fe("repeat")});E1.prototype.getType=function(e){return"Checkerboard"};var U4e=new ee;E1.prototype.getValue=function(e,t){return c(e)||(e=ee.now(U4e)),c(t)||(t={}),t.lightColor=J.getValueOrClonedDefault(this._evenColor,e,M4e,t.lightColor),t.darkColor=J.getValueOrClonedDefault(this._oddColor,e,N4e,t.darkColor),t.repeat=J.getValueOrDefault(this._repeat,e,k4e),t};E1.prototype.equals=function(e){return this===e||e instanceof E1&&J.equals(this._evenColor,e._evenColor)&&J.equals(this._oddColor,e._oddColor)&&J.equals(this._repeat,e._repeat)};var X1=E1;var U4n=_(T(),1);var w4n=_(T(),1);var Bde={id:void 0};function vP(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 _c(e){this._owner=e,this._entities=new Zt,this._addedEntities=new Zt,this._removedEntities=new Zt,this._changedEntities=new Zt,this._suspendCount=0,this._collectionChanged=new ye,this._id=Hn(),this._show=!0,this._firing=!1,this._refire=!1}_c.prototype.suspendEvents=function(){this._suspendCount++};_c.prototype.resumeEvents=function(){if(this._suspendCount===0)throw new L("resumeEvents can not be called before suspendEvents.");this._suspendCount--,vP(this)};Object.defineProperties(_c.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(!c(e))throw new L("value is required.");if(e===this._show)return;this.suspendEvents();let t,n=[],i=this._entities.values,o=i.length;for(t=0;t-1;l--)s=a[l],Hde(e,p,y,s);for(r=n-1;r>=0;r--)for(d=t[r],d.collectionChanged.addEventListener(Dr.prototype._onCollectionChanged,e),a=d.values,y=d.id,l=a.length-1;l>-1;l--){s=a[l],Yde(e,p,y,s);let g=f.getById(s.id);c(g)||(g=u.getById(s.id),c(g)?FK(g):(Xk.id=s.id,g=new $o(Xk)),f.add(g)),g.merge(s)}e._collectionsCopy=t.slice(0),u.suspendEvents(),u.removeAll();let h=f.values;for(r=0;rthis._collections.length)throw new L("index must be less than or equal to the number of collections.")}n?this._collections.splice(t,0,e):(t=this._collections.length,this._collections.push(e)),By(this)};Dr.prototype.removeCollection=function(e){let t=this._collections.indexOf(e);return t!==-1?(this._collections.splice(t,1),By(this),!0):!1};Dr.prototype.removeAllCollections=function(){this._collections.length=0,By(this)};Dr.prototype.containsCollection=function(e){return this._collections.indexOf(e)!==-1};Dr.prototype.contains=function(e){return this._composite.contains(e)};Dr.prototype.indexOfCollection=function(e){return this._collections.indexOf(e)};Dr.prototype.getCollection=function(e){if(!c(e))throw new L("index is required.","index");return this._collections[e]};Dr.prototype.getCollectionsLength=function(){return this._collections.length};function Ik(e,t){if(!c(t))throw new L("collection is required.");let n=e.indexOf(t);if(n===-1)throw new L("collection is not in this composite.");return n}function zde(e,t,n){let i=e._collections;if(t=w.clamp(t,0,i.length-1),n=w.clamp(n,0,i.length-1),t===n)return;let o=i[t];i[t]=i[n],i[n]=o,By(e)}Dr.prototype.raiseCollection=function(e){let t=Ik(this._collections,e);zde(this,t,t+1)};Dr.prototype.lowerCollection=function(e){let t=Ik(this._collections,e);zde(this,t,t-1)};Dr.prototype.raiseCollectionToTop=function(e){let t=Ik(this._collections,e);t!==this._collections.length-1&&(this._collections.splice(t,1),this._collections.push(e),By(this))};Dr.prototype.lowerCollectionToBottom=function(e){let t=Ik(this._collections,e);t!==0&&(this._collections.splice(t,1),this._collections.splice(0,0,e),By(this))};Dr.prototype.suspendEvents=function(){this._suspendCount++,this._composite.suspendEvents()};Dr.prototype.resumeEvents=function(){if(this._suspendCount===0)throw new L("resumeEvents can not be called before suspendEvents.");this._suspendCount--,this._shouldRecomposite&&this._suspendCount===0&&(By(this),this._shouldRecomposite=!1),this._composite.resumeEvents()};Dr.prototype.computeAvailability=function(){return this._composite.computeAvailability()};Dr.prototype.getById=function(e){return this._composite.getById(e)};Dr.prototype._onCollectionChanged=function(e,t,n){let i=this._collectionsCopy,o=i.length,r=this._composite;r.suspendEvents();let s,a,l,d,u=n.length,f=this._eventHash,p=e.id;for(s=0;s=0;a--)l=i[a].getById(g),c(l)&&(c(d)||(d=r.getById(g),FK(d)),d.merge(l));c(d)||r.removeById(g),d=void 0}let y=t.length;for(s=0;s=0;a--)l=i[a].getById(g),c(l)&&(c(d)||(d=r.getById(g),c(d)?FK(d):(Xk.id=g,d=new $o(Xk),r.add(d))),d.merge(l));d=void 0}r.resumeEvents()};Dr.prototype._onDefinitionChanged=function(e,t,n,i){let o=this._collections,r=this._composite,s=o.length,a=e.id,l=r.getById(a),d=l[t],u=!c(d),f=!0;for(let p=s-1;p>=0;p--){let y=o[p].getById(e.id);if(c(y)){let h=y[t];if(c(h)){if(f)if(f=!1,c(h.merge)&&c(h.clone))d=h.clone(d);else{d=h;break}d.merge(h)}}}u&&l.propertyNames.indexOf(t)===-1&&l.addProperty(t),l[t]=d};var AK=Dr;var x8n=_(T(),1);var u8n=_(T(),1);var Y4n=_(T(),1);function MK(){this._removalFunctions=[]}MK.prototype.add=function(e,t,n){if(!c(e))throw new L("event is required");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)}};MK.prototype.removeAll=function(){let e=this._removalFunctions;for(let t=0,n=e.length;t0&&(this._intervals.length=0,this._changedEvent.raiseEvent(this))};Br.prototype.findIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t]:void 0};Br.prototype.findDataForIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t].data:void 0};Br.prototype.contains=function(e){return this.indexOf(e)>=0};var NK=new Zn;Br.prototype.indexOf=function(e){if(!c(e))throw new L("date is required");let t=this._intervals;NK.start=e,NK.stop=e;let n=Wo(t,NK,UK);return n>=0?t[n].isStartIncluded?n:n>0&&t[n-1].stop.equals(e)&&t[n-1].isStopIncluded?n-1:~n:(n=~n,n>0&&n-10&&e.isStartIncluded&&n[i-1].isStartIncluded&&n[i-1].start.equals(e.start)?--i:i0&&(o=ee.compare(n[i-1].stop,e.start),(o>0||o===0&&(n[i-1].isStopIncluded||e.isStartIncluded))&&((c(t)?t(n[i-1].data,e.data):n[i-1].data===e.data)?(ee.greaterThan(e.stop,n[i-1].stop)?e=new Zn({start:n[i-1].start,stop:e.stop,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:e.isStopIncluded,data:e.data}):e=new Zn({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=ee.compare(n[i-1].stop,e.stop),(o>0||o===0&&n[i-1].isStopIncluded&&!e.isStopIncluded)&&n.splice(i,0,new Zn({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 Zn({start:n[i-1].start,stop:e.start,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:n[i-1].data}))));i0||o===0&&(e.isStopIncluded||n[i].isStartIncluded));)if(c(t)?t(n[i].data,e.data):n[i].data===e.data)e=new Zn({start:e.start,stop:ee.greaterThan(n[i].stop,e.stop)?n[i].stop:e.stop,isStartIncluded:e.isStartIncluded,isStopIncluded:ee.greaterThan(n[i].stop,e.stop)?n[i].isStopIncluded:e.isStopIncluded,data:e.data}),n.splice(i,1);else if(n[i]=new Zn({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)};Br.prototype.removeInterval=function(e){if(!c(e))throw new L("interval is required");if(e.isEmpty)return!1;let t=this._intervals,n=Wo(t,e,UK);n<0&&(n=~n);let i=!1;for(n>0&&(ee.greaterThan(t[n-1].stop,e.start)||t[n-1].stop.equals(e.start)&&t[n-1].isStopIncluded&&e.isStartIncluded)&&(i=!0,(ee.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 Zn({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 Zn({start:t[n-1].start,stop:e.start,isStartIncluded:t[n-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:t[n-1].data})),n=1e3&&(o+=Math.floor(i/1e3),i=i%1e3),o>=60&&(r+=Math.floor(o/60),o=o%60),r>=60&&(s+=Math.floor(r/60),r=r%60),s>=24&&(a+=Math.floor(s/24),s=s%24),FP[2]=Lm(d)?29:28;a>FP[l]||l>=13;)a>FP[l]&&(a-=FP[l],++l),l>=13&&(--l,d+=Math.floor(l/12),l=l%12,++l),FP[2]=Lm(d)?29:28;return Tc.millisecond=i,Tc.second=o,Tc.minute=r,Tc.hour=s,Tc.day=a,Tc.month=l,Tc.year=d,ee.fromGregorianDate(Tc,n)}var O4e=new ee,D4e=/P(?:([\d.,]+)Y)?(?:([\d.,]+)M)?(?:([\d.,]+)W)?(?:([\d.,]+)D)?(?:T(?:([\d.,]+)H)?(?:([\d.,]+)M)?(?:([\d.,]+)S)?)?/;function Kde(e,t){if(!c(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(D4e);if(!c(n))return!1;if(c(n[1])&&(t.year=Number(n[1].replace(",","."))),c(n[2])&&(t.month=Number(n[2].replace(",","."))),c(n[3])&&(t.day=Number(n[3].replace(",","."))*7),c(n[4])&&(t.day+=Number(n[4].replace(",","."))),c(n[5])&&(t.hour=Number(n[5].replace(",","."))),c(n[6])&&(t.minute=Number(n[6].replace(",","."))),c(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"),ee.toGregorianDate(ee.fromIso8601(e,O4e),t);return t.year||t.month||t.day||t.hour||t.minute||t.second||t.millisecond}var AP=new eh;Br.fromIso8601=function(e,t){if(!c(e))throw new L("options is required.");if(!c(e.iso8601))throw new L("options.iso8601 is required.");let n=e.iso8601.split("/"),i=ee.fromIso8601(n[0]),o=ee.fromIso8601(n[1]),r=[];if(!Kde(n[2],AP))r.push(i,o);else{let s=ee.clone(i);for(r.push(s);ee.compare(s,o)<0;)s=kK(s,AP),ee.compare(o,s)<=0&&ee.clone(o,s),r.push(s)}return Br.fromJulianDateArray({julianDates:r,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};Br.fromIso8601DateArray=function(e,t){if(!c(e))throw new L("options is required.");if(!c(e.iso8601Dates))throw new L("options.iso8601Dates is required.");return Br.fromJulianDateArray({julianDates:e.iso8601Dates.map(function(n){return ee.fromIso8601(n)}),isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};Br.fromIso8601DurationArray=function(e,t){if(!c(e))throw new L("options is required.");if(!c(e.epoch))throw new L("options.epoch is required.");if(!c(e.iso8601Durations))throw new L("options.iso8601Durations is required.");let n=e.epoch,i=e.iso8601Durations,o=e.relativeToPrevious??!1,r=[],s,a,l=i.length;for(let d=0;d=0?-a:a}var s8e=new m(-1,0,0),$_=new M,a8e=new M,BK=new te,c8e=te.IDENTITY.clone(),l8e=new m,d8e=new ce,Jde=new m;function Ab(e,t,n,i,o,r,s,a){let l=l8e,d=d8e;$_=wt.eastNorthUpToFixedFrame(e,o,$_),l=M.multiplyByPointAsVector($_,s8e,l),l=m.normalize(l,l);let u=r8e(l,t,e,o);BK=te.fromRotationZ(u,BK),Jde.z=r,$_=M.multiplyTransformation($_,M.fromRotationTranslation(BK,Jde,a8e),$_);let f=c8e;f[0]=s;for(let p=0;p0){let g=d?2:1;for(let x=0;x=0};var f8e=new m,h8e=new m;MP.computePositions=function(e,t,n,i,o){let r=i._ellipsoid,s=o8e(e,r),a=i._granularity,l=i._cornerType,d=o?m8e(t,n):Qde(t,n),u=o?Qde(t,n):void 0,f=n.height/2,p=n.width/2,y=e.length,h=[],g=o?[]:void 0,x=J4e,S=Q4e,V=j4e,Z=q4e,R=$4e,E=e8e,I=t8e,v=n8e,P=i8e,F=e[0],N=e[1];Z=r.geodeticSurfaceNormal(F,Z),x=m.subtract(N,F,x),x=m.normalize(x,x),v=m.cross(Z,x,v),v=m.normalize(v,v);let b=s[0],G=s[1];o&&(g=Ab(F,v,u,g,r,b+f,1,1)),P=m.clone(F,P),F=N,S=m.negate(x,S);let X,W;for(let B=1;BIe;p--)Ve=w.PI_OVER_TWO-p*_e,ne[me++]=1-be*(1+Math.cos(Ve)),ne[me++]=.5*(1+Math.sin(Ve));for(p=Ie;p>0;p--)Ve=w.PI_OVER_TWO-_e*p,ne[me++]=1-Ce*(1+Math.cos(Ve)),ne[me++]=.5*(1+Math.sin(Ve));for(p=u-x;p>0;p--)ne[me++]=p*Ce,ne[me++]=1;for(p=1;p0;p--)ne[me++]=(p-1)*Ce,ne[me++]=1}l.st=new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:2,values:ne})}return t.normal&&(l.normal=new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:3,values:I.normals})),t.tangent&&(l.tangent=new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:3,values:I.tangents})),t.bitangent&&(l.bitangent=new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:3,values:I.bitangents})),{attributes:l,indices:O}}function R8e(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,l=s*2,d;if(t.normal||t.bitangent||t.tangent){let u=t.normal?new Float32Array(s*6):void 0,f=t.tangent?new Float32Array(s*6):void 0,p=t.bitangent?new Float32Array(s*6):void 0,y=uue,h=mue,g=Fk,x=Ak,S=Z8e,V=fue,Z=l;for(d=0;d-t?(o=P8e,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),QK(e,o,i)};Wh.prototype.computeHorizonCullingPoint=function(e,t,n){return Xue(this._ellipsoid,e,t,n)};var Gue=re.clone(re.UNIT_SPHERE);Wh.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid=function(e,t,n,i){let o=Eue(this._ellipsoid,n,Gue);return Xue(o,e,t,i)};Wh.prototype.computeHorizonCullingPointFromVertices=function(e,t,n,i,o){return Iue(this._ellipsoid,e,t,n,i,o)};Wh.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid=function(e,t,n,i,o,r){let s=Eue(this._ellipsoid,o,Gue);return Iue(s,e,t,n,i,r)};var v8e=[];Wh.prototype.computeHorizonCullingPointFromRectangle=function(e,t,n){C.typeOf.object("rectangle",e);let i=de.subsample(e,t,0,v8e),o=ue.fromPoints(i);if(!(m.magnitude(o.center)<.1*t.minimumRadius))return this.computeHorizonCullingPoint(o.center,i,n)};var F8e=new m;function Eue(e,t,n){if(c(t)&&t<0&&e.minimumRadius>-t){let i=m.fromElements(e.radii.x+t,e.radii.y+t,e.radii.z+t,F8e);e=re.fromCartesian3(i,n)}return e}function Xue(e,t,n,i){C.typeOf.object("directionToPoint",t),C.defined("positions",n),c(i)||(i=new m);let o=Pue(e,t),r=0;for(let s=0,a=n.length;s0:s>o&&s*s/m.magnitudeSquared(r)>o)}var A8e=new m,M8e=new m;function Wue(e,t,n){let i=e.transformPositionToScaledSpace(t,A8e),o=m.magnitudeSquared(i),r=Math.sqrt(o),s=m.divideByScalar(i,r,M8e);o=Math.max(1,o),r=Math.max(1,r);let a=m.dot(s,n),l=m.magnitude(m.cross(s,n,s)),d=1/r,u=Math.sqrt(o-1)*d;return 1/(a*d-l*u)}function wue(e,t,n){if(!(t<=0||t===1/0||t!==t))return m.multiplyByScalar(e,t,n)}var JK=new m;function Pue(e,t){return m.equals(t,m.ZERO)?t:(e.transformPositionToScaledSpace(t,JK),m.normalize(JK,JK))}var kb=Wh;var tqn=_(T(),1);function Er(e,t){if(e=e??z.EMPTY_OBJECT,c(e.disableDepthTestDistance)&&e.disableDepthTestDistance<0)throw new L("disableDepthTestDistance must be greater than or equal to 0.0.");let n=e.translucencyByDistance,i=e.scaleByDistance,o=e.distanceDisplayCondition;if(c(n)){if(n.far<=n.near)throw new L("translucencyByDistance.far must be greater than translucencyByDistance.near.");n=Nt.clone(n)}if(c(i)){if(i.far<=i.near)throw new L("scaleByDistance.far must be greater than scaleByDistance.near.");i=Nt.clone(i)}if(c(o)){if(o.far<=o.near)throw new L("distanceDisplayCondition.far must be greater than distanceDisplayCondition.near.");o=vt.clone(o)}this._show=e.show??!0,this._position=m.clone(e.position??m.ZERO),this._actualPosition=m.clone(this._position),this._color=Y.clone(e.color??Y.WHITE),this._outlineColor=Y.clone(e.outlineColor??Y.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??Ar.NONE}var vue=Er.SHOW_INDEX=0,Mue=Er.POSITION_INDEX=1,N8e=Er.COLOR_INDEX=2,k8e=Er.OUTLINE_COLOR_INDEX=3,U8e=Er.OUTLINE_WIDTH_INDEX=4,O8e=Er.PIXEL_SIZE_INDEX=5,D8e=Er.SCALE_BY_DISTANCE_INDEX=6,B8e=Er.TRANSLUCENCY_BY_DISTANCE_INDEX=7,Y8e=Er.DISTANCE_DISPLAY_CONDITION_INDEX=8,H8e=Er.DISABLE_DEPTH_DISTANCE_INDEX=9,z8e=Er.SPLIT_DIRECTION_INDEX=10;Er.NUMBER_OF_PROPERTIES=11;function Wd(e,t){let n=e._pointPrimitiveCollection;c(n)&&(n._updatePointPrimitive(e,t),e._dirty=!0)}Object.defineProperties(Er.prototype,{show:{get:function(){return this._show},set:function(e){if(!c(e))throw new L("value is required.");this._show!==e&&(this._show=e,Wd(this,vue))}},position:{get:function(){return this._position},set:function(e){if(!c(e))throw new L("value is required.");let t=this._position;m.equals(t,e)||(m.clone(e,t),m.clone(e,this._actualPosition),Wd(this,Mue))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){if(c(e)&&e.far<=e.near)throw new L("far distance must be greater than near distance.");let t=this._scaleByDistance;Nt.equals(t,e)||(this._scaleByDistance=Nt.clone(e,t),Wd(this,D8e))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){if(c(e)&&e.far<=e.near)throw new L("far distance must be greater than near distance.");let t=this._translucencyByDistance;Nt.equals(t,e)||(this._translucencyByDistance=Nt.clone(e,t),Wd(this,B8e))}},pixelSize:{get:function(){return this._pixelSize},set:function(e){if(!c(e))throw new L("value is required.");this._pixelSize!==e&&(this._pixelSize=e,Wd(this,O8e))}},color:{get:function(){return this._color},set:function(e){if(!c(e))throw new L("value is required.");let t=this._color;Y.equals(t,e)||(Y.clone(e,t),Wd(this,N8e))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){if(!c(e))throw new L("value is required.");let t=this._outlineColor;Y.equals(t,e)||(Y.clone(e,t),Wd(this,k8e))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){if(!c(e))throw new L("value is required.");this._outlineWidth!==e&&(this._outlineWidth=e,Wd(this,U8e))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(c(e)&&e.far<=e.near)throw new L("far must be greater than near");vt.equals(this._distanceDisplayCondition,e)||(this._distanceDisplayCondition=vt.clone(e,this._distanceDisplayCondition),Wd(this,Y8e))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){if(this._disableDepthTestDistance!==e){if(!c(e)||e<0)throw new L("disableDepthTestDistance must be greater than or equal to 0.0.");this._disableDepthTestDistance=e,Wd(this,H8e)}}},id:{get:function(){return this._id},set:function(e){this._id=e,c(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,Wd(this,vue))}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,Wd(this,z8e))}}});Er.prototype.getPickId=function(e){return c(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._collection,id:this._id})),this._pickId};Er.prototype._getActualPosition=function(){return this._actualPosition};Er.prototype._setActualPosition=function(e){m.clone(e,this._actualPosition),Wd(this,Mue)};var Fue=new ce;Er._computeActualPosition=function(e,t,n){return t.mode===se.SCENE3D?e:(M.multiplyByPoint(n,e,Fue),Oi.computeActualEllipsoidPosition(t,Fue))};var Aue=new ce;Er._computeScreenSpacePosition=function(e,t,n,i){let o=M.multiplyByVector(e,ce.fromElements(t.x,t.y,t.z,1,Aue),Aue);return Oi.worldToWindowCoordinates(n,o,i)};Er.prototype.computeScreenSpacePosition=function(e,t){let n=this._pointPrimitiveCollection;if(c(t)||(t=new D),!c(n))throw new L("PointPrimitive must be in a collection.");if(!c(e))throw new L("scene is required.");let i=n.modelMatrix,o=Er._computeScreenSpacePosition(i,this._actualPosition,e,t);if(c(o))return o.y=e.canvas.clientHeight-o.y,o};Er.getScreenSpaceBoundingBox=function(e,t,n){let i=e.pixelSize,o=i*.5,r=t.x-o,s=t.y-o,a=i,l=i;return c(n)||(n=new je),n.x=r,n.y=s,n.width=a,n.height=l,n};Er.prototype.equals=function(e){return this===e||c(e)&&this._id===e._id&&m.equals(this._position,e._position)&&Y.equals(this._color,e._color)&&this._pixelSize===e._pixelSize&&this._outlineWidth===e._outlineWidth&&this._show===e._show&&Y.equals(this._outlineColor,e._outlineColor)&&Nt.equals(this._scaleByDistance,e._scaleByDistance)&&Nt.equals(this._translucencyByDistance,e._translucencyByDistance)&&vt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._splitDirection===e._splitDirection};Er.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._pointPrimitiveCollection=void 0};var Gs=Er;var wqn=_(T(),1);var iqn=_(T(),1),Jy=`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; float distanceToCenter = length(gl_PointCoord - vec2(0.5)); 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; #if !defined(OPAQUE) && !defined(TRANSLUCENT) if (color.a < 0.005) { discard; } #else #ifdef OPAQUE if (color.a < 0.995) { discard; } #else if (color.a >= 0.995) { discard; } #endif #endif out_FragColor = czm_gammaCorrect(color); czm_writeLogDepth(); } `;var rqn=_(T(),1),BP=`uniform float u_maxTotalPointSize; in vec4 positionHighAndSize; in vec4 positionLowAndOutline; in vec4 compressedAttribute0; in vec4 compressedAttribute1; in vec4 scaleByDistance; in vec4 distanceDisplayConditionAndDisableDepthAndSplitDirection; 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() { vec3 positionHigh = positionHighAndSize.xyz; vec3 positionLow = positionLowAndOutline.xyz; float outlineWidthBothSides = 2.0 * positionLowAndOutline.w; float totalSize = positionHighAndSize.w + outlineWidthBothSides; float outlinePercent = outlineWidthBothSides / totalSize; 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; 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); 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); 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); 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) { 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) { totalSize += 3.0; } totalSize = min(totalSize, u_maxTotalPointSize); 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); 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) { 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) { 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))) { 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 K8e=Gs.SHOW_INDEX,$K=Gs.POSITION_INDEX,Nue=Gs.COLOR_INDEX,J8e=Gs.OUTLINE_COLOR_INDEX,Q8e=Gs.OUTLINE_WIDTH_INDEX,j8e=Gs.PIXEL_SIZE_INDEX,kue=Gs.SCALE_BY_DISTANCE_INDEX,Uue=Gs.TRANSLUCENCY_BY_DISTANCE_INDEX,Oue=Gs.DISTANCE_DISPLAY_CONDITION_INDEX,q8e=Gs.DISABLE_DEPTH_DISTANCE_INDEX,$8e=Gs.SPLIT_DIRECTION_INDEX,eJ=Gs.NUMBER_OF_PROPERTIES,Cc={positionHighAndSize:0,positionLowAndOutline:1,compressedAttribute0:2,compressedAttribute1:3,scaleByDistance:4,distanceDisplayConditionAndDisableDepthAndSplitDirection:5};function ju(e){e=e??z.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(eJ),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=M.clone(e.modelMatrix??M.IDENTITY),this._modelMatrix=M.clone(M.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.blendOption=e.blendOption??Lo.OPAQUE_AND_TRANSLUCENT,this._blendOption=void 0,this._mode=se.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(ju.prototype,{length:{get:function(){return tJ(this),this._pointPrimitives.length}}});function Due(e){let t=e.length;for(let n=0;n0&&(e._shaderDisableDepthDistance=!0,d===Number.POSITIVE_INFINITY&&(d=-1));let u=0,f=i.splitDirection;c(f)&&(u=f),r(o,s,a,d,u)}function t7e(e,t,n,i){Bue(e,t,n,i),Yue(e,t,n,i),Hue(e,t,n,i),zue(e,t,n,i),Kue(e,t,n,i)}function qK(e,t,n,i,o,r){let s;i.mode===se.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;let a=[];for(let l=0;l0){this._vaf=e7e(l,n,this._buffersUsage),a=this._vaf.writers;for(let E=0;E0){let E=o7e;E.length=0,(r[$K]||r[Q8e]||r[j8e])&&E.push(Bue),(r[Nue]||r[J8e])&&E.push(Yue),(r[K8e]||r[Uue])&&E.push(Hue),r[kue]&&E.push(zue),(r[Oue]||r[q8e]||r[$8e])&&E.push(Kue);let I=E.length;if(a=this._vaf.writers,o/n>.1){for(let v=0;vn*1.5&&(i.length=n),!c(this._vaf)||!c(this._vaf.va))return;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,ue.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let f,p=M.IDENTITY;e.mode===se.SCENE3D?(p=this.modelMatrix,f=ue.clone(this._baseVolumeWC,this._boundingVolume)):f=ue.clone(this._baseVolume2D,this._boundingVolume),i7e(this,e,f);let y=this._blendOption!==this.blendOption;this._blendOption=this.blendOption,y&&(this._blendOption===Lo.OPAQUE||this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=Oe.fromCache({depthTest:{enabled:!0,func:oe.LEQUAL},depthMask:!0}):this._rsOpaque=void 0,this._blendOption===Lo.TRANSLUCENT||this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=Oe.fromCache({depthTest:{enabled:!0,func:oe.LEQUAL},depthMask:!1,blending:un.ALPHA_BLEND}):this._rsTranslucent=void 0),this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let h,g;(y||this._shaderScaleByDistance&&!this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance&&!this._compiledShaderTranslucencyByDistance||this._shaderDistanceDisplayCondition&&!this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance)&&(h=new Be({sources:[BP]}),this._shaderScaleByDistance&&h.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&h.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderDistanceDisplayCondition&&h.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&h.defines.push("DISABLE_DEPTH_DISTANCE"),this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT&&(g=new Be({defines:["OPAQUE"],sources:[Jy]}),this._sp=tn.replaceCache({context:l,shaderProgram:this._sp,vertexShaderSource:h,fragmentShaderSource:g,attributeLocations:Cc}),g=new Be({defines:["TRANSLUCENT"],sources:[Jy]}),this._spTranslucent=tn.replaceCache({context:l,shaderProgram:this._spTranslucent,vertexShaderSource:h,fragmentShaderSource:g,attributeLocations:Cc})),this._blendOption===Lo.OPAQUE&&(g=new Be({sources:[Jy]}),this._sp=tn.replaceCache({context:l,shaderProgram:this._sp,vertexShaderSource:h,fragmentShaderSource:g,attributeLocations:Cc})),this._blendOption===Lo.TRANSLUCENT&&(g=new Be({sources:[Jy]}),this._spTranslucent=tn.replaceCache({context:l,shaderProgram:this._spTranslucent,vertexShaderSource:h,fragmentShaderSource:g,attributeLocations:Cc})),this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance);let x,S,V,Z,R=e.commandList;if(d.render||u){let E=this._colorCommands,I=this._blendOption===Lo.OPAQUE,v=this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT;x=this._vaf.va,S=x.length,E.length=S;let P=v?S*2:S;for(Z=0;Z>4;if(o!==nJ)throw new Error(`Got v${o} data when expected v${nJ}.`);let r=Jue[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=Jue.indexOf(this.ArrayType),s=t*2*this.ArrayType.BYTES_PER_ELEMENT,a=t*this.IndexArrayType.BYTES_PER_ELEMENT,l=(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,HP,t),this.coords=new this.ArrayType(this.data,HP+a+l,t*2),this._pos=t*2,this._finished=!0):(this.data=new ArrayBuffer(HP+s+a+l),this.ids=new this.IndexArrayType(this.data,HP,t),this.coords=new this.ArrayType(this.data,HP+a+l,t*2),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,(nJ<<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 oJ(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,l=[0,r.length-1,0],d=[];for(;l.length;){let u=l.pop()||0,f=l.pop()||0,p=l.pop()||0;if(f-p<=a){for(let x=p;x<=f;x++){let S=s[2*x],V=s[2*x+1];S>=t&&S<=i&&V>=n&&V<=o&&d.push(r[x])}continue}let y=p+f>>1,h=s[2*y],g=s[2*y+1];h>=t&&h<=i&&g>=n&&g<=o&&d.push(r[y]),(u===0?t<=h:n<=g)&&(l.push(p),l.push(y-1),l.push(1-u)),(u===0?i>=h:o>=g)&&(l.push(y+1),l.push(f),l.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],l=[],d=i*i;for(;a.length;){let u=a.pop()||0,f=a.pop()||0,p=a.pop()||0;if(f-p<=s){for(let x=p;x<=f;x++)Que(r[2*x],r[2*x+1],t,n)<=d&&l.push(o[x]);continue}let y=p+f>>1,h=r[2*y],g=r[2*y+1];Que(h,g,t,n)<=d&&l.push(o[y]),(u===0?t-i<=h:n-i<=g)&&(a.push(p),a.push(y-1),a.push(1-u)),(u===0?t+i>=h:n+i>=g)&&(a.push(y+1),a.push(f),a.push(1-u))}return l}};function oJ(e,t,n,i,o,r){if(o-i<=n)return;let s=i+o>>1;jue(e,t,s,i,o,r),oJ(e,t,n,i,s-1,1-r),oJ(e,t,n,s+1,o,1-r)}function jue(e,t,n,i,o,r){for(;o>i;){if(o-i>600){let d=o-i+1,u=n-i+1,f=Math.log(d),p=.5*Math.exp(2*f/3),y=.5*Math.sqrt(f*p*(d-p)/d)*(u-d/2<0?-1:1),h=Math.max(i,Math.floor(n-u*p/d+y)),g=Math.min(o,Math.floor(n+(d-u)*p/d+y));jue(e,t,n,h,g,r)}let s=t[2*n+r],a=i,l=o;for(zP(e,t,i,n),t[2*o+r]>s&&zP(e,t,i,o);as;)l--}t[2*i+r]===s?zP(e,t,i,l):(l++,zP(e,t,l,o)),l<=n&&(i=l+1),n<=l&&(o=l-1)}}function zP(e,t,n,i){iJ(e,n,i),iJ(t,2*n,2*i),iJ(t,2*n+1,2*i+1)}function iJ(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}function Que(e,t,n,i){let o=e-n,r=t-i;return o*o+r*r}function xf(e){e=e??z.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 ye,this.show=e.show??!0}function que(e,t){e.x-=t,e.y-=t,e.width+=t*2,e.height+=t*2}var r7e=new je;function $ue(e,t,n,i,o){if(c(e._labelCollection)&&i._clusterLabels?o=Fy.getScreenSpaceBoundingBox(e,t,o):c(e._billboardCollection)&&i._clusterBillboards?o=co.getScreenSpaceBoundingBox(e,t,o):c(e._pointPrimitiveCollection)&&i._clusterPoints&&(o=Gs.getScreenSpaceBoundingBox(e,t,o)),que(o,n),i._clusterLabels&&!c(e._labelCollection)&&c(e.id)&&tme(i,e.id.id)&&c(e.id._label)){let r=i._collectionIndicesByEntity[e.id.id].labelIndex,s=i._labelCollection.get(r),a=Fy.getScreenSpaceBoundingBox(s,t,r7e);que(a,n),o=je.union(o,a,o)}return o}function s7e(e,t){if(e.clusterShow=!0,!c(e._labelCollection)&&c(e.id)&&tme(t,e.id.id)&&c(e.id._label)){let n=t._collectionIndicesByEntity[e.id.id].labelIndex,i=t._labelCollection.get(n);i.clusterShow=!0}}function eme(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 tme(e,t){return c(e)&&c(e._collectionIndicesByEntity[t])&&c(e._collectionIndicesByEntity[t].labelIndex)}function rJ(e,t,n,i,o){if(!c(e))return;let r=e.length;for(let s=0;s0){let A=new KP(V.length,64,Uint32Array);for(let k=0;k=u)for(eme(k.position,G,b,e),p.push(k),R=0;R=u){let U=m.multiplyByScalar(H,1/G,H);for(eme(U,G,b,e),p.push({position:U,width:O.width,height:O.height,minimumWidth:I.width,minimumHeight:I.height}),R=0;R0?(a=d.shift(),l=r.get(a)):(l=r.add(),a=r.length-1),s[i]=a;let u=this;return Promise.resolve().then(function(){u._clusterDirty=!0}),l}}function cJ(e,t){let n=e._collectionIndicesByEntity[t];!c(n.billboardIndex)&&!c(n.labelIndex)&&!c(n.pointIndex)&&delete e._collectionIndicesByEntity[t]}xf.prototype.getLabel=aJ("_labelCollection",Gh,"_unusedLabelIndices","labelIndex");xf.prototype.removeLabel=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!c(this._labelCollection)||!c(t)||!c(t.labelIndex))return;let n=t.labelIndex;t.labelIndex=void 0,cJ(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};xf.prototype.getBillboard=aJ("_billboardCollection",Gd,"_unusedBillboardIndices","billboardIndex");xf.prototype.removeBillboard=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!c(this._billboardCollection)||!c(t)||!c(t.billboardIndex))return;let n=t.billboardIndex;t.billboardIndex=void 0,cJ(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};xf.prototype.getPoint=aJ("_pointCollection",A1,"_unusedPointIndices","pointIndex");xf.prototype.removePoint=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!c(this._pointCollection)||!c(t)||!c(t.pointIndex))return;let n=t.pointIndex;t.pointIndex=void 0,cJ(this,e.id);let i=this._pointCollection.get(n);i.show=!1,i.id=void 0,this._unusedPointIndices.push(n),this._clusterDirty=!0};function sJ(e){if(!c(e))return;let t=e.length;for(let n=0;n0&&!n.ready&&(t=e.commandList,e.commandList=[],n.update(e),e.commandList=t);let i=this._billboardCollection;c(i)&&i.length>0&&!i.ready&&(t=e.commandList,e.commandList=[],i.update(e),e.commandList=t),this._enabledDirty&&(this._enabledDirty=!1,u7e(this),this._clusterDirty=!0),this._clusterDirty&&(this._cluster(),this._clusterDirty=c(n)&&!n.ready||c(i)&&!i.ready),c(this._clusterLabelCollection)&&this._clusterLabelCollection.update(e),c(this._clusterBillboardCollection)&&this._clusterBillboardCollection.update(e),c(this._clusterPointCollection)&&this._clusterPointCollection.update(e),c(n)&&n.update(e),c(i)&&i.update(e),c(this._pointCollection)&&this._pointCollection.update(e)};xf.prototype.destroy=function(){c(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 wd=xf;function lJ(e){this._name=e,this._clock=void 0,this._changed=new ye,this._error=new ye,this._isLoading=!1,this._loading=new ye,this._entityCollection=new Ks(this),this._entityCluster=new wd}Object.defineProperties(lJ.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){Hr.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){if(!c(e))throw new L("value must be defined.");this._entityCluster=e}}});lJ.prototype.update=function(e){return!0};var JP=lJ;var pei=_(T(),1);var G$n=_(T(),1);var d$n=_(T(),1);var nme={};nme.computePositions=function(e,t,n,i,o){let r=e*.5,s=-r,a=i+i,l=o?2*a:a,d=new Float64Array(l*3),u,f=0,p=0,y=o?a*3:0,h=o?(a+i)*3:i*3;for(u=0;u0){let g=Math.min(r,o);d=Math.round(o/g),l+=g}let u=Me.createTypedArray(s,l*2),f=0,p;for(p=0;p0)for(p=0;p0){for(l=0;l=t;i--)e[i]=e[a--]}for(i=0;i=0||c(f)&&ee.compare(u,f)>=0));){for(gJ[p++]=u,r=r+1,s=0;s0&&(xJ.length=y,lme(n,d,xJ),gJ.length=p,lme(t,l,gJ))}else{for(s=0;so)return;if(this._backwardExtrapolationType===ol.HOLD)return r.unpack(s,0,t);l=this._backwardExtrapolationType===ol.LINEAR_EXTRAPOLATE}if(a>=i){a=i-1;let I=n[a];if(o=this._forwardExtrapolationDuration,this._forwardExtrapolationType===ol.NONE||o!==0&&ee.secondsDifference(e,I)>o)return;if(this._forwardExtrapolationType===ol.HOLD)return a=i-1,r.unpack(s,a*r.packedLength,t);l=this._forwardExtrapolationType===ol.LINEAR_EXTRAPOLATE}let f=this._xTable,p=this._yTable;var d,u;l?(d=Cesium.LinearApproximation,u=1):(d=this._interpolationAlgorithm,u=this._interpolationDegree),this._lastInterpolationAlgorithm!=d&&(this._lastInterpolationAlgorithm=d,this._updateTableLength=!0);let y=this._packedInterpolationLength,h=this._inputOrder;if(this._updateTableLength){this._updateTableLength=!1;let I=Math.min(d.getRequiredDataPoints(u,h),i);I!==this._numberOfPoints&&(this._numberOfPoints=I,f.length=I,p.length=I*y)}let g=this._numberOfPoints-1;if(g<1)return;let x=0,S=i-1;if(S-x+1>=g+1){let I=a-(g/2|0)-1;IS&&(v=S,I=v-g,I0){n=new Array(t);for(let i=0;i0&&(!c(n)||n.length!==i))throw new L("derivatives length must be equal to the number of derivatives.");this._property.addSample(e,t,n)};em.prototype.addSamples=function(e,t,n){this._property.addSamples(e,t,n)};em.prototype.addSamplesPackedArray=function(e,t){this._property.addSamplesPackedArray(e,t)};em.prototype.removeSample=function(e){return this._property.removeSample(e)};em.prototype.removeSamples=function(e){this._property.removeSamples(e)};em.prototype.equals=function(e){return this===e||e instanceof em&&J.equals(this._property,e._property)&&this._referenceFrame===e._referenceFrame};var xa=em;var sii=_(T(),1);var Qni=_(T(),1),j7e={HORIZONTAL:0,VERTICAL:1},Sf=Object.freeze(j7e);var q7e=Sf.HORIZONTAL,$7e=Y.WHITE,e6e=Y.BLACK,t6e=0,n6e=1;function j1(e){e=e??z.EMPTY_OBJECT,this._definitionChanged=new ye,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(j1.prototype,{isConstant:{get:function(){return J.isConstant(this._orientation)&&J.isConstant(this._evenColor)&&J.isConstant(this._oddColor)&&J.isConstant(this._offset)&&J.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},orientation:fe("orientation"),evenColor:fe("evenColor"),oddColor:fe("oddColor"),offset:fe("offset"),repeat:fe("repeat")});j1.prototype.getType=function(e){return"Stripe"};var i6e=new ee;j1.prototype.getValue=function(e,t){return c(e)||(e=ee.now(i6e)),c(t)||(t={}),t.horizontal=J.getValueOrDefault(this._orientation,e,q7e)===Sf.HORIZONTAL,t.evenColor=J.getValueOrClonedDefault(this._evenColor,e,$7e,t.evenColor),t.oddColor=J.getValueOrClonedDefault(this._oddColor,e,e6e,t.oddColor),t.offset=J.getValueOrDefault(this._offset,e,t6e),t.repeat=J.getValueOrDefault(this._repeat,e,n6e),t};j1.prototype.equals=function(e){return this===e||e instanceof j1&&J.equals(this._orientation,e._orientation)&&J.equals(this._evenColor,e._evenColor)&&J.equals(this._oddColor,e._oddColor)&&J.equals(this._offset,e._offset)&&J.equals(this._repeat,e._repeat)};var q1=j1;var bii=_(T(),1);function $y(e){this._definitionChanged=new ye,this._intervals=new Yr,this._intervals.changedEvent.addEventListener($y.prototype._intervalsChanged,this),this._referenceFrame=e??Ui.FIXED}Object.defineProperties($y.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 o6e=new ee;$y.prototype.getValue=function(e,t){return c(e)||(e=ee.now(o6e)),this.getValueInReferenceFrame(e,Ui.FIXED,t)};$y.prototype.getValueInReferenceFrame=function(e,t,n){if(!c(e))throw new L("time is required.");if(!c(t))throw new L("referenceFrame is required.");let i=this._intervals.findDataForIntervalContainingDate(e);if(c(i))return Mm.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};$y.prototype.equals=function(e){return this===e||e instanceof $y&&this._intervals.equals(e._intervals,J.equals)&&this._referenceFrame===e._referenceFrame};$y.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var Hb=$y;var Cii=_(T(),1);function rT(){this._definitionChanged=new ye,this._intervals=new Yr,this._intervals.changedEvent.addEventListener(rT.prototype._intervalsChanged,this)}Object.defineProperties(rT.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});var r6e=new ee;rT.prototype.getValue=function(e,t){c(e)||(e=ee.now(r6e));let n=this._intervals.findDataForIntervalContainingDate(e);return c(n)&&typeof n.clone=="function"?n.clone(t):n};rT.prototype.equals=function(e){return this===e||e instanceof rT&&this._intervals.equals(e._intervals,J.equals)};rT.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var zb=rT;var Oii=_(T(),1);var Xii=_(T(),1);function $1(e,t){this._position=void 0,this._subscription=void 0,this._definitionChanged=new ye,this._normalize=t??!0,this.position=e}Object.defineProperties($1.prototype,{isConstant:{get:function(){return J.isConstant(this._position)}},definitionChanged:{get:function(){return this._definitionChanged}},position:{get:function(){return this._position},set:function(e){let t=this._position;t!==e&&(c(t)&&this._subscription(),this._position=e,c(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 s6e=new m,mme=new m,fme=new ee,a6e=new ee,_J=1/60;$1.prototype.getValue=function(e,t){return this._getValue(e,t)};$1.prototype._getValue=function(e,t,n){c(e)||(e=ee.now(a6e)),c(t)||(t=new m);let i=this._position;if(J.isConstant(i))return this._normalize?void 0:m.clone(m.ZERO,t);let o=i.getValue(e,s6e),r=i.getValue(ee.addSeconds(e,_J,fme),mme);if(!c(o)||!c(r)&&(r=o,o=i.getValue(ee.addSeconds(e,-_J,fme),mme),!c(o)))return;if(m.equals(o,r))return this._normalize?void 0:m.clone(m.ZERO,t);c(n)&&o.clone(n);let s=m.subtract(r,o,t);return this._normalize?m.normalize(s,t):m.divideByScalar(s,_J,t)};$1.prototype.equals=function(e){return this===e||e instanceof $1&&J.equals(this._position,e._position)};var Kb=$1;function n2(e,t){this._velocityVectorProperty=new Kb(e,!0),this._subscription=void 0,this._ellipsoid=void 0,this._definitionChanged=new ye,this.ellipsoid=t??re.default;let n=this;this._velocityVectorProperty.definitionChanged.addEventListener(function(){n._definitionChanged.raiseEvent(n)})}Object.defineProperties(n2.prototype,{isConstant:{get:function(){return J.isConstant(this._velocityVectorProperty)}},definitionChanged:{get:function(){return this._definitionChanged}},position:{get:function(){return this._velocityVectorProperty.position},set:function(e){this._velocityVectorProperty.position=e}},ellipsoid:{get:function(){return this._ellipsoid},set:function(e){this._ellipsoid!==e&&(this._ellipsoid=e,this._definitionChanged.raiseEvent(this))}}});var hme=new m,c6e=new m,pme=new te,l6e=new ee;n2.prototype.getValue=function(e,t){c(e)||(e=ee.now(l6e));let n=this._velocityVectorProperty._getValue(e,c6e,hme);if(c(n))return wt.rotationMatrixFromPositionVelocity(hme,n,this._ellipsoid,pme),Fe.fromRotationMatrix(pme,t)};n2.prototype.equals=function(e){return this===e||e instanceof n2&&J.equals(this._velocityVectorProperty,e._velocityVectorProperty)&&(this._ellipsoid===e._ellipsoid||this._ellipsoid.equals(e._ellipsoid))};var i2=n2;var Yii=_(T(),1);var Jb={COMPLETE:0,BELOW_ELLIPSOID_HORIZON:1,ABOVE_ELLIPSOID_HORIZON:2};Jb.validate=function(e){return e===Jb.COMPLETE||e===Jb.BELOW_ELLIPSOID_HORIZON||e===Jb.ABOVE_ELLIPSOID_HORIZON};Jb.toString=function(e){switch(e){case Jb.COMPLETE:return"COMPLETE";case Jb.BELOW_ELLIPSOID_HORIZON:return"BELOW_ELLIPSOID_HORIZON";case Jb.ABOVE_ELLIPSOID_HORIZON:return"ABOVE_ELLIPSOID_HORIZON";default:throw new L("SensorVolumePortionToDisplay value is not valid and cannot be converted to a String.")}};var eV=Jb;function eg(){}eg.packedLength=m.packedLength;eg.unpack=m.unpack;eg.pack=m.pack;var TJ;function o2(e,t){return t[0]==="#"&&(t=TJ+t),Yb.fromString(e,t)}function bme(e,t,n){if(c(n.reference))return o2(t,n.reference);if(c(n.velocityReference)){let i=o2(t,n.velocityReference);switch(e){case m:case eg:return new Kb(i,e===eg);case Fe:return new i2(i)}}throw new le(`${JSON.stringify(n)} is not valid CZML.`)}function d6e(e,t){return new Om(function(n,i){return t(e.getValue(n,i))},e.isConstant)}var Yi=new m,rl=new t2,Lc=new pe,sT=new Zn,Dk=new Fe;function u6e(e){let t=e.rgbaf;if(c(t))return t;let n=e.rgba;if(!c(n))return;let i=n.length;if(i===Y.packedLength)return[Y.byteToFloat(n[0]),Y.byteToFloat(n[1]),Y.byteToFloat(n[2]),Y.byteToFloat(n[3])];t=new Array(i);for(let o=0;ol&&e!==Object}let h=typeof e.unpack=="function"&&e!==qu;if(!y&&!p){f?t[n]=new Qn(h?e.unpack(d,0):d):t[n]=bme(e,s,i);return}let g=t[n],x,S=i.epoch;if(c(S)&&(x=ee.fromIso8601(S)),y&&!p){g instanceof Fd||(t[n]=g=new Fd(e)),g.addSamplesPackedArray(d,x),Bk(i,g);return}let V;if(!y&&p){a=a.clone(),f?a.data=h?e.unpack(d,0):d:a.data=bme(e,s,i),c(g)||(t[n]=g=f?new zb:new Sc),f&&g instanceof zb?g.intervals.addInterval(a):g instanceof Sc?(f&&(a.data=new Qn(a.data)),g.intervals.addInterval(a)):(t[n]=g=Sme(g),f&&(a.data=new Qn(a.data)),g.intervals.addInterval(a));return}c(g)||(t[n]=g=new Sc),g instanceof Sc||(t[n]=g=Sme(g));let Z=g.intervals;V=Z.findInterval(a),(!c(V)||!(V.data instanceof Fd))&&(V=a.clone(),V.data=new Fd(e),Z.addInterval(V)),V.data.addSamplesPackedArray(d,x),Bk(i,V.data)}function Pme(e,t){if(e instanceof Fd){e.removeSamples(t);return}else if(e instanceof zb){e.intervals.removeInterval(t);return}else if(e instanceof Sc){let n=e.intervals;for(let i=0;il),!h&&!p){f?e[t]=new Oc(m.unpack(d),y):e[t]=o2(r,n.reference);return}let g=e[t],x,S=n.epoch;if(c(S)&&(x=ee.fromIso8601(S)),h&&!p){(!(g instanceof xa)||c(y)&&g.referenceFrame!==y)&&(e[t]=g=new xa(y,a)),g.addSamplesPackedArray(d,x),Bk(n,g);return}let V;if(!h&&p){s=s.clone(),f?s.data=m.unpack(d):s.data=o2(r,n.reference),c(g)||(f?g=new Hb(y):g=new ya(y),e[t]=g),f&&g instanceof Hb&&c(y)&&g.referenceFrame===y?g.intervals.addInterval(s):g instanceof ya?(f&&(s.data=new Oc(s.data,y)),g.intervals.addInterval(s)):(e[t]=g=Cme(g),f&&(s.data=new Oc(s.data,y)),g.intervals.addInterval(s));return}c(g)?g instanceof ya||(e[t]=g=Cme(g)):e[t]=g=new ya(y);let Z=g.intervals;V=Z.findInterval(s),(!c(V)||!(V.data instanceof xa)||c(y)&&V.data.referenceFrame!==y)&&(V=s.clone(),V.data=new xa(y,a),Z.addInterval(V)),V.data.addSamplesPackedArray(d,x),Bk(n,V.data)}function vme(e,t){if(e instanceof xa){e.removeSamples(t);return}else if(e instanceof Hb){e.intervals.removeInterval(t);return}else if(e instanceof ya){let n=e.intervals;for(let i=0;i. version format.");let i=t._documentPacket;c(e.name)&&(i.name=e.name);let o=e.clock;if(c(o)){let r=i.clock;c(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 N6e(e,t,n,i){let o=t.ellipse;if(!c(o))return;let r=pr(o.interval),s=e.ellipse;c(s)||(e.ellipse=s=new Dx),Te(Boolean,s,"show",o.show,r,i,n),Te(Number,s,"semiMajorAxis",o.semiMajorAxis,r,i,n),Te(Number,s,"semiMinorAxis",o.semiMinorAxis,r,i,n),Te(Number,s,"height",o.height,r,i,n),Te(ze,s,"heightReference",o.heightReference,r,i,n),Te(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),Te(ze,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),Te(qu,s,"rotation",o.rotation,r,i,n),Te(qu,s,"stRotation",o.stRotation,r,i,n),Te(Number,s,"granularity",o.granularity,r,i,n),Te(Boolean,s,"fill",o.fill,r,i,n),Ad(s,"material",o.material,r,i,n),Te(Boolean,s,"outline",o.outline,r,i,n),Te(Y,s,"outlineColor",o.outlineColor,r,i,n),Te(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Te(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),Te(Sn,s,"shadows",o.shadows,r,i,n),Te(vt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Te(Un,s,"classificationType",o.classificationType,r,i,n),Te(Number,s,"zIndex",o.zIndex,r,i,n)}function k6e(e,t,n,i){let o=t.ellipsoid;if(!c(o))return;let r=pr(o.interval),s=e.ellipsoid;c(s)||(e.ellipsoid=s=new Bx),Te(Boolean,s,"show",o.show,r,i,n),Te(m,s,"radii",o.radii,r,i,n),Te(m,s,"innerRadii",o.innerRadii,r,i,n),Te(Number,s,"minimumClock",o.minimumClock,r,i,n),Te(Number,s,"maximumClock",o.maximumClock,r,i,n),Te(Number,s,"minimumCone",o.minimumCone,r,i,n),Te(Number,s,"maximumCone",o.maximumCone,r,i,n),Te(ze,s,"heightReference",o.heightReference,r,i,n),Te(Boolean,s,"fill",o.fill,r,i,n),Ad(s,"material",o.material,r,i,n),Te(Boolean,s,"outline",o.outline,r,i,n),Te(Y,s,"outlineColor",o.outlineColor,r,i,n),Te(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Te(Number,s,"stackPartitions",o.stackPartitions,r,i,n),Te(Number,s,"slicePartitions",o.slicePartitions,r,i,n),Te(Number,s,"subdivisions",o.subdivisions,r,i,n),Te(Sn,s,"shadows",o.shadows,r,i,n),Te(vt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function U6e(e,t,n,i){let o=t.label;if(!c(o))return;let r=pr(o.interval),s=e.label;c(s)||(e.label=s=new Nm),Te(Boolean,s,"show",o.show,r,i,n),Te(String,s,"text",o.text,r,i,n),Te(String,s,"font",o.font,r,i,n),Te(Yo,s,"style",o.style,r,i,n),Te(Number,s,"scale",o.scale,r,i,n),Te(Boolean,s,"showBackground",o.showBackground,r,i,n),Te(Y,s,"backgroundColor",o.backgroundColor,r,i,n),Te(D,s,"backgroundPadding",o.backgroundPadding,r,i,n),Te(D,s,"pixelOffset",o.pixelOffset,r,i,n),Te(m,s,"eyeOffset",o.eyeOffset,r,i,n),Te(xi,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),Te(Mn,s,"verticalOrigin",o.verticalOrigin,r,i,n),Te(ze,s,"heightReference",o.heightReference,r,i,n),Te(Y,s,"fillColor",o.fillColor,r,i,n),Te(Y,s,"outlineColor",o.outlineColor,r,i,n),Te(Number,s,"outlineWidth",o.outlineWidth,r,i,n),Te(Nt,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),Te(Nt,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),Te(Nt,s,"scaleByDistance",o.scaleByDistance,r,i,n),Te(vt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),Te(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function O6e(e,t,n,i){let o=t.model;if(!c(o))return;let r=pr(o.interval),s=e.model;c(s)||(e.model=s=new Up),Te(Boolean,s,"show",o.show,r,i,n),Te(s2.default,s,"uri",o.gltf,r,i,n),Te(Number,s,"scale",o.scale,r,i,n),Te(Number,s,"minimumPixelSize",o.minimumPixelSize,r,i,n),Te(Number,s,"maximumScale",o.maximumScale,r,i,n),Te(Boolean,s,"incrementallyLoadTextures",o.incrementallyLoadTextures,r,i,n),Te(Boolean,s,"runAnimations",o.runAnimations,r,i,n),Te(Boolean,s,"clampAnimations",o.clampAnimations,r,i,n),Te(Sn,s,"shadows",o.shadows,r,i,n),Te(ze,s,"heightReference",o.heightReference,r,i,n),Te(Y,s,"silhouetteColor",o.silhouetteColor,r,i,n),Te(Number,s,"silhouetteSize",o.silhouetteSize,r,i,n),Te(Y,s,"color",o.color,r,i,n),Te(bc,s,"colorBlendMode",o.colorBlendMode,r,i,n),Te(Number,s,"colorBlendAmount",o.colorBlendAmount,r,i,n),Te(vt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n);let a,l,d=o.nodeTransformations;if(c(d))if(Array.isArray(d))for(a=0,l=d.length;a-1;l--)n[l](s,e,t,i)}TJ=void 0}function q6e(e){let t,n=e._documentPacket.clock;if(!c(n)){if(!c(e._clock)){let o=e._entityCollection.computeAvailability();if(!o.start.equals(Ye.MINIMUM_VALUE)){let r=o.start,s=o.stop,a=ee.secondsDifference(s,r),l=Math.round(a/120);return t=new Tf,t.startTime=ee.clone(r),t.stopTime=ee.clone(s),t.clockRange=zr.LOOP_STOP,t.multiplier=l,t.currentTime=ee.clone(r),t.clockStep=fo.SYSTEM_CLOCK_MULTIPLIER,e._clock=t,!0}}return!1}c(e._clock)?t=e._clock.clone():(t=new Tf,t.startTime=Ye.MINIMUM_VALUE.clone(),t.stopTime=Ye.MAXIMUM_VALUE.clone(),t.currentTime=Ye.MINIMUM_VALUE.clone(),t.clockRange=zr.LOOP_STOP,t.clockStep=fo.SYSTEM_CLOCK_MULTIPLIER,t.multiplier=1);let i=pr(n.interval);return c(i)&&(t.startTime=i.start,t.stopTime=i.stop),c(n.currentTime)&&(t.currentTime=ee.fromIso8601(n.currentTime)),c(n.range)&&(t.clockRange=zr[n.range]??zr.LOOP_STOP),c(n.step)&&(t.clockStep=fo[n.step]??fo.SYSTEM_CLOCK_MULTIPLIER),c(n.multiplier)&&(t.multiplier=n.multiplier),t.equals(e._clock)?!1:(e._clock=t.clone(e._clock),!0)}function Ame(e,t,n,i){if(!c(t))throw new L("czml is required.");n=n??z.EMPTY_OBJECT;let o=t,r=n.sourceUri,s=n.credit;if(typeof s=="string"&&(s=new Ct(s)),e._credit=s,typeof t=="string"||t instanceof Ge){t=Ge.createIfNeeded(t),o=t.fetchJson(),r=r??t.clone();let a=e._resourceCredits,l=t.credits;if(c(l)){let d=l.length;for(let u=0;uthis._primitives.length)throw new L("index must be less than or equal to the number of primitives.")}let 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._primitiveAdded.raiseEvent(e),e};_a.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.destroyPrimitives&&e.destroy(),this._primitiveRemoved.raiseEvent(e),!0}return!1};_a.prototype.removeAndDestroy=function(e){let t=this.remove(e);return t&&!this.destroyPrimitives&&e.destroy(),t};_a.prototype.removeAll=function(){let e=this._primitives,t=e.length;for(let n=0;n1;--b){if(S=w.PI_OVER_TWO-(b-1)*x,E=nV(-S,r,h,y,l,u,d,f,p,E),I=nV(S+Math.PI,r,h,y,l,u,d,f,p,I),t){for(Z[R++]=E.x,Z[R++]=E.y,Z[R++]=E.z,X=2*(b-1)+2,G=1;G1;--s){for(t[n++]=i++,t[n++]=i,t[n++]=r,o=2*s,a=0;aw.PI&&(f.north=f.north>0?w.PI_OVER_TWO-w.EPSILON7:f.north,f.south=f.south<0?w.EPSILON7-w.PI_OVER_TWO:f.south,f.east=w.PI,f.west=-w.PI),f}function vh(e){e=e??z.EMPTY_OBJECT;let t=e.center,n=e.ellipsoid??re.default,i=e.semiMajorAxis,o=e.semiMinorAxis,r=e.granularity??w.RADIANS_PER_DEGREE,s=e.vertexFormat??We.DEFAULT;if(C.defined("options.center",t),C.typeOf.number("options.semiMajorAxis",i),C.typeOf.number("options.semiMinorAxis",o),i0){let h=Math.min(d,l);y=Math.round(l/h);let g=Math.min(y*d,l);for(p=0;p0&&(R=!0,S+=l-1),s0&&u!==g-1&&f!==0&&f!==x-1&&(N[Q]=!0),Q++;p=0;let ie,j;for(u=1;u=qe&&u1||E>1))for(let G=0;G0;u-=d)Ve=u*3,K=uV(K,ne,Ve,p,x),ne+=6,o.st&&(j=mV(j,be,u*2,E),be+=4),n&&(Ce+=3,Q[Ce++]=I[Ve],Q[Ce++]=I[Ve+1],Q[Ce++]=I[Ve+2]),$&&(ie[me++]=1,me+=1);if(X){let qe=_e;for(Ve=qe*3,u=0;u<2;u++)K=uV(K,ne,Ve,p,x),ne+=6,o.st&&(j=mV(j,be,qe*2,E),be+=4),n&&(Ce+=3,Q[Ce++]=I[Ve],Q[Ce++]=I[Ve+1],Q[Ce++]=I[Ve+2]),$&&(ie[me++]=1,me+=1)}else for(u=d-1;u>=0;u--)Ve=u*3,K=uV(K,ne,Ve,p,x),ne+=6,o.st&&(j=mV(j,be,u*2,E),be+=4),n&&(Ce+=3,Q[Ce++]=I[Ve],Q[Ce++]=I[Ve+1],Q[Ce++]=I[Ve+2]),$&&(ie[me++]=1,me+=1);let Ie=m$e(K,o,a);o.st&&(Ie.attributes.st=new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:2,values:j})),n&&(Ie.attributes.extrudeDirection=new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:3,values:Q})),P&&(Ie.attributes.applyOffset=new Ee({componentDatatype:q.UNSIGNED_BYTE,componentsPerAttribute:1,values:ie}));let Ze=Me.createTypedArray(U,B*6),De,Ke,rt,Xt;y=K.length/3;let Ht=0;for(u=0;u0)for(s=new Array(o),i=0;i0)for(a=new Array(o),i=0;i0)for(s=new Array(o),i=0;i0)for(a=new Array(o),i=0;i{i.raiseEvent(a)}),n[r]=s}this.updaters=n,this.geometryChanged=i,this.eventHelper=o,this._removeEntitySubscription=e.definitionChanged.addEventListener(yT.prototype._onEntityPropertyChanged,this)}yT.prototype._onEntityPropertyChanged=function(e,t,n,i){let o=this.updaters;for(let r=0;r0){c(i)&&(c(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i);let l;c(this.depthFailAppearanceType)&&(c(this.depthFailMaterialProperty)&&(this.depthFailMaterial=qo.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial)),l=new this.depthFailAppearanceType({material:this.depthFailMaterial,translucent:this.translucent,closed:this.closed})),i=new In({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new this.appearanceType({translucent:this.translucent,closed:this.closed}),depthFailAppearance:l,shadows:this.shadows}),o.add(i),t=!1}else{c(i)&&(o.remove(i),i=void 0);let l=this.oldPrimitive;c(l)&&(o.remove(l),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(c(i)&&i.ready){i.show=!0,c(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0),c(this.depthFailAppearanceType)&&!(this.depthFailMaterialProperty instanceof Ut)&&(this.depthFailMaterial=qo.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);let s=this.updatersWithAttributes.values,a=s.length,l=this.waitingOnCreate;for(r=0;r=0;i--){let o=e[i];if(o.remove(t))return o.updaters.length===0&&(e.splice(i,1),o.destroy()),!0}return!1}pV.prototype.remove=function(e){nhe(this._solidItems,e)||nhe(this._translucentItems,e)};function ihe(e,t,n){let i=!1,o=t.length;for(let r=0;r0)for(r=0;r=0;r--){let s=t[r];if(s.invalidated){t.splice(r,1);let a=s.updaters.values,l=a.length;for(let d=0;d0){c(n)&&(c(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),this.material=qo.getValue(e,this.materialProperty,this.material);let a;c(this.depthFailMaterialProperty)&&(this.depthFailMaterial=qo.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),a=new this.depthFailAppearanceType({material:this.depthFailMaterial,translucent:this.depthFailMaterial.isTranslucent(),closed:this.closed})),n=new In({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{c(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;c(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(c(n)&&n.ready){n.show=!0,c(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.material=qo.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material,c(this.depthFailAppearanceType)&&!(this.depthFailMaterialProperty instanceof Ut)&&(this.depthFailMaterial=qo.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};bV.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 l=0;l0)c(i)&&(c(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i),i=new kc({show:!1,asynchronous:!0,geometryInstances:s.slice(),classificationType:this.classificationType}),o.add(i,this.zIndex),t=!1;else{c(i)&&(o.remove(i),i=void 0);let l=this.oldPrimitive;c(l)&&(o.remove(l),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(c(i)&&i.ready){i.show=!0,c(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0);let s=this.updatersWithAttributes.values,a=s.length,l=this.waitingOnCreate;for(r=0;r=0;--t){let s=o[t];s.isDirty&&(i=o[t].update(e)&&i,s.isDirty=!1),s.geometry.length===0&&o.splice(t,1)}return i};yV.prototype.getBoundingSphere=function(e,t){let n=this._batches,i=n.length;for(let o=0;o0)c(n)&&(c(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),this.material=qo.getValue(e,this.materialProperty,this.material),n=new kc({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{c(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;c(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(c(n)&&n.ready){n.show=!0,c(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.material=qo.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material;let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};xV.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 l=0;l0)c(i)&&(c(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i),i=new In({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new an({flat:!0,translucent:this.translucent,renderState:{lineWidth:this.width}}),shadows:this.shadows}),o.add(i),t=!1;else{c(i)&&(o.remove(i),i=void 0);let l=this.oldPrimitive;c(l)&&(o.remove(l),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(c(i)&&i.ready){i.show=!0,c(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0);let s=this.updatersWithAttributes.values,a=s.length,l=this.waitingOnCreate;for(r=0;r0)for(f=!0,t=0;t0)for(f=!0,t=0;t-1;a--)l=s[a],d=l.id,u=this._updaterSets.get(d),u.entity===l?u.forEach(function(g){f._removeUpdater(g),f._insertUpdaterIntoBatch(e,g)}):(o.push(l),n.push(l));for(a=o.length-1;a>-1;a--)l=o[a],d=l.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--)l=n[a],d=l.id,u=new gT(l,this._scene),this._updaterSets.set(d,u),u.forEach(function(g){f._insertUpdaterIntoBatch(e,g)}),this._subscriptions.set(d,u.geometryChanged.addEventListener(Hl._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let p=!0,y=this._batches,h=y.length;for(a=0;a-1;s--)l=n[s],a=l.id,i.remove(a)||(o.set(a,l),r.remove(a));for(s=t.length-1;s>-1;s--)l=t[s],a=l.id,o.remove(a)?r.set(a,l):i.set(a,l)};var v2=Hl;var Vbi=_(T(),1);var cet=1,det="30px sans-serif",uet=Yo.FILL,met=Y.WHITE,fet=Y.BLACK,het=1,pet=!1,bet=new Y(.165,.165,.165,.8),yet=new D(7,5),get=D.ZERO,xet=m.ZERO,_et=ze.NONE,Tet=xi.CENTER,Cet=Mn.CENTER,Vet=new m,Let=new Y,Zet=new Y,Ret=new Y,Get=new D,Eet=new m,Xet=new D,Iet=new Nt,Wet=new Nt,wet=new Nt,Pet=new vt;function che(e){this.entity=e,this.label=void 0,this.index=void 0}function og(e,t){if(!c(e))throw new L("entityCluster is required.");if(!c(t))throw new L("entityCollection is required.");t.collectionChanged.addEventListener(og.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Zt,this._onCollectionChanged(t,t.values,[],[])}og.prototype.update=function(e){if(!c(e))throw new L("time is required.");let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i-1;o--)r=t[o],c(r._label)&&c(r._position)&&s.set(r.id,new che(r));for(o=i.length-1;o>-1;o--)r=i[o],c(r._label)&&c(r._position)?s.contains(r.id)||s.set(r.id,new che(r)):(UJ(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],UJ(s.get(r.id),r,a),s.remove(r.id)};function UJ(e,t,n){c(e)&&(e.label=void 0,n.removeLabel(t))}var F2=og;var Hbi=_(T(),1);var vet=1,Fet=!0,Aet=0,Met=!0,Net=!0,ket=Sn.ENABLED,Uet=ze.NONE,Oet=Y.RED,Det=0,Bet=Y.WHITE,Yet=bc.HIGHLIGHT,Het=.5,zet=new D(1,1),lhe={maximumPositionEpsilon:Number.POSITIVE_INFINITY},Ket=new M,Jet=new M,dhe=new Y,uhe=new Array(4),Qet=new m;function rg(e,t){C.typeOf.object("scene",e),C.typeOf.object("entityCollection",t),t.collectionChanged.addEventListener(rg.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._modelHash={},this._entitiesToVisualize=new Zt,this._onCollectionChanged(t,t.values,[],[])}async function jet(e,t,n,i,o){let r=e._primitives,s=e._modelHash;try{let a=await af.fromGltfAsync({url:n,incrementallyLoadTextures:i,scene:e._scene,environmentMapOptions:o});if(e.isDestroyed()||!c(s[t.id]))return;a.id=t,r.add(a),s[t.id].modelPrimitive=a,a.errorEvent.addEventListener(l=>{c(s[t.id])&&(console.log(l),l.name!=="TextureError"&&a.incrementallyLoadTextures&&(s[t.id].loadFailed=!0))})}catch(a){if(e.isDestroyed()||!c(s[t.id]))return;console.log(a),s[t.id].loadFailed=!0}}rg.prototype.update=function(e){if(!c(e))throw new L("time is required.");let t=this._entitiesToVisualize.values,n=this._modelHash,i=this._primitives;for(let o=0,r=t.length;o-1;i--)OJ(this,e[i],t,n);return he(this)};var cU=new m,qet=new pe;rg.prototype.getBoundingSphere=function(e,t){if(!c(e))throw new L("entity is required.");if(!c(t))throw new L("result is required.");let n=this._modelHash[e.id];if(!c(n))return ut.FAILED;if(n.loadFailed)return ut.FAILED;let i=n.modelPrimitive;if(!c(i)||!i.show)return ut.PENDING;if(!i.ready||!n.modelUpdated)return ut.PENDING;let o=this._scene,r=o.ellipsoid??re.default;if(i.heightReference!==ze.NONE){let a=i.modelMatrix;cU.x=a[12],cU.y=a[13],cU.z=a[14];let l=r.cartesianToCartographic(cU,qet),d=o.getHeight(l,i.heightReference);return c(d)&&(Lu(i.heightReference)?l.height=d:l.height+=d),ue.clone(i.boundingSphere,t),t.center=r.cartographicToCartesian(l),ut.DONE}return ue.clone(i.boundingSphere,t),ut.DONE};rg.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._entitiesToVisualize,a=this._modelHash,l=this._primitives;for(o=t.length-1;o>-1;o--)r=t[o],c(r._model)&&c(r._position)&&s.set(r.id,r);for(o=i.length-1;o>-1;o--)r=i[o],c(r._model)&&c(r._position)?($et(r,a),s.set(r.id,r)):(OJ(this,r,a,l),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],OJ(this,r,a,l),s.remove(r.id)};function OJ(e,t,n,i){let o=n[t.id];c(o)&&(i.removeAndDestroy(o.modelPrimitive),delete n[t.id])}function $et(e,t){let n=t[e.id];c(n)&&(n.nodeTransformationsScratch={},n.articulationsScratch={})}var A2=rg;var L0i=_(T(),1);var t0i=_(T(),1);function sg(e){this._definitionChanged=new ye,this._value=void 0,this._removeSubscription=void 0,this.setValue(e)}Object.defineProperties(sg.prototype,{isConstant:{get:function(){return J.isConstant(this._value)}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return c(this._value)?this._value.referenceFrame:Ui.FIXED}}});var ett=new ee;sg.prototype.getValue=function(e,t){return c(e)||(e=ee.now(ett)),this.getValueInReferenceFrame(e,Ui.FIXED,t)};sg.prototype.setValue=function(e){this._value!==e&&(this._value=e,c(this._removeSubscription)&&(this._removeSubscription(),this._removeSubscription=void 0),c(e)&&(this._removeSubscription=e.definitionChanged.addEventListener(this._raiseDefinitionChanged,this)),this._definitionChanged.raiseEvent(this))};sg.prototype.getValueInReferenceFrame=function(e,t,n){if(!c(e))throw new L("time is required.");if(!c(t))throw new L("referenceFrame is required.");if(c(this._value))return n=this._value.getValueInReferenceFrame(e,t,n),c(n)?re.default.scaleToGeodeticSurface(n,n):void 0};sg.prototype.equals=function(e){return this===e||e instanceof sg&&this._value===e._value};sg.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var Mh=sg;var ttt=60,ntt=1,fhe=new Zn,DJ=new Zn,BJ=new Zn;function mhe(e){this.entity=e,this.polyline=void 0,this.index=void 0,this.updater=void 0}function itt(e,t,n,i,o,r,s,a,l){let d=a,u;u=e.getValueInReferenceFrame(t,r,l[d]),c(u)&&(l[d++]=u);let f=!c(o)||ee.lessThanOrEquals(o,t)||ee.greaterThanOrEquals(o,n),p=0,y=i.length,h=i[p],g=n,x=!1,S,V,Z;for(;p0&&!x){let R=i[p+1],E=ee.secondsDifference(R,h);x=E>s,x&&(S=Math.ceil(E/s),V=0,Z=E/Math.max(S,2),S=Math.max(S-1,1))}if(x&&V0){let y=f.pop();l=this._polylineCollection.get(y),t.index=y}else t.index=this._polylineCollection.length,l=this._polylineCollection.add();l.id=n,t.polyline=l}let u=J.getValueOrDefault(i._resolution,e,ttt);l.show=!0,l.positions=phe(o,r,s,e,this._referenceFrame,u,l.positions.slice()),l.material=qo.getValue(e,i._material,l.material),l.width=J.getValueOrDefault(i._width,e,ntt),l.distanceDisplayCondition=J.getValueOrUndefined(i._distanceDisplayCondition,e,l.distanceDisplayCondition)};M2.prototype.removeObject=function(e){let t=e.polyline;c(t)&&(this._unusedIndexes.push(e.index),e.polyline=void 0,t.show=!1,t.id=void 0,e.index=void 0)};M2.prototype.destroy=function(){return this._scene.primitives.remove(this._polylineCollection),he(this)};function ag(e,t){if(!c(e))throw new L("scene is required.");if(!c(t))throw new L("entityCollection is required.");t.collectionChanged.addEventListener(ag.prototype._onCollectionChanged,this),this._scene=e,this._updaters={},this._entityCollection=t,this._items=new Zt,this._onCollectionChanged(t,t.values,[],[])}ag.prototype.update=function(e){if(!c(e))throw new L("time is required.");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&&c(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-1;o--)r=t[o],c(r._path)&&c(r._position)&&a.set(r.id,new mhe(r));for(o=i.length-1;o>-1;o--)r=i[o],c(r._path)&&c(r._position)?a.contains(r.id)||a.set(r.id,new mhe(r)):(s=a.get(r.id),c(s)&&(c(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),c(s)&&(c(s.updater)&&s.updater.removeObject(s),a.remove(r.id))};ag._subSample=phe;var N2=ag;var k0i=_(T(),1);var bhe=Y.WHITE,yhe=Y.BLACK,ghe=0,xhe=1,_he=0,The=Ar.NONE,She=new Y,dtt=new m,Che=new Y,Vhe=new Nt,Lhe=new Nt,Zhe=new vt;function Rhe(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 cg(e,t){if(!c(e))throw new L("entityCluster is required.");if(!c(t))throw new L("entityCollection is required.");t.collectionChanged.addEventListener(cg.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Zt,this._onCollectionChanged(t,t.values,[],[])}cg.prototype.update=function(e){if(!c(e))throw new L("time is required.");let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i0?(d.scale=1,y=y||S!==r.outlineWidth||V!==r.pixelSize||!Y.equals(g,r.color)||!Y.equals(x,r.outlineColor)):(d.scale=V/50,V=50,y=y||S!==r.outlineWidth||!Y.equals(g,r.color)||!Y.equals(x,r.outlineColor)),y){r.color=Y.clone(g,r.color),r.outlineColor=Y.clone(x,r.outlineColor),r.pixelSize=V,r.outlineWidth=S;let Z=g.alpha,R=g.toCssColorString(),E=x.toCssColorString(),I=JSON.stringify([R,V,E,S]);d.setImage(I,w_(Z,R,E,S,V))}h&&d._updateClamping()}}return!0};cg.prototype.getBoundingSphere=function(e,t){if(!c(e))throw new L("entity is required.");if(!c(t))throw new L("result is required.");let n=this._items.get(e.id);if(!c(n)||!(c(n.pointPrimitive)||c(n.billboard)))return ut.FAILED;if(c(n.pointPrimitive))t.center=m.clone(n.pointPrimitive.position,t.center);else{let i=n.billboard;if(!c(i._clampedPosition))return ut.PENDING;t.center=m.clone(i._clampedPosition,t.center)}return t.radius=0,ut.DONE};cg.prototype.isDestroyed=function(){return!1};cg.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(cg.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t-1;o--)r=t[o],c(r._point)&&c(r._position)&&s.set(r.id,new Rhe(r));for(o=i.length-1;o>-1;o--)r=i[o],c(r._point)&&c(r._position)?s.contains(r.id)||s.set(r.id,new Rhe(r)):(k2(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],k2(s.get(r.id),r,a),s.remove(r.id)};function k2(e,t,n){if(c(e)){let i=e.pointPrimitive;if(c(i)){e.pointPrimitive=void 0,n.removePoint(t);return}let o=e.billboard;c(o)&&(e.billboard=void 0,n.removeBillboard(t))}}var U2=cg;var xgi=_(T(),1);var Nyi=_(T(),1);var ayi=_(T(),1);var Whe=[];function utt(e,t,n,i,o){let r=Whe;r.length=o;let s,a=n.red,l=n.green,d=n.blue,u=n.alpha,f=i.red,p=i.green,y=i.blue,h=i.alpha;if(Y.equals(n,i)){for(s=0;s0?new Array(o):void 0;for(i=0;i0){let A=0,k=f[0];i=i.filter(function(B,O){let H=!1;return o?H=O===k||O===0&&k===1:H=O+1===k,H?(A++,k=f[A],!1):!0})}let y=p.length;if(y<2||t<=0)return;if(r===Kt.GEODESIC||r===Kt.RHUMB){let A,k;r===Kt.GEODESIC?(A=w.chordLength(s,a.maximumRadius),k=vi.numberOfPoints):(A=s,k=vi.numberOfPointsRhumbLine);let B=vi.extractHeights(p,a);if(c(i)){let O=1;for(l=0;l0)return ue.fromPoints(t.positions,e),ut.DONE}return ut.FAILED};D2.prototype.isDestroyed=function(){return!1};D2.prototype.destroy=function(){let t=this._geometryUpdater._scene.id+this._primitives._guid,n=lU[t];c(n)&&(n.remove(this._line),n.length===0&&(this._primitives.removeAndDestroy(n),delete lU[t])),c(this._groundPolylinePrimitive)&&this._groundPrimitives.remove(this._groundPolylinePrimitive),he(this)};var B2=Gf;var tgi=_(T(),1);var _tt=new Y,Ttt=new vt,Stt=new vt;function Ef(e,t,n,i,o){let r;n instanceof Ut?r=es:r=ua,this.orderedGroundPrimitives=e,this.classificationType=t,this.appearanceType=r,this.materialProperty=n,this.updaters=new Zt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Zt,this.material=void 0,this.updatersWithAttributes=new Zt,this.attributes=new Zt,this.invalidated=!1,this.removeMaterialSubscription=n.definitionChanged.addEventListener(Ef.prototype.onMaterialChanged,this),this.subscriptions=new Zt,this.showsUpdated=new Zt,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 Ut&&t instanceof Ut?!0:c(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||!J.isConstant(t.distanceDisplayConditionProperty))this.updatersWithAttributes.set(i,t);else{let o=this;this.subscriptions.set(i,t.entity.definitionChanged.addEventListener(function(r,s,a,l){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 c(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)c(n)&&(c(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),n=new Am({show:!1,asynchronous:this._asynchronous,geometryInstances:o.slice(),appearance:new this.appearanceType,classificationType:this.classificationType}),this.appearanceType===ua&&(this.material=qo.getValue(e,this.materialProperty,this.material),n.appearance.material=this.material),i.add(n,this.zIndex),t=!1;else{c(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;c(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(c(n)&&n.ready){n.show=!0,c(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.appearanceType===ua&&(this.material=qo.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material);let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};CV.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 l=0;l-1;a--)l=s[a],d=l.id,u=this._updaters.get(d),u.entity===l?(Ahe(this,u),Mhe(this,e,u)):(o.push(l),n.push(l));for(a=o.length-1;a>-1;a--)l=o[a],d=l.id,u=this._updaters.get(d),Ahe(this,u),u.destroy(),this._updaters.remove(d),this._subscriptions.get(d)(),this._subscriptions.remove(d);for(a=n.length-1;a>-1;a--)l=n[a],d=l.id,u=new B2(l,this._scene),this._updaters.set(d,u),Mhe(this,e,u),this._subscriptions.set(d,u.geometryChanged.addEventListener(Nh._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let f=!0,p=this._batches,y=p.length;for(a=0;a-1;s--)l=n[s],a=l.id,i.remove(a)||(o.set(a,l),r.remove(a));for(s=t.length-1;s>-1;s--)l=t[s],a=l.id,o.remove(a)?r.set(a,l):i.set(a,l)};var H2=Nh;function zl(e){C.typeOf.object("options",e),C.typeOf.object("options.scene",e.scene),C.typeOf.object("options.dataSourceCollection",e.dataSourceCollection),kc.initializeTerrainHeights(),Am.initializeTerrainHeights();let t=e.scene,n=e.dataSourceCollection;this._eventHelper=new hr,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??zl.defaultVisualizersCallback;let i=!1,o=new al,r=new al;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;dnew o(e,i))]};Object.defineProperties(zl.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}}});zl.prototype.isDestroyed=function(){return!1};zl.prototype.destroy=function(){this._eventHelper.removeAll();let e=this._dataSourceCollection;for(let t=0,n=e.length;tWtt*d.maximumRadius?(h=Ohe,m.normalize(f,h),m.negate(h,h),x=m.clone(m.UNIT_Z,HJ),g=m.cross(x,h,dU),m.magnitude(g)>w.EPSILON7&&(m.normalize(h,h),m.normalize(g,g),x=m.cross(h,g,HJ),m.normalize(x,x),p=!0)):m.equalsEpsilon(f,v,w.EPSILON7)||(x=Ohe,m.normalize(b,x),m.normalize(G,G),g=m.cross(x,G,HJ),y&&(g=m.multiplyByScalar(g,-1,g)),m.equalsEpsilon(g,m.ZERO,w.EPSILON7)||(h=m.cross(g,x,dU),te.multiplyByVector(N,h,h),te.multiplyByVector(N,g,g),te.multiplyByVector(N,x,x),m.normalize(h,h),m.normalize(g,g),m.normalize(x,x),p=!0))}}c(e.boundingSphere)&&(f=e.boundingSphere.center);let S,V,Z;i&&(S=m.clone(t.position,zJ),V=m.clone(t.direction,Dhe),Z=m.clone(t.up,Bhe));let R=Gtt,E;c(s)&&(E=s.getValue(l,Ett));let I=r.getValue(l,Xtt);if(a===vp.INERTIAL&&c(E))M.fromTranslationQuaternionRotationScale(f,E,m.ONE,R);else if(a===vp.VELOCITY&&c(I)){let v=wt.rotationMatrixFromPositionVelocity(f,I,d,Itt);M.fromRotationTranslation(v,f,R)}else a===vp.ENU||!p?wt.eastNorthUpToFixedFrame(f,d,R):(R[0]=h.x,R[1]=h.y,R[2]=h.z,R[3]=0,R[4]=g.x,R[5]=g.y,R[6]=g.z,R[7]=0,R[8]=x.x,R[9]=x.y,R[10]=x.z,R[11]=0,R[12]=f.x,R[13]=f.y,R[14]=f.z,R[15]=0);t._setTransform(R),i&&(m.clone(S,t.position),m.clone(V,t.direction),m.clone(Z,t.up),m.cross(V,Z,t.right))}if(n){let p=u===se.SCENE2D||m.equals(e._offset3D,m.ZERO)?void 0:e._offset3D;t.lookAtTransform(t.transform,p)}}function K2(e,t,n){C.defined("entity",e),C.defined("scene",t),this.entity=e,this.scene=t,this.ellipsoid=n??re.default,this.boundingSphere=void 0,this._lastEntity=void 0,this._mode=void 0,this._lastCartesian=new m,this._defaultOffset3D=void 0,this._velocityProperty=new Kb(e.position,!0),this._offset3D=new m}Object.defineProperties(K2,{defaultOffset3D:{get:function(){return this._defaultOffset3D},set:function(e){this._defaultOffset3D=m.clone(e,new m)}}});K2.defaultOffset3D=new m(-14e3,3500,3500);var uU=new rm,Ptt=new m;K2.prototype.update=function(e,t){C.defined("time",e);let n=this.scene,i=this.ellipsoid,o=n.mode;if(o===se.MORPHING)return;let r=this.entity,s=r.trackingReferenceFrame,a=r.position;if(!c(a))return;let l=this._velocityProperty,d=r.orientation,u=r!==this._lastEntity,f=o!==this._mode,p=n.camera,y=u||f,h=!0;if(u){let g=r.viewFrom,x=c(g);if(!x&&c(t)){uU.pitch=-w.PI_OVER_FOUR,uU.range=0;let S=a.getValue(e,Ptt);if(c(S)){let V=2-1/Math.max(1,m.magnitude(S)/i.maximumRadius);uU.pitch*=V}p.viewBoundingSphere(t,uU),this.boundingSphere=t,y=!1,h=!1}else(!x||!c(g.getValue(e,this._offset3D)))&&m.clone(K2._defaultOffset3D,this._offset3D)}else!f&&this._mode!==se.SCENE2D&&m.clone(p.position,this._offset3D);this._lastEntity=r,this._mode=o,wtt(this,p,y,h,a,l,d,s,e,i)};var J2=K2;var ETi=_(T(),1);var J_i=_(T(),1);var cxi=_(T(),1);function gU(e){return xU(e.map(([t,n])=>new Array(t).fill(n,0,t)))}function xU(e){return e.reduce((t,n)=>t.concat(Array.isArray(n)?xU(n):n),[])}var Yhe=[0,1,2,3].concat(...gU([[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 br(){let e=this;function t(o){let r=e.dyn_tree,s=e.stat_desc.static_tree,a=e.stat_desc.extra_bits,l=e.stat_desc.extra_base,d=e.stat_desc.max_length,u,f,p,y,h,g,x=0;for(y=0;y<=15;y++)o.bl_count[y]=0;for(r[o.heap[o.heap_max]*2+1]=0,u=o.heap_max+1;u<573;u++)f=o.heap[u],y=r[r[f*2+1]*2+1]+1,y>d&&(y=d,x++),r[f*2+1]=y,!(f>e.max_code)&&(o.bl_count[y]++,h=0,f>=l&&(h=a[f-l]),g=r[f*2],o.opt_len+=g*(y+h),s&&(o.static_len+=g*(s[f*2+1]+h)));if(x!==0){do{for(y=d-1;o.bl_count[y]===0;)y--;o.bl_count[y]--,o.bl_count[y+1]+=2,o.bl_count[d]--,x-=2}while(x>0);for(y=d;y!==0;y--)for(f=o.bl_count[y];f!==0;)p=o.heap[--u],!(p>e.max_code)&&(r[p*2+1]!=y&&(o.opt_len+=(y-r[p*2+1])*r[p*2],r[p*2+1]=y),f--)}}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=[],l=0,d,u,f;for(d=1;d<=15;d++)a[d]=l=l+s[d-1]<<1;for(u=0;u<=r;u++)f=o[u*2+1],f!==0&&(o[u*2]=n(a[f]++,f))}e.build_tree=function(o){let r=e.dyn_tree,s=e.stat_desc.static_tree,a=e.stat_desc.elems,l,d,u=-1,f;for(o.heap_len=0,o.heap_max=573,l=0;l=1;l--)o.pqdownheap(r,l);f=a;do l=o.heap[1],o.heap[1]=o.heap[o.heap_len--],o.pqdownheap(r,1),d=o.heap[1],o.heap[--o.heap_max]=l,o.heap[--o.heap_max]=d,r[f*2]=r[l*2]+r[d*2],o.depth[f]=Math.max(o.depth[l],o.depth[d])+1,r[l*2+1]=r[d*2+1]=f,o.heap[1]=f++,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)}}br._length_code=[0,1,2,3,4,5,6,7].concat(...gU([[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]]));br.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];br.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];br.d_code=function(e){return e<256?Yhe[e]:Yhe[256+(e>>>7)]};br.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];br.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];br.extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];br.bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function ka(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 vtt=[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],Ftt=gU([[144,8],[112,9],[24,7],[8,8]]);ka.static_ltree=xU(vtt.map((e,t)=>[e,Ftt[t]]));var Att=[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],Mtt=gU([[30,5]]);ka.static_dtree=xU(Att.map((e,t)=>[e,Mtt[t]]));ka.static_l_desc=new ka(ka.static_ltree,br.extra_lbits,257,286,15);ka.static_d_desc=new ka(ka.static_dtree,br.extra_dbits,0,30,15);ka.static_bl_desc=new ka(null,br.extra_blbits,0,19,7);var Ntt=9,ktt=8;function kh(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 zhe=0,bU=1,ST=2,Xf=[new kh(0,0,0,0,zhe),new kh(4,4,8,4,bU),new kh(4,5,16,8,bU),new kh(4,6,32,32,bU),new kh(4,4,16,16,ST),new kh(8,16,32,32,ST),new kh(8,16,128,128,ST),new kh(8,32,128,256,ST),new kh(32,128,258,1024,ST),new kh(32,258,258,4096,ST)],mU=["need dictionary","stream end","","","stream error","data error","","buffer error","",""],sm=0,fU=1,Q2=2,hU=3,Utt=32,KJ=42,pU=113,j2=666,JJ=8,Ott=0,QJ=1,Dtt=2,Xr=3,yU=258,Ud=yU+Xr+1;function Hhe(e,t,n,i){let o=e[t*2],r=e[n*2];return o=3&&B[br.bl_order[Ae]*2+1]===0;Ae--);return e.opt_len+=3*(Ae+1)+5+5+4,Ae}function Ie(Ae){e.pending_buf[e.pending++]=Ae}function Ze(Ae){Ie(Ae&255),Ie(Ae>>>8&255)}function De(Ae){Ie(Ae>>8&255),Ie(Ae&255&255)}function Ke(Ae,st){let Qe,$e=st;ne>16-$e?(Qe=Ae,$|=Qe<>>16-ne,ne+=$e-16):($|=Ae<=8&&(Ie($&255),$>>>=8,ne-=8)}function mn(){Ke(QJ<<1,3),rt(256,ka.static_ltree),qe(),1+j+10-ne<9&&(Ke(QJ<<1,3),rt(256,ka.static_ltree),qe()),j=7}function Dt(Ae,st){let Qe,$e,yt;if(e.dist_buf[Q]=Ae,e.lc_buf[Q]=st&255,Q++,Ae===0?A[st*2]++:(ie++,Ae--,A[(br._length_code[st]+256+1)*2]++,k[br.d_code(Ae)*2]++),!(Q&8191)&&b>2){for(Qe=Q*8,$e=E-S,yt=0;yt<30;yt++)Qe+=k[yt*2]*(5+br.extra_dbits[yt]);if(Qe>>>=3,ie8?Ze($):ne>0&&Ie($&255),$=0,ne=0}function ln(Ae,st,Qe){Vi(),j=8,Qe&&(Ze(st),Ze(~st)),e.pending_buf.set(l.subarray(Ae,Ae+st),e.pending),e.pending+=st}function ge(Ae,st,Qe){Ke((Ott<<1)+(Qe?1:0),3),ln(Ae,st,!0)}function Le(Ae,st,Qe){let $e,yt,Bt=0;b>0?(O.build_tree(e),H.build_tree(e),Bt=Ve(),$e=e.opt_len+3+7>>>3,yt=e.static_len+3+7>>>3,yt<=$e&&($e=yt)):$e=yt=st+5,st+4<=$e&&Ae!=-1?ge(Ae,st,Qe):yt==$e?(Ke((QJ<<1)+(Qe?1:0),3),Lt(ka.static_ltree,ka.static_dtree)):(Ke((Dtt<<1)+(Qe?1:0),3),Ht(O.max_code+1,H.max_code+1,Bt+1),Lt(A,k)),Ce(),Qe&&Vi()}function yn(Ae){Le(S>=0?S:-1,E-S,Ae),S=E,t.flush_pending()}function bt(){let Ae,st,Qe,$e;do{if($e=d-v-E,$e===0&&E===0&&v===0)$e=r;else if($e==-1)$e--;else if(E>=r+r-Ud){l.set(l.subarray(r,r+r),0),I-=r,E-=r,S-=r,Ae=y,Qe=Ae;do st=f[--Qe]&65535,f[Qe]=st>=r?st-r:0;while(--Ae!==0);Ae=r,Qe=Ae;do st=u[--Qe]&65535,u[Qe]=st>=r?st-r:0;while(--Ae!==0);$e+=r}if(t.avail_in===0)return;Ae=t.read_buf(l,E+v,$e),v+=Ae,v>=Xr&&(p=l[E]&255,p=(p<i-5&&(st=i-5);;){if(v<=1){if(bt(),v===0&&Ae==0)return sm;if(v===0)break}if(E+=v,v=0,Qe=S+st,(E===0||E>=Qe)&&(v=E-Qe,E=Qe,yn(!1),t.avail_out===0)||E-S>=r-Ud&&(yn(!1),t.avail_out===0))return sm}return yn(Ae==4),t.avail_out===0?Ae==4?Q2:sm:Ae==4?hU:fU}function Xo(Ae){let st=F,Qe=E,$e,yt,Bt=P,Ln=E>r-Ud?E-(r-Ud):0,Io=W,To=a,Ka=E+yU,Ja=l[Qe+Bt-1],Li=l[Qe+Bt];P>=X&&(st>>=2),Io>v&&(Io=v);do if($e=Ae,!(l[$e+Bt]!=Li||l[$e+Bt-1]!=Ja||l[$e]!=l[Qe]||l[++$e]!=l[Qe+1])){Qe+=2,$e++;do;while(l[++Qe]==l[++$e]&&l[++Qe]==l[++$e]&&l[++Qe]==l[++$e]&&l[++Qe]==l[++$e]&&l[++Qe]==l[++$e]&&l[++Qe]==l[++$e]&&l[++Qe]==l[++$e]&&l[++Qe]==l[++$e]&&QeBt){if(I=Ae,Bt=yt,yt>=Io)break;Ja=l[Qe+Bt-1],Li=l[Qe+Bt]}}while((Ae=u[Ae&To]&65535)>Ln&&--st!==0);return Bt<=v?Bt:v}function ra(Ae){let st=0,Qe;for(;;){if(v=Xr&&(p=(p<=Xr)if(Qe=Dt(E-I,V-Xr),v-=V,V<=N&&v>=Xr){V--;do E++,p=(p<=Xr&&(p=(p<4096)&&(V=Xr-1)),P>=Xr&&V<=P){$e=E+v-Xr,Qe=Dt(E-1-Z,P-Xr),v-=P-1,P-=2;do++E<=$e&&(p=(p<Ntt||$e!=JJ||Qe<9||Qe>15||st<0||st>9||Bt<0||Bt>2?-2:(Ae.dstate=e,s=Qe,r=1<9||Qe<0||Qe>2?-2:(Xf[b].func!=Xf[st].func&&Ae.total_in!==0&&($e=Ae.deflate(1)),b!=st&&(b=st,N=Xf[b].max_lazy,X=Xf[b].good_length,W=Xf[b].nice_length,F=Xf[b].max_chain),G=Qe,$e)},e.deflateSetDictionary=function(Ae,st,Qe){let $e=Qe,yt,Bt=0;if(!st||n!=KJ)return-2;if($er-Ud&&($e=r-Ud,Bt=Qe-$e),l.set(st.subarray(Bt,Bt+$e),0),E=$e,S=$e,p=l[0]&255,p=(p<4||st<0)return-2;if(!Ae.next_out||!Ae.next_in&&Ae.avail_in!==0||n==j2&&st!=4)return Ae.msg=mU[4],-2;if(Ae.avail_out===0)return Ae.msg=mU[7],-5;if(t=Ae,Bt=o,o=st,n==KJ&&($e=JJ+(s-8<<4)<<8,yt=(b-1&255)>>1,yt>3&&(yt=3),$e|=yt<<6,E!==0&&($e|=Utt),$e+=31-$e%31,n=pU,De($e)),e.pending!==0){if(t.flush_pending(),t.avail_out===0)return o=-1,0}else if(t.avail_in===0&&st<=Bt&&st!=4)return t.msg=mU[7],-5;if(n==j2&&t.avail_in!==0)return Ae.msg=mU[7],-5;if(t.avail_in!==0||v!==0||st!=0&&n!=j2){switch(Ln=-1,Xf[b].func){case zhe:Ln=ro(st);break;case bU:Ln=ra(st);break;case ST:Ln=Wr(st);break;default:}if((Ln==Q2||Ln==hU)&&(n=j2),Ln==sm||Ln==Q2)return t.avail_out===0&&(o=-1),0;if(Ln==fU){if(st==1)mn();else if(ge(0,0,!1),st==3)for(Qe=0;Qen&&(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 Jhe(e){let t=this,n=new Khe,i=Ytt(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,l){let d,u,f=0,p=0,y=0,h=[];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?h.push(new Uint8Array(r)):h.push(r.subarray(0,n.next_out_index))),y+=n.next_out_index,l&&n.next_in_index>0&&n.next_in_index!=f&&(l(n.next_in_index),f=n.next_in_index)}while(n.avail_in>0||n.avail_out===0);return h.length>1?(u=new Uint8Array(y),h.forEach(function(g){u.set(g,p),p+=g.length})):u=h[0]?new Uint8Array(h[0]):new Uint8Array,u}},t.flush=function(){let a,l,d=0,u=0,f=[];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&&f.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(),l=new Uint8Array(u),f.forEach(function(p){l.set(p,d),d+=p.length}),l}}function Ytt(e){return e+5*(Math.floor(e/16383)+1)}var dxi=_(T(),1);var Od=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],ppe=1440,Htt=0,ztt=4,Ktt=9,Jtt=5,Qtt=[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],jtt=[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],qtt=[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],$tt=[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],ent=[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],tnt=[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],lg=15;function eQ(){let e=this,t,n,i,o,r,s;function a(d,u,f,p,y,h,g,x,S,V,Z){let R,E,I,v,P,F,N,b,G,X,W,A,k,B,O;X=0,P=f;do i[d[u+X]]++,X++,P--;while(P!==0);if(i[0]==f)return g[0]=-1,x[0]=0,0;for(b=x[0],F=1;F<=lg&&i[F]===0;F++);for(N=F,bP&&(b=P),x[0]=b,B=1<A+b;){if(v++,A+=b,O=I-A,O=O>b?b:O,(E=1<<(F=N-A))>R+1&&(E-=R+1,k=N,Fppe)return-3;r[v]=W=V[0],V[0]+=O,v!==0?(s[v]=P,o[0]=F,o[1]=b,F=P>>>A-b,o[2]=W-r[v-1]-F,S.set(o,(r[v-1]+F)*3)):g[0]=W}for(o[1]=N-A,X>=f?o[0]=192:Z[X]>>A;F>>=1)P^=F;for(P^=F,G=(1<257?(V==-3?S.msg="oversubscribed distance tree":V==-5?(S.msg="incomplete distance tree",V=-3):V!=-4&&(S.msg="empty distance tree with lengths",V=-3),V):0)}}eQ.inflate_trees_fixed=function(e,t,n,i){return e[0]=Ktt,t[0]=Jtt,n[0]=Qtt,i[0]=jtt,0};var _U=0,Qhe=1,jhe=2,qhe=3,$he=4,epe=5,tpe=6,jJ=7,npe=8,TU=9;function nnt(){let e=this,t,n=0,i,o=0,r=0,s=0,a=0,l=0,d=0,u=0,f,p=0,y,h=0;function g(x,S,V,Z,R,E,I,v){let P,F,N,b,G,X,W,A,k,B,O,H,U,K,Q,ie;W=v.next_in_index,A=v.avail_in,G=I.bitb,X=I.bitk,k=I.write,B=k>=F[ie+1],X-=F[ie+1],I.win[k++]=F[ie+2],B--;continue}do{if(G>>=F[ie+1],X-=F[ie+1],b&16){for(b&=15,U=F[ie+2]+(G&Od[b]),G>>=b,X-=b;X<15;)A--,G|=(v.read_byte(W++)&255)<>=F[ie+1],X-=F[ie+1],b&16){for(b&=15;X>=b,X-=b,B-=U,k>=K)Q=k-K,k-Q>0&&2>k-Q?(I.win[k++]=I.win[Q++],I.win[k++]=I.win[Q++],U-=2):(I.win.set(I.win.subarray(Q,Q+2),k),k+=2,Q+=2,U-=2);else{Q=k-K;do Q+=I.end;while(Q<0);if(b=I.end-Q,U>b){if(U-=b,k-Q>0&&b>k-Q)do I.win[k++]=I.win[Q++];while(--b!==0);else I.win.set(I.win.subarray(Q,Q+b),k),k+=b,Q+=b,b=0;Q=0}}if(k-Q>0&&U>k-Q)do I.win[k++]=I.win[Q++];while(--U!==0);else I.win.set(I.win.subarray(Q,Q+U),k),k+=U,Q+=U,U=0;break}else if(!(b&64))P+=F[ie+2],P+=G&Od[b],ie=(N+P)*3,b=F[ie];else return v.msg="invalid distance code",U=v.avail_in-A,U=X>>3>3:U,A+=U,W-=U,X-=U<<3,I.bitb=G,I.bitk=X,v.avail_in=A,v.total_in+=W-v.next_in_index,v.next_in_index=W,I.write=k,-3;while(!0);break}if(b&64)return b&32?(U=v.avail_in-A,U=X>>3>3:U,A+=U,W-=U,X-=U<<3,I.bitb=G,I.bitk=X,v.avail_in=A,v.total_in+=W-v.next_in_index,v.next_in_index=W,I.write=k,1):(v.msg="invalid literal/length code",U=v.avail_in-A,U=X>>3>3:U,A+=U,W-=U,X-=U<<3,I.bitb=G,I.bitk=X,v.avail_in=A,v.total_in+=W-v.next_in_index,v.next_in_index=W,I.write=k,-3);if(P+=F[ie+2],P+=G&Od[b],ie=(N+P)*3,(b=F[ie])===0){G>>=F[ie+1],X-=F[ie+1],I.win[k++]=F[ie+2],B--;break}}while(!0)}while(B>=258&&A>=10);return U=v.avail_in-A,U=X>>3>3:U,A+=U,W-=U,X-=U<<3,I.bitb=G,I.bitk=X,v.avail_in=A,v.total_in+=W-v.next_in_index,v.next_in_index=W,I.write=k,0}e.init=function(x,S,V,Z,R,E){t=_U,d=x,u=S,f=V,p=Z,y=R,h=E,i=null},e.proc=function(x,S,V){let Z,R,E,I=0,v=0,P=0,F,N,b,G;for(P=S.next_in_index,F=S.avail_in,I=x.bitb,v=x.bitk,N=x.write,b=N=258&&F>=10&&(x.bitb=I,x.bitk=v,S.avail_in=F,S.total_in+=P-S.next_in_index,S.next_in_index=P,x.write=N,V=g(d,u,f,p,y,h,x,S),P=S.next_in_index,F=S.avail_in,I=x.bitb,v=x.bitk,N=x.write,b=N>>=i[R+1],v-=i[R+1],E=i[R],E===0){s=i[R+2],t=tpe;break}if(E&16){a=E&15,n=i[R+2],t=jhe;break}if(!(E&64)){r=E,o=R/3+i[R+2];break}if(E&32){t=jJ;break}return t=TU,S.msg="invalid literal/length code",V=-3,x.bitb=I,x.bitk=v,S.avail_in=F,S.total_in+=P-S.next_in_index,S.next_in_index=P,x.write=N,x.inflate_flush(S,V);case jhe:for(Z=a;v>=Z,v-=Z,r=u,i=y,o=h,t=qhe;case qhe:for(Z=r;v>=i[R+1],v-=i[R+1],E=i[R],E&16){a=E&15,l=i[R+2],t=$he;break}if(!(E&64)){r=E,o=R/3+i[R+2];break}return t=TU,S.msg="invalid distance code",V=-3,x.bitb=I,x.bitk=v,S.avail_in=F,S.total_in+=P-S.next_in_index,S.next_in_index=P,x.write=N,x.inflate_flush(S,V);case $he:for(Z=a;v>=Z,v-=Z,t=epe;case epe:for(G=N-l;G<0;)G+=x.end;for(;n!==0;){if(b===0&&(N==x.end&&x.read!==0&&(N=0,b=N7&&(v-=8,F++,P--),x.write=N,V=x.inflate_flush(S,V),N=x.write,b=Ng.avail_out&&(S=g.avail_out),S!==0&&x==-5&&(x=0),g.avail_out-=S,g.total_out+=S,g.next_out.set(n.win.subarray(Z,Z+S),V),V+=S,Z+=S,Z==n.end&&(Z=0,n.write==n.end&&(n.write=0),S=n.write-Z,S>g.avail_out&&(S=g.avail_out),S!==0&&x==-5&&(x=0),g.avail_out-=S,g.total_out+=S,g.next_out.set(n.win.subarray(Z,Z+S),V),V+=S,Z+=S),g.next_out_index=V,n.read=Z,x},n.proc=function(g,x){let S,V,Z,R,E,I,v,P;for(R=g.next_in_index,E=g.avail_in,V=n.bitb,Z=n.bitk,I=n.write,v=I>>1){case 0:V>>>=3,Z-=3,S=Z&7,V>>>=S,Z-=S,i=qJ;break;case 1:F=[],N=[],b=[[]],G=[[]],eQ.inflate_trees_fixed(F,N,b,G),u.init(F[0],N[0],b[0],0,G[0],0),V>>>=3,Z-=3,i=SU;break;case 2:V>>>=3,Z-=3,i=rpe;break;case 3:return V>>>=3,Z-=3,i=CT,g.msg="invalid block type",x=-3,n.bitb=V,n.bitk=Z,g.avail_in=E,g.total_in+=R-g.next_in_index,g.next_in_index=R,n.write=I,n.inflate_flush(g,x)}break;case qJ:for(;Z<32;){if(E!==0)x=0;else return n.bitb=V,n.bitk=Z,g.avail_in=E,g.total_in+=R-g.next_in_index,g.next_in_index=R,n.write=I,n.inflate_flush(g,x);E--,V|=(g.read_byte(R++)&255)<>>16&65535)!=(V&65535))return i=CT,g.msg="invalid stored block lengths",x=-3,n.bitb=V,n.bitk=Z,g.avail_in=E,g.total_in+=R-g.next_in_index,g.next_in_index=R,n.write=I,n.inflate_flush(g,x);o=V&65535,V=Z=0,i=o!==0?ope:f!==0?CU:ZV;break;case ope:if(E===0||v===0&&(I==n.end&&n.read!==0&&(I=0,v=IE&&(S=E),S>v&&(S=v),n.win.set(g.read_buf(R,S),I),R+=S,E-=S,I+=S,v-=S,(o-=S)!==0)break;i=f!==0?CU:ZV;break;case rpe:for(;Z<14;){if(E!==0)x=0;else return n.bitb=V,n.bitk=Z,g.avail_in=E,g.total_in+=R-g.next_in_index,g.next_in_index=R,n.write=I,n.inflate_flush(g,x);E--,V|=(g.read_byte(R++)&255)<29||(S>>5&31)>29)return i=CT,g.msg="too many length or distance symbols",x=-3,n.bitb=V,n.bitk=Z,g.avail_in=E,g.total_in+=R-g.next_in_index,g.next_in_index=R,n.write=I,n.inflate_flush(g,x);if(S=258+(S&31)+(S>>5&31),!a||a.length>>=14,Z-=14,s=0,i=spe;case spe:for(;s<4+(r>>>10);){for(;Z<3;){if(E!==0)x=0;else return n.bitb=V,n.bitk=Z,g.avail_in=E,g.total_in+=R-g.next_in_index,g.next_in_index=R,n.write=I,n.inflate_flush(g,x);E--,V|=(g.read_byte(R++)&255)<>>=3,Z-=3}for(;s<19;)a[ipe[s++]]=0;if(l[0]=7,S=h.inflate_trees_bits(a,l,d,p,g),S!=0)return x=S,x==-3&&(a=null,i=CT),n.bitb=V,n.bitk=Z,g.avail_in=E,g.total_in+=R-g.next_in_index,g.next_in_index=R,n.write=I,n.inflate_flush(g,x);s=0,i=ape;case ape:for(;S=r,!(s>=258+(S&31)+(S>>5&31));){let B,O;for(S=l[0];Z>>=S,Z-=S,a[s++]=O;else{for(P=O==18?7:O-14,B=O==18?11:3;Z>>=S,Z-=S,B+=V&Od[P],V>>>=P,Z-=P,P=s,S=r,P+B>258+(S&31)+(S>>5&31)||O==16&&P<1)return a=null,i=CT,g.msg="invalid bit length repeat",x=-3,n.bitb=V,n.bitk=Z,g.avail_in=E,g.total_in+=R-g.next_in_index,g.next_in_index=R,n.write=I,n.inflate_flush(g,x);O=O==16?a[P-1]:0;do a[P++]=O;while(--B!==0);s=P}}if(d[0]=-1,X=[],W=[],A=[],k=[],X[0]=9,W[0]=6,S=r,S=h.inflate_trees_dynamic(257+(S&31),1+(S>>5&31),a,X,W,A,k,p,g),S!=0)return S==-3&&(a=null,i=CT),x=S,n.bitb=V,n.bitk=Z,g.avail_in=E,g.total_in+=R-g.next_in_index,g.next_in_index=R,n.write=I,n.inflate_flush(g,x);u.init(X[0],W[0],p,A[0],p,k[0]),i=SU;case SU:if(n.bitb=V,n.bitk=Z,g.avail_in=E,g.total_in+=R-g.next_in_index,g.next_in_index=R,n.write=I,(x=u.proc(n,g,x))!=1)return n.inflate_flush(g,x);if(x=0,u.free(g),R=g.next_in_index,E=g.avail_in,V=n.bitb,Z=n.bitk,I=n.write,v=I15?(e.inflateEnd(n),-2):(e.wbits=i,n.istate.blocks=new int(n,1<>4)+8>s.wbits){s.mode=dg,n.msg="invalid win size",s.marker=5;break}s.mode=lpe;case lpe: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=dg,n.msg="incorrect header check",s.marker=5;break}if(!(r&ont)){s.mode=q2;break}s.mode=dpe;case dpe: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=upe;case upe: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=mpe;case mpe: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=fpe;case fpe: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=$J,2);case $J:return s.mode=dg,n.msg="need dictionary",s.marker=0,-2;case q2:if(o=s.blocks.proc(n,o),o==-3){s.mode=dg,s.marker=0;break}if(o==0&&(o=i),o!=1)return o;o=i,s.blocks.reset(n,s.was),s.mode=hpe;case hpe:return n.avail_in=0,1;case dg:return-3;default:return-2}},e.inflateSetDictionary=function(n,i,o){let r=0,s=o;if(!n||!n.istate||n.istate.mode!=$J)return-2;let a=n.istate;return s>=1<0&&n.next_in_index!=p&&(l(n.next_in_index),p=n.next_in_index)}while(n.avail_in>0||n.avail_out===0);return d.length>1?(f=new Uint8Array(h),d.forEach(function(g){f.set(g,y),y+=g.length})):f=d[0]?new Uint8Array(d[0]):new Uint8Array,f}},t.flush=function(){n.inflateEnd()}}var xxi=_(T(),1);var mxi=_(T(),1);var RV="/",tQ=new Date(2107,11,31),nQ=new Date(1980,0,1),Ei=void 0,Dd="undefined",t0="function";var hxi=_(T(),1);var $2=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 lnt=64,gpe=2;try{typeof navigator!=Dd&&navigator.hardwareConcurrency&&(gpe=navigator.hardwareConcurrency)}catch{}var dnt={chunkSize:512*1024,maxWorkers:gpe,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,workerScripts:Ei,CompressionStreamNative:typeof CompressionStream!=Dd&&CompressionStream,DecompressionStreamNative:typeof DecompressionStream!=Dd&&DecompressionStream},mg=Object.assign({},dnt);function ev(){return mg}function VU(e){return Math.max(e.chunkSize,lnt)}function GV(e){let{baseURL:t,chunkSize:n,maxWorkers:i,terminateWorkerTimeout:o,useCompressionStream:r,useWebWorkers:s,Deflate:a,Inflate:l,CompressionStream:d,DecompressionStream:u,workerScripts:f}=e;if(ug("baseURL",t),ug("chunkSize",n),ug("maxWorkers",i),ug("terminateWorkerTimeout",o),ug("useCompressionStream",r),ug("useWebWorkers",s),a&&(mg.CompressionStream=new $2(a)),l&&(mg.DecompressionStream=new $2(l)),ug("CompressionStream",d),ug("DecompressionStream",u),f!==Ei){let{deflate:p,inflate:y}=f;if((p||y)&&(mg.workerScripts||(mg.workerScripts={})),p){if(!Array.isArray(p))throw new Error("workerScripts.deflate must be an array");mg.workerScripts.deflate=p}if(y){if(!Array.isArray(y))throw new Error("workerScripts.inflate must be an array");mg.workerScripts.inflate=y}}}function ug(e,t){t!==Ei&&(mg[e]=t)}var Txi=_(T(),1);var f_i=_(T(),1);var o_i=_(T(),1);var t_i=_(T(),1);var Zxi=_(T(),1);var Cxi=_(T(),1),xpe=[];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;xpe[e]=t}var n0=class{constructor(t){this.crc=t||-1}append(t){let n=this.crc|0;for(let i=0,o=t.length|0;i>>8^xpe[(n^t[i])&255];this.crc=n}get(){return~this.crc}};var tv=class extends TransformStream{constructor(){let t,n=new n0;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 Yxi=_(T(),1);var Exi=_(T(),1);function EV(e){if(typeof TextEncoder==Dd){e=unescape(encodeURIComponent(e));let t=new Uint8Array(e.length);for(let n=0;n0&&t&&(e[n-1]=ll.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>>t),n=e[s]<<32-t;let o=e.length?e[e.length-1]:0,r=ll.getPartial(o);return i.push(ll.partial(t+r&31,t+r>32?n:i.pop(),1)),i}},nv={bytes:{fromBits(e){let n=ll.bitLength(e)/8,i=new Uint8Array(n),o;for(let r=0;r>>24,o<<=8;return i},toBits(e){let t=[],n,i=0;for(n=0;n9007199254740991)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=ll.concat(t,[ll.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<>>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],l=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)+l+i[d]+t._key[Math.floor(d/20)]|0;l=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]+l|0}};var iQ={};iQ.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,l=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^l<<24,l=l<<1^(l>>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,l,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 f=s^s<<1^s<<2^s<<3^s<<4;f=f>>8^f&255^99,n[u]=f,i[f]=u,d=o[l=o[a=o[u]]];let p=d*16843009^l*65537^a*257^u*16843008,y=o[f]*257^f*16843008;for(let h=0;h<4;h++)e[h][u]=y=y<<24^y>>>8,t[h][f]=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],l=r[2],d=r[3],u=r[4],f=e[0]^n[0],p=e[t?3:1]^n[1],y=e[2]^n[2],h=e[t?1:3]^n[3],g=4,x,S,V;for(let Z=0;Z>>24]^a[p>>16&255]^l[y>>8&255]^d[h&255]^n[g],S=s[p>>>24]^a[y>>16&255]^l[h>>8&255]^d[f&255]^n[g+1],V=s[y>>>24]^a[h>>16&255]^l[f>>8&255]^d[p&255]^n[g+2],h=s[h>>>24]^a[f>>16&255]^l[p>>8&255]^d[y&255]^n[g+3],g+=4,f=x,p=S,y=V;for(let Z=0;Z<4;Z++)o[t?3&-Z:Z]=u[f>>>24]<<24^u[p>>16&255]<<16^u[y>>8&255]<<8^u[h&255]^n[g++],x=f,f=p,p=y,y=h,h=x;return o}};var Tpe={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>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=ll.bitLength(t);for(let r=0;r>5)+1<<2,r,s,a,l,d,u=new ArrayBuffer(o),f=new DataView(u),p=0,y=ll;for(t=nv.bytes.toBits(t),d=1;p<(o||1);d++){for(r=s=e.encrypt(y.concat(t,[d])),a=1;ao&&(e=new n().update(e).finalize());for(let r=0;rthis.resolveReady=s),password:Gpe(t,n),signed:i,strength:o-1,pending:new Uint8Array})},async transform(s,a){let l=this,{password:d,strength:u,resolveReady:f,ready:p}=l;d?(await Tnt(l,u,d,am(s,0,ov[u]+2)),s=am(s,ov[u]+2),r?a.error(new Error(i0)):f()):await p;let y=new Uint8Array(s.length-pg-(s.length-pg)%XV);a.enqueue(Zpe(l,s,y,0,pg,!0))},async flush(s){let{signed:a,ctr:l,hmac:d,pending:u,ready:f}=this;if(d&&l){await f;let p=am(u,0,u.length-pg),y=am(u,u.length-pg),h=new Uint8Array;if(p.length){let g=sv(Uh,p);d.update(g);let x=l.update(g);h=rv(Uh,x)}if(a){let g=am(rv(Uh,d.digest()),0,pg);for(let x=0;xthis.resolveReady=r),password:Gpe(t,n),strength:i-1,pending:new Uint8Array})},async transform(r,s){let a=this,{password:l,strength:d,resolveReady:u,ready:f}=a,p=new Uint8Array;l?(p=await Snt(a,d,l),u()):await f;let y=new Uint8Array(p.length+r.length-r.length%XV);y.set(p,0),s.enqueue(Zpe(a,r,y,p.length,0))},async flush(r){let{ctr:s,hmac:a,pending:l,ready:d}=this;if(a&&s){await d;let u=new Uint8Array;if(l.length){let f=s.update(sv(Uh,l));a.update(f),u=rv(Uh,f)}o.signature=rv(Uh,a.digest()).slice(0,pg),r.enqueue(sQ(u,o.signature))}}}),o=this}};function Zpe(e,t,n,i,o,r){let{ctr:s,hmac:a,pending:l}=e,d=t.length-o;l.length&&(t=sQ(l,t),n=Lnt(n,d-d%XV));let u;for(u=0;u<=d-XV;u+=XV){let f=sv(Uh,am(t,u,u+XV));r&&a.update(f);let p=s.update(f);r||a.update(p),n.set(rv(Uh,p),u+i)}return e.pending=am(t,u),n}async function Tnt(e,t,n,i){let o=await Rpe(e,t,n,am(i,0,ov[t])),r=am(i,ov[t]);if(o[0]!=r[0]||o[1]!=r[1])throw new Error(hg)}async function Snt(e,t,n){let i=LU(new Uint8Array(ov[t])),o=await Rpe(e,t,n,i);return sQ(i,o)}async function Rpe(e,t,n,i){e.password=null;let o=await Cnt(mnt,n,pnt,!1,bnt),r=await Vnt(Object.assign({salt:i},rQ),o,8*(iv[t]*2+2)),s=new Uint8Array(r),a=sv(Uh,am(s,0,iv[t])),l=sv(Uh,am(s,iv[t],iv[t]*2)),d=am(s,iv[t]*2);return Object.assign(e,{keys:{key:a,authentication:l,passwordVerification:d},ctr:new xnt(new gnt(a),Array.from(ynt)),hmac:new _nt(l)}),d}async function Cnt(e,t,n,i,o){if(Spe)try{return await av.importKey(e,t,n,i,o)}catch{return Spe=!1,fg.importKey(t)}else return fg.importKey(t)}async function Vnt(e,t,n){if(Cpe)try{return await av.deriveBits(e,t,n)}catch{return Cpe=!1,fg.pbkdf2(t,e.salt,rQ.iterations,n)}else return fg.pbkdf2(t,e.salt,rQ.iterations,n)}function Gpe(e,t){return t===Ei?EV(e):t}function sQ(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 Lnt(e,t){if(t&&t>e.length){let n=e;e=new Uint8Array(t),e.set(n,0)}return e}function am(e,t,n){return e.subarray(t,n)}function rv(e,t){return e.fromBits(t)}function sv(e,t){return e.toBits(t)}var Jxi=_(T(),1);var IV=12,EU=class extends TransformStream{constructor({password:t,passwordVerification:n,checkPasswordOnly:i}){super({start(){Object.assign(this,{password:t,passwordVerification:n}),Wpe(this,t)},transform(o,r){let s=this;if(s.password){let a=Epe(s,o.subarray(0,IV));if(s.password=null,a[IV-1]!=s.passwordVerification)throw new Error(hg);o=o.subarray(IV)}i?r.error(new Error(i0)):r.enqueue(Epe(s,o))}})}},XU=class extends TransformStream{constructor({password:t,passwordVerification:n}){super({start(){Object.assign(this,{password:t,passwordVerification:n}),Wpe(this,t)},transform(i,o){let r=this,s,a;if(r.password){r.password=null;let l=LU(new Uint8Array(IV));l[IV-1]=r.passwordVerification,s=new Uint8Array(i.length+l.length),s.set(Xpe(r,l),0),a=IV}else s=new Uint8Array(i.length),a=0;s.set(Xpe(r,i),a),o.enqueue(s)}})}};function Epe(e,t){let n=new Uint8Array(t.length);for(let i=0;i>>24]),o=~e.crcKey2.get(),e.keys=[n,i,o]}function wpe(e){let t=e.keys[2]|2;return Ppe(Math.imul(t,t^1)>>>8)}function Ppe(e){return e&255}function Ipe(e){return e&4294967295}var vpe="deflate-raw",IU=class extends TransformStream{constructor(t,{chunkSize:n,CompressionStream:i,CompressionStreamNative:o}){super({});let{compressed:r,encrypted:s,useCompressionStream:a,zipCrypto:l,signed:d,level:u}=t,f=this,p,y,h=Fpe(super.readable);(!s||l)&&d&&(p=new tv,h=Oh(h,p)),r&&(h=Mpe(h,a,{level:u,chunkSize:n},o,i)),s&&(l?h=Oh(h,new XU(t)):(y=new RU(t),h=Oh(h,y))),Ape(f,h,()=>{let g;s&&!l&&(g=y.signature),(!s||l)&&d&&(g=new DataView(p.value.buffer).getUint32(0)),f.signature=g})}},WU=class extends TransformStream{constructor(t,{chunkSize:n,DecompressionStream:i,DecompressionStreamNative:o}){super({});let{zipCrypto:r,encrypted:s,signed:a,signature:l,compressed:d,useCompressionStream:u}=t,f,p,y=Fpe(super.readable);s&&(r?y=Oh(y,new EU(t)):(p=new ZU(t),y=Oh(y,p))),d&&(y=Mpe(y,u,{chunkSize:n},o,i)),(!s||r)&&a&&(f=new tv,y=Oh(y,f)),Ape(this,y,()=>{if((!s||r)&&a){let h=new DataView(f.value.buffer);if(l!=h.getUint32(0,!1))throw new Error(VT)}})}};function Fpe(e){return Oh(e,new TransformStream({transform(t,n){t&&t.length&&n.enqueue(t)}}))}function Ape(e,t,n){t=Oh(t,new TransformStream({flush:n})),Object.defineProperty(e,"readable",{get(){return t}})}function Mpe(e,t,n,i,o){try{let r=t&&i?i:o;e=Oh(e,new r(vpe,n))}catch{if(t)try{e=Oh(e,new o(vpe,n))}catch{return e}else return e}return e}function Oh(e,t){return e.pipeThrough(t)}var Npe="message",kpe="start",Upe="pull",cQ="data",Ope="ack",lQ="close",vU="deflate",FU="inflate";var wU=class extends TransformStream{constructor(t,n){super({});let i=this,{codecType:o}=t,r;o.startsWith(vU)?r=IU:o.startsWith(FU)&&(r=WU);let s=0,a=0,l=new r(t,n),d=super.readable,u=new TransformStream({transform(p,y){p&&p.length&&(a+=p.length,y.enqueue(p))},flush(){Object.assign(i,{inputSize:a})}}),f=new TransformStream({transform(p,y){p&&p.length&&(s+=p.length,y.enqueue(p))},flush(){let{signature:p}=l;Object.assign(i,{signature:p,outputSize:s,inputSize:a})}});Object.defineProperty(i,"readable",{get(){return d.pipeThrough(u).pipeThrough(l).pipeThrough(f)}})}},PU=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 c_i=_(T(),1);var Ype=typeof Worker!=Dd;var WV=class{constructor(t,{readable:n,writable:i},{options:o,config:r,streamOptions:s,useWebWorkers:a,transferStreams:l,scripts:d},u){let{signal:f}=s;return Object.assign(t,{busy:!0,readable:n.pipeThrough(new PU(r.chunkSize)).pipeThrough(new uQ(n,s),{signal:f}),writable:i,options:Object.assign({},o),scripts:d,transferStreams:l,terminate(){return new Promise(p=>{let{worker:y,busy:h}=t;y?(h?t.resolveTerminated=p:(y.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&&Ype?Znt:Hpe)(t,r)}},uQ=class extends TransformStream{constructor(t,{onstart:n,onprogress:i,size:o,onend:r}){let s=0;super({async start(){n&&await dQ(n,o)},async transform(a,l){s+=a.length,i&&await dQ(i,s,o),l.enqueue(a)},async flush(){t.size=s,r&&await dQ(r,s)}})}};async function dQ(e,...t){try{await e(...t)}catch{}}function Hpe(e,t){return{run:()=>Rnt(e,t)}}function Znt(e,t){let{baseURL:n,chunkSize:i}=t;if(!e.interface){let o;try{o=Xnt(e.scripts[0],n,e)}catch{return Ype=!1,Hpe(e,t)}Object.assign(e,{worker:o,interface:{run:()=>Gnt(e,{chunkSize:i})}})}return e.interface}async function Rnt({options:e,readable:t,writable:n,onTaskFinished:i},o){try{let r=new wU(e,o);await t.pipeThrough(r).pipeTo(n,{preventClose:!0,preventAbort:!0});let{signature:s,inputSize:a,outputSize:l}=r;return{signature:s,inputSize:a,outputSize:l}}finally{i()}}async function Gnt(e,t){let n,i,o=new Promise((p,y)=>{n=p,i=y});Object.assign(e,{reader:null,writer:null,resolveResult:n,rejectResult:i,result:o});let{readable:r,options:s,scripts:a}=e,{writable:l,closed:d}=Ent(e.writable),u=AU({type:kpe,scripts:a.slice(1),options:s,config:t,readable:r,writable:l},e);u||Object.assign(e,{reader:r.getReader(),writer:l.getWriter()});let f=await o;return u||await l.getWriter().close(),await d,f}function Ent(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 Dpe=!0,Bpe=!0;function Xnt(e,t,n){let i={type:"module"},o,r;typeof e==t0&&(e=e());try{o=new URL(e,t)}catch{o=e}if(Dpe)try{r=new Worker(o)}catch{Dpe=!1,r=new Worker(o,i)}else r=new Worker(o,i);return r.addEventListener(Npe,s=>Int(s,n)),r}function AU(e,{worker:t,writer:n,onTaskFinished:i,transferStreams:o}){try{let{value:r,readable:s,writable:a}=e,l=[];if(r&&(r.byteLength!S.busy);if(x)return Kpe(x),new WV(x,e,t,g);if(LT.lengthmQ.push({resolve:S,stream:e,workerOptions:t}))}function g(x){if(mQ.length){let[{resolve:S,stream:V,workerOptions:Z}]=mQ.splice(0,1);S(new WV(x,V,Z,g))}else x.worker?(Kpe(x),Wnt(x,t)):LT=LT.filter(S=>S!=x)}}function Wnt(e,t){let{config:n}=t,{terminateWorkerTimeout:i}=n;Number.isFinite(i)&&i>=0&&(e.terminated?e.terminated=!1:e.terminateTimeout=setTimeout(async()=>{LT=LT.filter(o=>o!=e);try{await e.terminate()}catch{}},i))}function Kpe(e){let{terminateTimeout:t}=e;t&&(clearTimeout(t),e.terminateTimeout=null)}var y_i=_(T(),1);var wnt="Writer iterator completed too soon",Pnt="text/plain";var vnt="Content-Type";var Fnt=64*1024,pQ="writable",wV=class{constructor(){this.size=0}init(){this.initialized=!0}},NU=class extends wV{get readable(){let t=this,{chunkSize:n=Fnt}=t,i=new ReadableStream({start(){this.chunkOffset=0},async pull(o){let{offset:r=0,size:s,diskNumberStart:a}=i,{chunkOffset:l}=this;o.enqueue(await Ua(t,r+l,Math.min(n,s-l),a)),l+n>s?o.close():this.chunkOffset+=n}});return i}},fQ=class extends wV{constructor(){super();let t=this,n=new WritableStream({write(i){return t.writeUint8Array(i)}});Object.defineProperty(t,pQ,{get(){return n}})}writeUint8Array(){}};var kU=class extends fQ{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;i2?n.data+=btoa(o):n.pending=o}getData(){return this.data+btoa(this.pending)}},o0=class extends NU{constructor(t){super(),Object.assign(this,{blob:t,size:t.size})}async readUint8Array(t,n){let i=this,o=t+n,s=await(t||on&&(s=s.slice(t,o)),new Uint8Array(s)}},cv=class extends wV{constructor(t){super();let n=this,i=new TransformStream,o=[];t&&o.push([vnt,t]),Object.defineProperty(n,pQ,{get(){return i.writable}}),n.blob=new Response(i.readable,{headers:o}).blob()}getData(){return this.blob}},UU=class extends o0{constructor(t){super(new Blob([t],{type:Pnt}))}},OU=class extends cv{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 hQ=class extends NU{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 l=t;for(;l>=r[a].size;)l-=r[a].size,a++;let d=r[a],u=d.size;if(l+n<=u)s=await Ua(d,l,n);else{let f=u-l;s=new Uint8Array(n),s.set(await Ua(d,l,f)),s.set(await o.readUint8Array(t+f,n-f,i),f)}return o.lastDiskNumber=Math.max(a,o.lastDiskNumber),s}},DU=class extends wV{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:f}=i;if(s)u.length>=f?(await l(u.slice(0,f)),await d(),i.diskOffset+=o.size,i.diskNumber++,s=null,await this.write(u.slice(f))):await l(u);else{let{value:p,done:y}=await t.next();if(y&&!p)throw new Error(wnt);o=p,o.size=0,o.maxSize&&(i.maxSize=o.maxSize),i.availableSize=i.maxSize,await Bh(o),r=p.writable,s=r.getWriter(),await this.write(u)}},async close(){await s.ready,await d()}});Object.defineProperty(i,pQ,{get(){return a}});async function l(u){let f=u.length;f&&(await s.ready,await s.write(u),o.size+=f,i.size+=f,i.availableSize-=f)}async function d(){r.size=o.size,await s.close()}}};async function Bh(e,t){if(e.init&&!e.initialized)await e.init(t);else return Promise.resolve()}function BU(e){return Array.isArray(e)&&(e=new hQ(e)),e instanceof ReadableStream&&(e={readable:e}),e}function YU(e){e.writable===Ei&&typeof e.next==t0&&(e=new DU(e)),e instanceof WritableStream&&(e={writable:e});let{writable:t}=e;return t.size===Ei&&(t.size=0),e instanceof DU||Object.assign(e,{diskNumber:0,diskOffset:0,availableSize:1/0,maxSize:1/0}),e}function Ua(e,t,n,i){return e.readUint8Array(t,n,i)}var w_i=_(T(),1);var S_i=_(T(),1);var x_i=_(T(),1),Jpe="\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(""),Ant=Jpe.length==256;function Qpe(e){if(Ant){let t="";for(let n=0;nthis[n]=t[n])}};var XQ="File format is not recognized",Ont="End of central directory not found",Dnt="End of Zip64 central directory locator not found",Bnt="Central directory header not found",Ynt="Local file header not found",Hnt="Zip64 extra field not found",znt="File contains encrypted entry",Knt="Encryption method not supported",$pe="Compression method not supported",ebe="Split zip file",tbe="utf-8",nbe="cp437",Jnt=[[_Q,4294967295],[TQ,4294967295],[SQ,4294967295],[HU,65535]],Qnt={[65535]:{getValue:gs,bytes:4},[4294967295]:{getValue:JU,bytes:8}},nO=class{constructor(t,n={}){Object.assign(this,{reader:BU(t),options:n,config:ev()})}async*getEntriesGenerator(t={}){let n=this,{reader:i}=n,{config:o}=n;if(await Bh(i),(i.size===Ei||!i.readUint8Array)&&(i=new o0(await new Response(i.readable).blob()),await Bh(i)),i.size<22)throw new Error(XQ);i.chunkSize=VU(o);let r=await tit(i,101010256,i.size,22,65535*16);if(!r){let N=await Ua(i,0,4),b=Sa(N);throw gs(b)==134695760?new Error(ebe):new Error(Ont)}let s=Sa(r),a=gs(s,12),l=gs(s,16),d=r.offset,u=Ta(s,20),f=d+22+u,p=Ta(s,4),y=i.lastDiskNumber||0,h=Ta(s,6),g=Ta(s,8),x=0,S=0;if(l==4294967295||a==4294967295||g==65535||h==65535){let N=await Ua(i,r.offset-20,20),b=Sa(N);if(gs(b,0)==117853008){l=JU(b,8);let G=await Ua(i,l,56,-1),X=Sa(G),W=r.offset-20-56;if(gs(X,0)!=101075792&&l!=W){let A=l;l=W,x=l-A,G=await Ua(i,l,56,-1),X=Sa(G)}if(gs(X,0)!=101075792)throw new Error(Dnt);p==65535&&(p=gs(X,16)),h==65535&&(h=gs(X,20)),g==65535&&(g=JU(X,32)),a==4294967295&&(a=JU(X,40)),l-=a}}if(l>=i.size&&(x=i.size-l-a-22,l=i.size-a-22),y!=p)throw new Error(ebe);if(l<0)throw new Error(XQ);let V=0,Z=await Ua(i,l,a,h),R=Sa(Z);if(a){let N=r.offset-a;if(gs(R,V)!=33639248&&l!=N){let b=l;l=N,x+=l-b,Z=await Ua(i,l,a,h),R=Sa(Z)}}let E=r.offset-l-(i.lastDiskOffset||0);if(a!=E&&E>=0&&(a=E,Z=await Ua(i,l,a,h),R=Sa(Z)),l<0||l>=i.size)throw new Error(XQ);let I=dl(n,t,"filenameEncoding"),v=dl(n,t,"commentEncoding");for(let N=0;Nb.getData(Ze,Ve,De),V=U;let{onprogress:Ie}=t;if(Ie)try{await Ie(N+1,g,new bg(b))}catch{}yield Ve}let P=dl(n,t,"extractPrependedData"),F=dl(n,t,"extractAppendedData");return P&&(n.prependedData=S>0?await Ua(i,0,S):new Uint8Array),n.comment=u?await Ua(i,d+22,u):new Uint8Array,F&&(n.appendedData=f>>8&255:p>>>24&255),signature:p,compressed:d!=0&&!E,encrypted:o.encrypted&&!E,useWebWorkers:dl(o,i,"useWebWorkers"),useCompressionStream:dl(o,i,"useCompressionStream"),transferStreams:dl(o,i,"transferStreams"),checkPasswordOnly:G},config:u,streamOptions:{signal:b,size:F,onstart:W,onprogress:A,onend:k}},O=0;try{({outputSize:O}=await MU({readable:N,writable:X},B))}catch(H){if(!G||H.message!=i0)throw H}finally{let H=dl(o,i,"preventClose");X.size+=O,!H&&!X.locked&&await X.getWriter().close()}return G?Ei:t.getData?t.getData():X}};function obe(e,t,n){let i=e.rawBitFlag=Ta(t,n+2),o=(i&1)==1,r=gs(t,n+6);Object.assign(e,{encrypted:o,version:Ta(t,n),bitFlag:{level:(i&6)>>1,dataDescriptor:(i&8)==8,languageEncodingFlag:(i&2048)==2048},rawLastModDate:r,lastModDate:nit(r),filenameLength:Ta(t,n+22),extraFieldLength:Ta(t,n+24)})}function rbe(e,t,n,i,o){let{rawExtraField:r}=t,s=t.extraField=new Map,a=Sa(new Uint8Array(r)),l=0;try{for(;lt[o]==r);for(let o=0,r=0;o=5&&(r.push(PV),s.push(zU));let a=1;r.forEach((l,d)=>{if(e.data.length>=a+4){let u=gs(i,a);t[l]=e[l]=new Date(u*1e3);let f=s[d];e[f]=u}a+=4})}async function tit(e,t,n,i,o){let r=new Uint8Array(4),s=Sa(r);iit(s,0,t);let a=i+o;return await l(i)||await l(Math.min(a,n));async function l(d){let u=n-d,f=await Ua(e,u,d);for(let p=f.length-i;p>=0;p--)if(f[p]==r[0]&&f[p+1]==r[1]&&f[p+2]==r[2]&&f[p+3]==r[3])return{offset:u+p,buffer:f.slice(p,p+i).buffer}}}function dl(e,t,n){return t[n]===Ei?e.options[n]:t[n]}function nit(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 IQ(e){return new Date(Number(e/BigInt(1e4)-BigInt(116444736e5)))}function vV(e,t){return e.getUint8(t)}function Ta(e,t){return e.getUint16(t,!0)}function gs(e,t){return e.getUint32(t,!0)}function JU(e,t){return Number(e.getBigUint64(t,!0))}function iit(e,t,n){e.setUint32(t,n,!0)}function Sa(e){return new DataView(e.buffer)}var U_i=_(T(),1);var ait="File already exists",cit="Zip file comment exceeds 64KB",lit="File entry comment exceeds 64KB",dit="File entry name exceeds 64KB",cbe="Version exceeds 65535",uit="The strength must equal 1, 2, or 3",mit="Extra field type exceeds 65535",fit="Extra field data exceeds 64KB",HQ="Zip64 is not supported (make sure 'keepOrder' is set to 'true')",hit="Undefined uncompressed size",lbe=new Uint8Array([7,0,2,0,65,69,3,0,0]),BQ=0,dbe=[],rO=class{constructor(t,n={}){t=YU(t);let i=t.availableSize!==Ei&&t.availableSize>0&&t.availableSize!==1/0&&t.maxSize!==Ei&&t.maxSize>0&&t.maxSize!==1/0;Object.assign(this,{writer:t,addSplitZipSignature:i,options:n,config:ev(),files:new Map,filenames:new Set,offset:n.offset===Ei?t.writable.size:n.offset,pendingEntriesSize:0,pendingAddFileCalls:new Set,bufferedWrites:0})}async add(t="",n,i={}){let o=this,{pendingAddFileCalls:r,config:s}=o;BQdbe.push(l));let a;try{if(t=t.trim(),o.filenames.has(t))throw new Error(ait);return o.filenames.add(t),a=pit(o,t,n,i),r.add(a),await a}catch(l){throw o.filenames.delete(t),l}finally{r.delete(a);let l=dbe.shift();l?l():BQ--}}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 Vit(this,t,n),ho(i,n,"preventClose")||await s.getWriter().close(),r.getData?r.getData():s}};async function pit(e,t,n,i){t=t.trim(),i.directory&&!t.endsWith(RV)?t+=RV:i.directory=t.endsWith(RV);let o=ho(e,i,"encodeText",EV),r=o(t);if(r===Ei&&(r=EV(t)),ji(r)>65535)throw new Error(dit);let s=i.comment||"",a=o(s);if(a===Ei&&(a=EV(s)),ji(a)>65535)throw new Error(lit);let l=ho(e,i,RQ,20);if(l>65535)throw new Error(cbe);let d=ho(e,i,GQ,20);if(d>65535)throw new Error(cbe);let u=ho(e,i,PV,new Date),f=ho(e,i,dv),p=ho(e,i,uv),y=ho(e,i,LQ,!0),h=ho(e,i,CQ,0),g=ho(e,i,VQ,0),x=ho(e,i,"passThrough"),S,V;x||(S=ho(e,i,"password"),V=ho(e,i,"rawPassword"));let Z=ho(e,i,"encryptionStrength",3),R=ho(e,i,EQ),E=ho(e,i,"extendedTimestamp",!0),I=ho(e,i,"keepOrder",!0),v=ho(e,i,"level"),P=ho(e,i,"useWebWorkers"),F=ho(e,i,"bufferedWrite"),N=ho(e,i,"dataDescriptorSignature",!1),b=ho(e,i,"signal"),G=ho(e,i,"useUnicodeFileNames",!0),X=ho(e,i,"useCompressionStream"),W=ho(e,i,"compressionMethod"),A=ho(e,i,"dataDescriptor",!0),k=ho(e,i,KU);if(!R&&(S!==Ei||V!==Ei)&&!(Z>=1&&Z<=3))throw new Error(uit);let B=new Uint8Array,{extraField:O}=i;if(O){let Xt=0,Ht=0;O.forEach(qe=>Xt+=4+ji(qe)),B=new Uint8Array(Xt),O.forEach((qe,mn)=>{if(mn>65535)throw new Error(mit);if(ji(qe)>65535)throw new Error(fit);Xs(B,new Uint16Array([mn]),Ht),Xs(B,new Uint16Array([ji(qe)]),Ht+2),Xs(B,qe,Ht+4),Ht+=4+ji(qe)})}let H=0,U=0,K=0;if(x&&({uncompressedSize:K}=i,K===Ei))throw new Error(hit);let Q=k===!0;n&&(n=BU(n),await Bh(n),x?H=ube(K):n.size===Ei?(A=!0,(k||k===Ei)&&(k=!0,K=H=4294967296)):(K=n.size,H=ube(K)));let{diskOffset:ie,diskNumber:j,maxSize:$}=e.writer,ne=Q||K>4294967295,be=Q||H>4294967295,Ce=Q||e.offset+e.pendingEntriesSize-ie>4294967295,_e=ho(e,i,"supportZip64SplitFile",!0)&&Q||j+Math.ceil(e.pendingEntriesSize/$)>65535;if(Ce||ne||be||_e){if(k===!1||!I)throw new Error(HQ);k=!0}k=k||!1;let Ve=ho(e,i,ZQ),{signature:Ie}=i;i=Object.assign({},i,{rawFilename:r,rawComment:a,version:l,versionMadeBy:d,lastModDate:u,lastAccessDate:f,creationDate:p,rawExtraField:B,zip64:k,zip64UncompressedSize:ne,zip64CompressedSize:be,zip64Offset:Ce,zip64DiskNumberStart:_e,password:S,rawPassword:V,level:!X&&e.config.CompressionStream===Ei&&e.config.CompressionStreamNative===Ei?0:v,useWebWorkers:P,encryptionStrength:Z,extendedTimestamp:E,zipCrypto:R,bufferedWrite:F,keepOrder:I,useUnicodeFileNames:G,dataDescriptor:A,dataDescriptorSignature:N,signal:b,msDosCompatible:y,internalFileAttribute:h,externalFileAttribute:g,useCompressionStream:X,passThrough:x,encrypted:!!(S&&ji(S)||V&&ji(V))||x&&Ve,signature:Ie,compressionMethod:W});let Ze=git(i),De=_it(i),Ke=ji(Ze.localHeaderArray,De.dataDescriptorArray);U=Ke+H,e.options.usdz&&(U+=U+64),e.pendingEntriesSize+=U;let rt;try{rt=await bit(e,t,n,{headerInfo:Ze,dataDescriptorInfo:De,metadataSize:Ke},i)}finally{e.pendingEntriesSize-=U}return Object.assign(rt,{name:t,comment:s,extraField:O}),new bg(rt)}async function bit(e,t,n,i,o){let{files:r,writer:s}=e,{keepOrder:a,dataDescriptor:l,signal:d}=o,{headerInfo:u}=i,{usdz:f}=e.options,p=Array.from(r.values()).pop(),y={},h,g,x,S,V,Z,R;r.set(t,y);try{let P;a&&(P=p&&p.lock,E()),(o.bufferedWrite||e.writerLocked||e.bufferedWrites&&a||!l)&&!f?(Z=new TransformStream,R=new Response(Z.readable).blob(),Z.writable.size=0,h=!0,e.bufferedWrites++,await Bh(s)):(Z=s,await I()),await Bh(Z);let{writable:F}=s,{diskOffset:N}=s;if(e.addSplitZipSignature){delete e.addSplitZipSignature;let G=new Uint8Array(4),X=Oa(G);Qi(X,0,134695760),await Yh(F,G),e.offset+=4}f&&xit(i,e.offset-N),h||(await P,await v(F));let{diskNumber:b}=s;if(V=!0,y.diskNumberStart=b,y=await yit(n,Z,y,i,e.config,o),V=!1,r.set(t,y),y.filename=t,h){await Z.writable.getWriter().close();let G=await R;await P,await I(),S=!0,l||(G=await Sit(y,G,F,o)),await v(F),y.diskNumberStart=s.diskNumber,N=s.diskOffset,await G.stream().pipeTo(F,{preventClose:!0,preventAbort:!0,signal:d}),F.size+=G.size,S=!1}if(y.offset=e.offset-N,y.zip64)Cit(y,o);else if(y.offset>4294967295)throw new Error(HQ);return e.offset+=y.size,y}catch(P){if(h&&S||!h&&V){if(e.hasCorruptedEntries=!0,P)try{P.corruptedEntry=!0}catch{}h?e.offset+=Z.writable.size:e.offset=Z.writable.size}throw r.delete(t),P}finally{h&&e.bufferedWrites--,x&&x(),g&&g()}function E(){y.lock=new Promise(P=>x=P)}async function I(){e.writerLocked=!0;let{lockWriter:P}=e;e.lockWriter=new Promise(F=>g=()=>{e.writerLocked=!1,F()}),await P}async function v(P){ji(u.localHeaderArray)>s.availableSize&&(s.availableSize=0,await Yh(P,new Uint8Array))}}async function yit(e,t,{diskNumberStart:n,lock:i},o,r,s){let{headerInfo:a,dataDescriptorInfo:l,metadataSize:d}=o,{localHeaderArray:u,headerArray:f,lastModDate:p,rawLastModDate:y,encrypted:h,compressed:g,version:x,compressionMethod:S,rawExtraFieldExtendedTimestamp:V,extraFieldExtendedTimestampFlag:Z,rawExtraFieldNTFS:R,rawExtraFieldAES:E}=a,{dataDescriptorArray:I}=l,{rawFilename:v,lastAccessDate:P,creationDate:F,password:N,rawPassword:b,level:G,zip64:X,zip64UncompressedSize:W,zip64CompressedSize:A,zip64Offset:k,zip64DiskNumberStart:B,zipCrypto:O,dataDescriptor:H,directory:U,versionMadeBy:K,rawComment:Q,rawExtraField:ie,useWebWorkers:j,onstart:$,onprogress:ne,onend:be,signal:Ce,encryptionStrength:me,extendedTimestamp:_e,msDosCompatible:Ve,internalFileAttribute:Ie,externalFileAttribute:Ze,useCompressionStream:De,passThrough:Ke}=s,rt={lock:i,versionMadeBy:K,zip64:X,directory:!!U,filenameUTF8:!0,rawFilename:v,commentUTF8:!0,rawComment:Q,rawExtraFieldExtendedTimestamp:V,rawExtraFieldNTFS:R,rawExtraFieldAES:E,rawExtraField:ie,extendedTimestamp:_e,msDosCompatible:Ve,internalFileAttribute:Ie,externalFileAttribute:Ze,diskNumberStart:n},{signature:Xt,uncompressedSize:Ht}=s,qe=0;Ke||(Ht=0);let{writable:mn}=t;if(e){e.chunkSize=VU(r),await Yh(mn,u);let Lt=e.readable,Vi=Lt.size=e.size,ln={options:{codecType:vU,level:G,rawPassword:b,password:N,encryptionStrength:me,zipCrypto:h&&O,passwordVerification:h&&O&&y>>8&255,signed:!Ke,compressed:g&&!Ke,encrypted:h&&!Ke,useWebWorkers:j,useCompressionStream:De,transferStreams:!1},config:r,streamOptions:{signal:Ce,size:Vi,onstart:$,onprogress:ne,onend:be}},ge=await MU({readable:Lt,writable:mn},ln);qe=ge.outputSize,Ke||(Ht=ge.inputSize,Xt=ge.signature),mn.size+=Ht}else await Yh(mn,u);let Dt;if(X){let Lt=4;W&&(Lt+=8),A&&(Lt+=8),k&&(Lt+=8),B&&(Lt+=4),Dt=new Uint8Array(Lt)}else Dt=new Uint8Array;return Tit({signature:Xt,rawExtraFieldZip64:Dt,compressedSize:qe,uncompressedSize:Ht,headerInfo:a,dataDescriptorInfo:l},s),H&&await Yh(mn,I),Object.assign(rt,{uncompressedSize:Ht,compressedSize:qe,lastModDate:p,rawLastModDate:y,creationDate:F,lastAccessDate:P,encrypted:h,zipCrypto:O,size:d+qe,compressionMethod:S,version:x,headerArray:f,signature:Xt,rawExtraFieldZip64:Dt,extraFieldExtendedTimestampFlag:Z,zip64UncompressedSize:W,zip64CompressedSize:A,zip64Offset:k,zip64DiskNumberStart:B}),rt}function git(e){let{rawFilename:t,lastModDate:n,lastAccessDate:i,creationDate:o,level:r,zip64:s,zipCrypto:a,useUnicodeFileNames:l,dataDescriptor:d,directory:u,rawExtraField:f,encryptionStrength:p,extendedTimestamp:y,encrypted:h}=e,{version:g,compressionMethod:x}=e,S=!u&&(r>0||r===Ei&&x!==0),V;if(h&&!a){V=new Uint8Array(ji(lbe)+2);let k=Oa(V);io(k,0,39169),Xs(V,lbe,2),sO(k,8,p)}else V=new Uint8Array;let Z,R,E;if(y){R=new Uint8Array(9+(i?4:0)+(o?4:0));let k=Oa(R);io(k,0,21589),io(k,2,ji(R)-4),E=1+(i?2:0)+(o?4:0),sO(k,4,E);let B=5;Qi(k,B,Math.floor(n.getTime()/1e3)),B+=4,i&&(Qi(k,B,Math.floor(i.getTime()/1e3)),B+=4),o&&Qi(k,B,Math.floor(o.getTime()/1e3));try{Z=new Uint8Array(36);let O=Oa(Z),H=YQ(n);io(O,0,10),io(O,2,32),io(O,8,1),io(O,10,24),Kl(O,12,H),Kl(O,20,YQ(i)||H),Kl(O,28,YQ(o)||H)}catch{Z=new Uint8Array}}else Z=R=new Uint8Array;let I=0;l&&(I=I|2048),d&&(I=I|8),x===Ei&&(x=S?8:0),x==8&&(r>=1&&r<3&&(I=I|6),r>=3&&r<5&&(I=I|1),r===9&&(I=I|2)),s&&(g=g>45?g:45),h&&(I=I|1,a||(g=g>51?g:51,V[9]=x,x=99));let v=new Uint8Array(26),P=Oa(v);io(P,0,g),io(P,2,I),io(P,4,x);let F=new Uint32Array(1),N=Oa(F),b;ntQ?b=tQ:b=n,io(N,0,(b.getHours()<<6|b.getMinutes())<<5|b.getSeconds()/2),io(N,2,(b.getFullYear()-1980<<4|b.getMonth()+1)<<5|b.getDate());let G=F[0];Qi(P,6,G),io(P,22,ji(t));let X=ji(V,R,Z,f);io(P,24,X);let W=new Uint8Array(30+ji(t)+X),A=Oa(W);return Qi(A,0,67324752),Xs(W,v,4),Xs(W,t,30),Xs(W,V,30+ji(t)),Xs(W,R,30+ji(t,V)),Xs(W,Z,30+ji(t,V,R)),Xs(W,f,30+ji(t,V,R,Z)),{localHeaderArray:W,headerArray:v,headerView:P,lastModDate:n,rawLastModDate:G,encrypted:h,compressed:S,version:g,compressionMethod:x,extraFieldExtendedTimestampFlag:E,rawExtraFieldExtendedTimestamp:R,rawExtraFieldNTFS:Z,rawExtraFieldAES:V,extraFieldLength:X}}function xit(e,t){let{headerInfo:n}=e,{localHeaderArray:i,extraFieldLength:o}=n,r=Oa(i),s=64-(t+ji(i))%64;s<4&&(s+=64);let a=new Uint8Array(s),l=Oa(a);io(l,0,6534),io(l,2,s-2);let d=i;n.localHeaderArray=i=new Uint8Array(ji(d)+s),Xs(i,d),Xs(i,a,ji(d)),r=Oa(i),io(r,28,o+s),e.metadataSize+=s}function _it(e){let{zip64:t,dataDescriptor:n,dataDescriptorSignature:i}=e,o=new Uint8Array,r,s=0;return n&&(o=new Uint8Array(t?i?24:20:i?16:12),r=Oa(o),i&&(s=4,Qi(r,0,134695760))),{dataDescriptorArray:o,dataDescriptorView:r,dataDescriptorOffset:s}}function Tit(e,t){let{signature:n,rawExtraFieldZip64:i,compressedSize:o,uncompressedSize:r,headerInfo:s,dataDescriptorInfo:a}=e,{headerView:l,encrypted:d}=s,{dataDescriptorView:u,dataDescriptorOffset:f}=a,{zip64:p,zip64UncompressedSize:y,zip64CompressedSize:h,zipCrypto:g,dataDescriptor:x}=t;if((!d||g)&&n!==Ei&&(Qi(l,10,n),x&&Qi(u,f,n)),p){let S=Oa(i);io(S,0,1),io(S,2,ji(i)-4);let V=4;y&&(Qi(l,18,4294967295),Kl(S,V,BigInt(r)),V+=8),h&&(Qi(l,14,4294967295),Kl(S,V,BigInt(o))),x&&(Kl(u,f+4,BigInt(o)),Kl(u,f+12,BigInt(r)))}else Qi(l,14,o),Qi(l,18,r),x&&(Qi(u,f+4,o),Qi(u,f+8,r))}async function Sit(e,t,n,{zipCrypto:i}){let o;o=await t.slice(0,26).arrayBuffer(),o.byteLength!=26&&(o=o.slice(0,26));let r=new DataView(o);return(!e.encrypted||i)&&Qi(r,14,e.signature),e.zip64?(Qi(r,18,4294967295),Qi(r,22,4294967295)):(Qi(r,18,e.compressedSize),Qi(r,22,e.uncompressedSize)),await Yh(n,new Uint8Array(o)),t.slice(o.byteLength)}function Cit(e,t){let{rawExtraFieldZip64:n,offset:i,diskNumberStart:o}=e,{zip64UncompressedSize:r,zip64CompressedSize:s,zip64Offset:a,zip64DiskNumberStart:l}=t,d=Oa(n),u=4;r&&(u+=8),s&&(u+=8),a&&(Kl(d,u,BigInt(i)),u+=8),l&&Qi(d,u,o)}async function Vit(e,t,n){let{files:i,writer:o}=e,{diskOffset:r,writable:s}=o,{diskNumber:a}=o,l=0,d=0,u=e.offset-r,f=i.size;for(let[,E]of i){let{rawFilename:I,rawExtraFieldZip64:v,rawExtraFieldAES:P,rawComment:F,rawExtraFieldNTFS:N,rawExtraField:b,extendedTimestamp:G,extraFieldExtendedTimestampFlag:X,lastModDate:W}=E,A;if(G){A=new Uint8Array(9);let k=Oa(A);io(k,0,21589),io(k,2,5),sO(k,4,X),Qi(k,5,Math.floor(W.getTime()/1e3))}else A=new Uint8Array;E.rawExtraFieldCDExtendedTimestamp=A,d+=46+ji(I,F,v,P,N,A,b)}let p=new Uint8Array(d),y=Oa(p);await Bh(o);let h=0;for(let[E,I]of Array.from(i.values()).entries()){let{offset:v,rawFilename:P,rawExtraFieldZip64:F,rawExtraFieldAES:N,rawExtraFieldCDExtendedTimestamp:b,rawExtraFieldNTFS:G,rawExtraField:X,rawComment:W,versionMadeBy:A,headerArray:k,directory:B,zip64:O,zip64UncompressedSize:H,zip64CompressedSize:U,zip64DiskNumberStart:K,zip64Offset:Q,msDosCompatible:ie,internalFileAttribute:j,externalFileAttribute:$,diskNumberStart:ne,uncompressedSize:be,compressedSize:Ce}=I,me=ji(F,N,b,G,X);Qi(y,l,33639248),io(y,l+4,A);let _e=Oa(k);H||Qi(_e,18,be),U||Qi(_e,14,Ce),Xs(p,k,l+6),io(y,l+30,me),io(y,l+32,ji(W)),io(y,l+34,O&&K?65535:ne),io(y,l+36,j),$?Qi(y,l+38,$):B&&ie&&sO(y,l+38,16),Qi(y,l+42,O&&Q?4294967295:v),Xs(p,P,l+46),Xs(p,F,l+46+ji(P)),Xs(p,N,l+46+ji(P,F)),Xs(p,b,l+46+ji(P,F,N)),Xs(p,G,l+46+ji(P,F,N,b)),Xs(p,X,l+46+ji(P,F,N,b,G)),Xs(p,W,l+46+ji(P)+me);let Ve=46+ji(P,W)+me;if(l-h>o.availableSize&&(o.availableSize=0,await Yh(s,p.slice(h,l)),h=l),l+=Ve,n.onprogress)try{await n.onprogress(E+1,i.size,new bg(I))}catch{}}await Yh(s,h?p.slice(h):p);let g=o.diskNumber,{availableSize:x}=o;x<22&&g++;let S=ho(e,n,KU);if(u>4294967295||d>4294967295||f>65535||g>65535){if(S===!1)throw new Error(HQ);S=!0}let V=new Uint8Array(S?98:22),Z=Oa(V);l=0,S&&(Qi(Z,0,101075792),Kl(Z,4,BigInt(44)),io(Z,12,45),io(Z,14,45),Qi(Z,16,g),Qi(Z,20,a),Kl(Z,24,BigInt(f)),Kl(Z,32,BigInt(f)),Kl(Z,40,BigInt(d)),Kl(Z,48,BigInt(u)),Qi(Z,56,117853008),Kl(Z,64,BigInt(u)+BigInt(d)),Qi(Z,72,g+1),ho(e,n,"supportZip64SplitFile",!0)&&(g=65535,a=65535),f=65535,u=4294967295,d=4294967295,l+=76),Qi(Z,l,101010256),io(Z,l+4,g),io(Z,l+6,a),io(Z,l+8,f),io(Z,l+10,f),Qi(Z,l+12,d),Qi(Z,l+16,u);let R=ji(t);if(R)if(R<=65535)io(Z,l+20,R);else throw new Error(cit);await Yh(s,V),R&&await Yh(s,t)}async function Yh(e,t){let n=e.getWriter();try{await n.ready,e.size+=ji(t),await n.write(t)}finally{n.releaseLock()}}function YQ(e){if(e)return(BigInt(e.getTime())+BigInt(116444736e5))*BigInt(1e4)}function ho(e,t,n,i){let o=t[n]===Ei?e.options[n]:t[n];return o===Ei?i:o}function ube(e){return e+5*(Math.floor(e/16383)+1)}function sO(e,t,n){e.setUint8(t,n)}function io(e,t,n){e.setUint16(t,n,!0)}function Qi(e,t,n){e.setUint32(t,n,!0)}function Kl(e,t,n){e.setBigUint64(t,n,!0)}function Xs(e,t,n){e.set(t,n)}function Oa(e){return new DataView(e.buffer)}function ji(...e){let t=0;return e.forEach(n=>n&&(t+=n.length)),t}GV({Deflate:Jhe,Inflate:ype});var zQ=32,Lit="http://www.opengis.net/kml/2.2",Wf="http://www.google.com/kml/ext/2.2",Zit="http://www.w3.org/2000/xmlns/";function aO(e){this._files={},this._promises=[],this._count=0,this._modelCallback=e}var Rit=/^data:image\/([^,;]+)/;aO.prototype.texture=function(e){let t=this,n;if(typeof e=="string"||e instanceof Ge){if(e=Ge.createIfNeeded(e),!e.isDataUri)return e.url;let i=e.url.match(Rit);n=`texture_${++this._count}`,c(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 Git(e,t){return function(n){e._files[t]=n}}aO.prototype.model=function(e,t){let n=this._modelCallback;if(!c(n))throw new le("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(Git(this,r))}return o};Object.defineProperties(aO.prototype,{promise:{get:function(){return Promise.all(this._promises)}},files:{get:function(){return this._files}}});function cO(e){this._time=e}cO.prototype.get=function(e,t,n){let i;return c(e)&&(i=c(e.getValue)?e.getValue(this._time,n):e),i??t};cO.prototype.getColor=function(e,t){let n=this.get(e,t);if(c(n))return RT(n)};cO.prototype.getMaterialType=function(e){if(c(e))return e.getType(this._time)};function KQ(){this._ids={},this._styles={},this._count=0}KQ.prototype.get=function(e){let t=this._ids,n=e.innerHTML;if(c(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};KQ.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 pbe(){this._ids={}}pbe.prototype.get=function(e){if(!c(e))return this.get(Hn());let t=this._ids;return c(t[e])?`${e.toString()}-${++t[e]}`:(t[e]=0,e)};function JQ(e){e=e??z.EMPTY_OBJECT;let t=e.entities,n=e.kmz??!1;if(!c(t))throw new L("entities is required.");let i=JQ._createState(e),o=t.values.filter(function(d){return!c(d.parent)}),r=i.kmlDoc,s=r.documentElement;s.setAttributeNS(Zit,"xmlns:gx",Wf);let a=r.createElement("Document");s.appendChild(a),ybe(i,a,o),i.styleCache.save(a);let l=i.externalFileHandler;return l.promise.then(function(){let u=new XMLSerializer().serializeToString(i.kmlDoc);return n?Eit(u,l.files):{kml:u,externalFiles:l.files}})}function Eit(e,t){let n=on("ThirdParty/Workers/z-worker-pako.js");GV({workerScripts:{deflate:[n,"./pako_deflate.min.js"],inflate:[n,"./pako_inflate.min.js"]}});let i=new cv,o=new rO(i);return o.add("doc.kml",new UU(e)).then(function(){let r=Object.keys(t);return bbe(o,r,t,0)}).then(function(){return o.close()}).then(function(r){return{kmz:r}})}function bbe(e,t,n,i){if(t.length===i)return;let o=t[i];return e.add(o,new o0(n[o])).then(function(){return bbe(e,t,n,i+1)})}JQ._createState=function(e){let t=e.entities,n=new KQ,i=t.computeAvailability(),o=c(e.time)?e.time:i.start,r=e.defaultAvailability??i,s=e.sampleDuration??60;r.start===Ye.MINIMUM_VALUE?r.stop===Ye.MAXIMUM_VALUE?r=new Zn:ee.addSeconds(r.stop,-10*s,r.start):r.stop===Ye.MAXIMUM_VALUE&&ee.addSeconds(r.start,10*s,r.stop);let a=new aO(e.modelCallback);return{kmlDoc:document.implementation.createDocument(Lit,"kml"),ellipsoid:e.ellipsoid??re.default,idManager:new pbe,styleCache:n,externalFileHandler:a,time:o,valueGetter:new cO(o),sampleDuration:s,defaultAvailability:new Yr([r])}};function ybe(e,t,n){let i=e.kmlDoc,o=e.styleCache,r=e.valueGetter,s=e.idManager,a=n.length,l,d,u;for(let f=0;f0){let S=i.createElement("Placemark");S.setAttribute("id",s.get(p.id));let V=p.name,Z=p.label;if(c(Z)){let E=i.createElement("LabelStyle"),I=r.get(Z.text);V=c(I)&&I.length>0?I:V;let v=r.getColor(Z.fillColor);c(v)&&(E.appendChild(hn(i,"color",v)),E.appendChild(hn(i,"colorMode","normal")));let P=r.get(Z.scale);c(P)&&E.appendChild(hn(i,"scale",P)),u.push(E)}S.appendChild(hn(i,"name",V)),S.appendChild(hn(i,"visibility",p.show)),S.appendChild(hn(i,"description",p.description)),c(y)&&S.appendChild(y),t.appendChild(S);let R=u.length;if(R>0){let E=i.createElement("Style");for(let I=0;I1){let E=i.createElement("MultiGeometry");for(let I=0;I0){let S=i.createElement("Folder");S.setAttribute("id",s.get(p.id)),S.appendChild(hn(i,"name",p.name)),S.appendChild(hn(i,"visibility",p.show)),S.appendChild(hn(i,"description",p.description)),t.appendChild(S),ybe(e,S,x)}}}var Jl=new m,ul=new pe,If=new ee;function Xit(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=e.valueGetter,a=t.billboard??t.point;if(!c(a)&&!c(t.path))return;let l=t.position;if(!l.isConstant){gbe(e,t,a,n,i);return}s.get(l,void 0,Jl);let d=hn(o,"coordinates",ZT(Jl,r)),u=o.createElement("Point"),f=o.createElement("altitudeMode");f.appendChild(GT(e,a.heightReference)),u.appendChild(f),u.appendChild(d),n.push(u);let p=a instanceof cc?_be(e,a):xbe(e,a);i.push(p)}function gbe(e,t,n,i,o){let r=e.kmlDoc,s=e.ellipsoid,a=e.valueGetter,l,d=t.position,u=!0;d instanceof ya?(l=d.intervals,u=!1):l=t.availability??e.defaultAvailability;let f=n instanceof Up,p,y,h,g=[];for(p=0;p1){let S=r.createElementNS(Wf,"MultiTrack");for(p=0;p0&&(r=n);let s=t.coordinates,a=o.get(s),l=[],d=[de.northeast,de.southeast,de.southwest,de.northwest];for(let y=0;y<4;++y)d[y](a,ul),l.push(`${w.toDegrees(ul.longitude)},${w.toDegrees(ul.latitude)},${r}`);let u=hn(i,"coordinates",l.join(" ")),f=i.createElement("outerBoundaryIs"),p=i.createElement("LinearRing");return p.appendChild(u),f.appendChild(p),[f]}function fbe(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=[],a=t.length;for(let u=0;u0&&(r=n);let a=[],l=t.hierarchy,d=o.get(l),u=Array.isArray(d)?d:d.positions,f=i.createElement("outerBoundaryIs");f.appendChild(fbe(e,u,r,s)),a.push(f);let p=d.holes;if(c(p)){let y=p.length;for(let h=0;h0&&l.appendChild(hn(r,"extrude",!0));let u=a?Wit(e,t,d):wit(e,t,d),f=u.length;for(let x=0;x=0;--i)t+=n[i]<16?`0${n[i].toString(16)}`:n[i].toString(16);return t}var jQ=JQ;var lCi=_(T(),1);var ATi=_(T(),1);function pv(){this._cache={}}pv.prototype.fromColor=function(e,t){if(!c(e))throw new L("color is required");if(!c(t))throw new L("size is required");return lO(void 0,void 0,e,t,this._cache)};pv.prototype.fromUrl=function(e,t,n){if(!c(e))throw new L("url is required");if(!c(t))throw new L("color is required");if(!c(n))throw new L("size is required");return lO(e,void 0,t,n,this._cache)};pv.prototype.fromMakiIconId=function(e,t,n){if(!c(e))throw new L("id is required");if(!c(t))throw new L("color is required");if(!c(n))throw new L("size is required");return lO(on(`Assets/Textures/maki/${encodeURIComponent(e)}.png`),void 0,t,n,this._cache)};pv.prototype.fromText=function(e,t,n){if(!c(e))throw new L("text is required");if(!c(t))throw new L("color is required");if(!c(n))throw new L("size is required");return lO(void 0,e,t,n,this._cache)};var Fit=new Y;function Ait(e,t,n){e.save(),e.scale(n/24,n/24),e.fillStyle=t.toCssColorString(),e.strokeStyle=t.brighten(.6,Fit).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 Sbe(e,t,n){let i=n/2.5,o=i,r=i;t.width>t.height?r=i*(t.height/t.width):t.width${i}${Rbe(o)}`:n+=`${i}${o}`)}return n.length>0&&(n=`${n}
`),n}function Bit(e,t,n){let i;return function(o,r){return c(i)||(i=e(t,n)),i}}function Yit(e,t){return new Om(Bit(Rbe,e,t),!0)}function mO(e,t,n){let i=e.id;if(!c(i)||e.type!=="Feature")i=Hn();else{let s=2,a=i;for(;c(t.getById(a));)a=`${i}_${s}`,s++;i=a}let o=t.getOrCreateEntity(i),r=e.properties;if(c(r)){o.properties=r;let s,a=r.title;if(c(a))o.name=a,s="title";else{let d=Number.MAX_VALUE;for(let u in r)if(r.hasOwnProperty(u)&&r[u]){let f=u.toLowerCase();if(d>1&&f==="title"){d=1,s=u;break}else d>2&&f==="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)}c(s)&&(o.name=r[s])}let l=r.description;l!==null&&(o.description=c(l)?new Qn(l):n(r,s))}return o}function lj(e,t){let n=new Array(e.length);for(let i=0;i2?d.perPositionHeight=new Qn(!0):o.clampToGround||(d.height=0);let p=mO(t,e._entityCollection,o.describe);p.polygon=d}function Nbe(e,t,n,i,o){Mbe(e,t,i,n.coordinates,o)}function kbe(e,t,n,i,o){let r=n.coordinates;for(let s=0;st&&(n==null?(n="…",i=3):i=n.length,e=e.substring(0,t-i)+n),e}function Ko(e,t){for(var n=e.length-1;n>=0;n--)e[n]===t&&e.splice(n,1)}function xg(e,t){for(var n=e.length-1;n>=0;n--)t(e[n])===!0&&e.splice(n,1)}function Hh(e){throw new Error("Unhandled case for value: '".concat(e,"'"))}var vCi=_(T());var SCi=_(T());var xCi=_(T()),_g=/[A-Za-z]/,Qs=/[\d]/;var Yd=/\s/,fO=/['"]/,Hbe=/[\x00-\x1F\x7F]/,zbe=/A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source,Qit=/\u2700-\u27bf\udde6-\uddff\ud800-\udbff\udc00-\udfff\ufe0e\ufe0f\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0\ud83c\udffb-\udfff\u200d\u3299\u3297\u303d\u3030\u24c2\ud83c\udd70-\udd71\udd7e-\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01-\ude02\ude1a\ude2f\ude32-\ude3a\ude50-\ude51\u203c\u2049\u25aa-\u25ab\u25b6\u25c0\u25fb-\u25fe\u00a9\u00ae\u2122\u2139\udc04\u2600-\u26FF\u2b05\u2b06\u2b07\u2b1b\u2b1c\u2b50\u2b55\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\udccf\u2935\u2934\u2190-\u21ff/.source,jit=/\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F/.source,qit=zbe+Qit+jit,Kbe=/0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19/.source,yCi=new RegExp("[".concat(zbe+Kbe,"]")),dj=qit+Kbe,wf=new RegExp("[".concat(dj,"]"));var hO=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||(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(Yd):[],o=t.split(Yd),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(Yd):[],o=t.split(Yd),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(),""].join("")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var t=this.getAttrs(),n=[];for(var i in t)t.hasOwnProperty(i)&&n.push(i+'="'+t[i]+'"');return n.join(" ")},e}();var VCi=_(T());function Jbe(e,t,n){var i,o;n==null?(n="…",o=3,i=8):(o=n.length,i=n.length);var r=function(V){var Z={},R=V,E=R.match(/^([a-z]+):\/\//i);return E&&(Z.scheme=E[1],R=R.substr(E[0].length)),E=R.match(/^(.*?)(?=(\?|#|\/|$))/i),E&&(Z.host=E[1],R=R.substr(E[0].length)),E=R.match(/^\/(.*?)(?=(\?|#|$))/i),E&&(Z.path=E[1],R=R.substr(E[0].length)),E=R.match(/^\?(.*?)(?=(#|$))/i),E&&(Z.query=E[1],R=R.substr(E[0].length)),E=R.match(/^#(.*?)$/i),E&&(Z.fragment=E[1]),Z},s=function(V){var Z="";return V.scheme&&V.host&&(Z+=V.scheme+"://"),V.host&&(Z+=V.host),V.path&&(Z+="/"+V.path),V.query&&(Z+="?"+V.query),V.fragment&&(Z+="#"+V.fragment),Z},a=function(V,Z){var R=Z/2,E=Math.ceil(R),I=-1*Math.floor(R),v="";return I<0&&(v=V.substr(I)),V.substr(0,E)+n+v};if(e.length<=t)return e;var l=t-o,d=r(e);if(d.query){var u=d.query.match(/^(.*?)(?=(\?|\#))(.*?)$/i);u&&(d.query=d.query.substr(0,u[1].length),e=s(d))}if(e.length<=t||(d.host&&(d.host=d.host.replace(/^www\./,""),e=s(d)),e.length<=t))return e;var f="";if(d.host&&(f+=d.host),f.length>=l)return d.host.length==t?(d.host.substr(0,t-o)+n).substr(0,l+i):a(f,l).substr(0,l+i);var p="";if(d.path&&(p+="/"+d.path),d.query&&(p+="?"+d.query),p)if((f+p).length>=l){if((f+p).length==t)return(f+p).substr(0,t);var y=l-f.length;return(f+a(p,y)).substr(0,l+i)}else f+=p;if(d.fragment){var h="#"+d.fragment;if((f+h).length>=l){if((f+h).length==t)return(f+h).substr(0,t);var g=l-f.length;return(f+a(h,g)).substr(0,l+i)}else f+=h}if(d.scheme&&d.host){var x=d.scheme+"://";if((f+x).length0&&(S=f.substr(-1*Math.floor(l/2))),(f.substr(0,Math.ceil(l/2))+n+S).substr(0,l+i)}var ZCi=_(T());function Qbe(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 ECi=_(T());function jbe(e,t,n){return Ybe(e,t,n)}var qbe=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 hO({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&&this.truncate.length&&this.truncate.length=0;y--){var h=u[y];switch(h.state){case 11:v(h,p);break;case 12:P(h,p);break;case 0:V(h,p);break;case 1:Z(h,p);break;case 2:R(h,p);break;case 3:E(h,p);break;case 4:I(h,p);break;case 5:F(h,p);break;case 6:N(h,p);break;case 7:b(h,p);break;case 13:G(h,p);break;case 14:X(h,p);break;case 8:W(h,p);break;case 9:A(h,p);break;case 10:k(h,p);break;case 15:B(h,p);break;case 16:O(h,p);break;case 17:H(h,p);break;case 18:U(h,p);break;case 19:K(h,p);break;case 20:Q(h,p);break;case 21:ie(h,p);break;case 22:j(h,p);break;case 23:$(h,p);break;case 24:ne(h,p);break;case 25:be(h,p);break;case 26:Ce(h,p);break;case 27:me(h,p);break;case 28:_e(h,p);break;case 29:Ve(h,p);break;case 30:Ie(h,p);break;case 31:Ze(h,p);break;case 32:Ke(h,p);break;case 33:rt(h,p);break;case 34:Xt(h,p);break;case 35:Ht(h,p);break;case 36:qe(h,p);break;case 37:De(h,p);break;case 38:mn(h,p);break;case 39:Dt(h,p);break;case 40:Lt(h,p);break;case 41:Vi(h,p);break;default:Hh(h.state)}}if(f>0&&FV(p)){var g=e.charAt(f-1);!FV(g)&&!u.some(Eot)&&u.push(xO(f,0))}}}for(var x=u.length-1;x>=0;x--)u.forEach(function(ge){return ln(ge)});return l;function S(ge){if(ge==="#")u.push(Rot(f,28));else if(ge==="@")u.push(Got(f,30));else if(ge==="/")u.push(xj(f,11));else if(ge==="+")u.push(_j(f,37));else if(ge==="(")u.push(_j(f,32));else{if(Qs.test(ge)&&(u.push(_j(f,38)),u.push(Lot(f,13))),c0e(ge)){var Le=ge.toLowerCase()==="m"?15:22;u.push(Zot(f,Le))}FV(ge)&&u.push(xO(f,0)),wf.test(ge)&&u.push(xj(f,5))}}function V(ge,Le){Le===":"?ge.state=2:Le==="-"?ge.state=1:fj(Le)||Ko(u,ge)}function Z(ge,Le){Le==="-"||(Le==="/"?(Ko(u,ge),u.push(xj(f,11))):fj(Le)?ge.state=0:Ko(u,ge))}function R(ge,Le){Le==="/"?ge.state=3:Le==="."?Ko(u,ge):s0(Le)?(ge.state=5,FV(Le)&&u.push(xO(f,0))):Ko(u,ge)}function E(ge,Le){Le==="/"?ge.state=4:hj(Le)?(ge.state=10,ge.acceptStateReached=!0):ln(ge)}function I(ge,Le){Le==="/"?ge.state=10:s0(Le)?(ge.state=5,ge.acceptStateReached=!0):Ko(u,ge)}function v(ge,Le){Le==="/"?ge.state=12:Ko(u,ge)}function P(ge,Le){s0(Le)?ge.state=5:Ko(u,ge)}function F(ge,Le){Le==="."?ge.state=7:Le==="-"?ge.state=6:Le===":"?ge.state=8:bO(Le)?ge.state=10:pO(Le)||ln(ge)}function N(ge,Le){Le==="-"||(Le==="."?ln(ge):s0(Le)?ge.state=5:ln(ge))}function b(ge,Le){Le==="."?ln(ge):s0(Le)?(ge.state=5,ge.acceptStateReached=!0):ln(ge)}function G(ge,Le){Le==="."?ge.state=14:Le===":"?ge.state=8:Qs.test(Le)||(bO(Le)?ge.state=10:wf.test(Le)?Ko(u,ge):ln(ge))}function X(ge,Le){Qs.test(Le)?(ge.octetsEncountered++,ge.octetsEncountered===4&&(ge.acceptStateReached=!0),ge.state=13):ln(ge)}function W(ge,Le){Qs.test(Le)?ge.state=9:ln(ge)}function A(ge,Le){Qs.test(Le)||(bO(Le)?ge.state=10:ln(ge))}function k(ge,Le){hj(Le)||ln(ge)}function B(ge,Le){Le.toLowerCase()==="a"?ge.state=16:j(ge,Le)}function O(ge,Le){Le.toLowerCase()==="i"?ge.state=17:j(ge,Le)}function H(ge,Le){Le.toLowerCase()==="l"?ge.state=18:j(ge,Le)}function U(ge,Le){Le.toLowerCase()==="t"?ge.state=19:j(ge,Le)}function K(ge,Le){Le.toLowerCase()==="o"?ge.state=20:j(ge,Le)}function Q(ge,Le){Le.toLowerCase()===":"?ge.state=21:j(ge,Le)}function ie(ge,Le){yO(Le)?ge.state=22:Ko(u,ge)}function j(ge,Le){Le==="."?ge.state=23:Le==="@"?ge.state=24:yO(Le)?ge.state=22:Ko(u,ge)}function $(ge,Le){Le==="."?Ko(u,ge):Le==="@"?Ko(u,ge):yO(Le)?ge.state=22:Ko(u,ge)}function ne(ge,Le){s0(Le)?ge.state=25:Ko(u,ge)}function be(ge,Le){Le==="."?ge.state=27:Le==="-"?ge.state=26:pO(Le)||ln(ge)}function Ce(ge,Le){Le==="-"||Le==="."?ln(ge):pO(Le)?ge.state=25:ln(ge)}function me(ge,Le){Le==="."||Le==="-"?ln(ge):s0(Le)?(ge.state=25,ge.acceptStateReached=!0):ln(ge)}function _e(ge,Le){bj(Le)?(ge.state=29,ge.acceptStateReached=!0):Ko(u,ge)}function Ve(ge,Le){bj(Le)||ln(ge)}function Ie(ge,Le){yj(Le)?(ge.state=31,ge.acceptStateReached=!0):Ko(u,ge)}function Ze(ge,Le){yj(Le)||(wf.test(Le)?Ko(u,ge):ln(ge))}function De(ge,Le){Qs.test(Le)?ge.state=38:(Ko(u,ge),S(Le))}function Ke(ge,Le){Qs.test(Le)?ge.state=33:Ko(u,ge),S(Le)}function rt(ge,Le){Qs.test(Le)?ge.state=34:Ko(u,ge)}function Xt(ge,Le){Qs.test(Le)?ge.state=35:Ko(u,ge)}function Ht(ge,Le){Le===")"?ge.state=36:Ko(u,ge)}function qe(ge,Le){Qs.test(Le)?ge.state=38:gj(Le)?ge.state=39:Ko(u,ge)}function mn(ge,Le){ge.acceptStateReached=!0,gO(Le)?ge.state=40:Le==="#"?ge.state=41:Qs.test(Le)||(Le==="("?ge.state=32:gj(Le)?ge.state=39:(ln(ge),FV(Le)&&u.push(xO(f,0))))}function Dt(ge,Le){Qs.test(Le)?ge.state=38:Le==="("?ge.state=32:(ln(ge),S(Le))}function Lt(ge,Le){gO(Le)||(Le==="#"?ge.state=41:Qs.test(Le)?ge.state=38:ln(ge))}function Vi(ge,Le){gO(Le)?ge.state=40:Qs.test(Le)?Ko(u,ge):ln(ge)}function ln(ge){if(Ko(u,ge),!!ge.acceptStateReached){var Le=ge.startIdx,yn=e.slice(ge.startIdx,f);if(yn=Vot(yn),ge.type==="url"){var bt=e.charAt(ge.startIdx-1);if(bt==="@")return;var ro=ge.matchType;if(ro==="scheme"){var Xo=mj.exec(yn);if(Xo&&(Le=Le+Xo.index,yn=yn.slice(Xo.index)),!i0e(yn))return}else if(ro==="tld"){if(!o0e(yn))return}else if(ro==="ipV4"){if(!r0e(yn))return}else Hh(ro);l.push(new s0e({tagBuilder:n,matchedText:yn,offset:Le,urlMatchType:ro,url:yn,protocolRelativeMatch:yn.slice(0,2)==="//",stripPrefix:i,stripTrailingSlash:o,decodePercentEncoding:r}))}else if(ge.type==="email")l0e(yn)&&l.push(new d0e({tagBuilder:n,matchedText:yn,offset:Le,email:yn.replace(a0e,"")}));else if(ge.type==="hashtag")u0e(yn)&&l.push(new f0e({tagBuilder:n,matchedText:yn,offset:Le,serviceName:s,hashtag:yn.slice(1)}));else if(ge.type==="mention")h0e(yn,a)&&l.push(new b0e({tagBuilder:n,matchedText:yn,offset:Le,serviceName:a,mention:yn.slice(1)}));else if(ge.type==="phone"){if(yn=yn.replace(/ +$/g,""),y0e(yn)){var ra=yn.replace(/[^0-9,;#]/g,"");l.push(new g0e({tagBuilder:n,matchedText:yn,offset:Le,number:ra,plusSign:yn.charAt(0)==="+"}))}}else Hh(ge)}}}var Cot=/[\(\{\[]/,x0e=/[\)\}\]]/,_0e={")":"(","}":"{","]":"["};function Vot(e){for(var t={"(":0,"{":0,"[":0},n=0;n=0;)if(r=e.charAt(o),x0e.test(r)){var s=_0e[r];if(t[s]<0)t[s]++,o--;else break}else if(n0e.test(r))o--;else break;return e.slice(0,o+1)}function xO(e,t){return{type:"url",startIdx:e,state:t,acceptStateReached:!1,matchType:"scheme"}}function xj(e,t){return{type:"url",startIdx:e,state:t,acceptStateReached:!1,matchType:"tld"}}function Lot(e,t){return{type:"url",startIdx:e,state:t,acceptStateReached:!1,matchType:"ipV4",octetsEncountered:1}}function Zot(e,t){return{type:"email",startIdx:e,state:t,acceptStateReached:!1}}function Rot(e,t){return{type:"hashtag",startIdx:e,state:t,acceptStateReached:!1}}function Got(e,t){return{type:"mention",startIdx:e,state:t,acceptStateReached:!1}}function _j(e,t){return{type:"phone",startIdx:e,state:t,acceptStateReached:!1}}function Eot(e){return e.type==="url"&&e.matchType==="scheme"}var B1i=_(T());function S0e(e,t){for(var n=t.onOpenTag,i=t.onCloseTag,o=t.onText,r=t.onComment,s=t.onDoctype,a=new Jh,l=0,d=e.length,u=0,f=0,p=a;l"?(p=new Jh(js(js({},p),{name:ie()})),K()):!_g.test($)&&!Qs.test($)&&$!==":"&&H()}function S($){$===">"?H():_g.test($)?u=3:H()}function V($){Yd.test($)||($==="/"?u=12:$===">"?K():$==="<"?U():$==="="||fO.test($)||Hbe.test($)?H():u=5)}function Z($){Yd.test($)?u=6:$==="/"?u=12:$==="="?u=7:$===">"?K():$==="<"?U():fO.test($)&&H()}function R($){Yd.test($)||($==="/"?u=12:$==="="?u=7:$===">"?K():$==="<"?U():fO.test($)?H():u=5)}function E($){Yd.test($)||($==='"'?u=8:$==="'"?u=9:/[>=`]/.test($)?H():$==="<"?U():u=10)}function I($){$==='"'&&(u=11)}function v($){$==="'"&&(u=11)}function P($){Yd.test($)?u=4:$===">"?K():$==="<"&&U()}function F($){Yd.test($)?u=4:$==="/"?u=12:$===">"?K():$==="<"?U():(u=4,j())}function N($){$===">"?(p=new Jh(js(js({},p),{isClosing:!0})),K()):u=4}function b($){e.substr(l,2)==="--"?(l+=2,p=new Jh(js(js({},p),{type:"comment"})),u=14):e.substr(l,7).toUpperCase()==="DOCTYPE"?(l+=7,p=new Jh(js(js({},p),{type:"doctype"})),u=20):H()}function G($){$==="-"?u=15:$===">"?H():u=16}function X($){$==="-"?u=18:$===">"?H():u=16}function W($){$==="-"&&(u=17)}function A($){$==="-"?u=18:u=16}function k($){$===">"?K():$==="!"?u=19:$==="-"||(u=16)}function B($){$==="-"?u=17:$===">"?K():u=16}function O($){$===">"?K():$==="<"&&U()}function H(){u=0,p=a}function U(){u=1,p=new Jh({idx:l})}function K(){var $=e.slice(f,p.idx);$&&o($,f),p.type==="comment"?r(p.idx):p.type==="doctype"?s(p.idx):(p.isOpening&&n(p.name,p.idx),p.isClosing&&i(p.name,p.idx)),H(),f=l+1}function Q(){var $=e.slice(f,l);o($,f),f=l+1}function ie(){var $=p.idx+(p.isClosing?2:1);return e.slice($,l).toLowerCase()}function j(){l--}}var Jh=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}();var Xot=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=Iot(t.urls),this.email=Bd(t.email)?t.email:this.email,this.phone=Bd(t.phone)?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow=Bd(t.newWindow)?t.newWindow:this.newWindow,this.stripPrefix=Wot(t.stripPrefix),this.stripTrailingSlash=Bd(t.stripTrailingSlash)?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=Bd(t.decodePercentEncoding)?t.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=t.sanitizeHtml||!1;var n=this.mention;if(n!==!1&&p0e.indexOf(n)===-1)throw new Error("invalid `mention` cfg '".concat(n,"' - see docs"));var i=this.hashtag;if(i!==!1&&m0e.indexOf(i)===-1)throw new Error("invalid `hashtag` cfg '".concat(i,"' - see docs"));this.truncate=wot(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 S0e(t,{onOpenTag:function(s){i.indexOf(s)>=0&&o++},onText:function(s,a){if(o===0){var l=/( | |<|<|>|>|"|"|')/gi,d=s.split(l),u=a;d.forEach(function(f,p){if(p%2===0){var y=n.parseText(f,u);r.push.apply(r,y)}u+=f.length})}},onCloseTag:function(s){i.indexOf(s)>=0&&(o=Math.max(o-1,0))},onComment:function(s){},onDoctype:function(s){}}),r=this.compactMatches(r),r=this.removeUnwantedMatches(r),r},e.prototype.compactMatches=function(t){t.sort(function(l,d){return l.getOffset()-d.getOffset()});for(var n=0;nr?n:n+1;t.splice(a,1);continue}if(t[n+1].getOffset()/g,">"));for(var n=this.parse(t),i=[],o=0,r=0,s=n.length;r{let i=new FileReader;i.addEventListener("load",function(){t(i.result)}),i.addEventListener("error",function(){n(i.error)}),i.readAsText(e)})}function Tj(e,t){let n=gv(e,"id");return n=c(n)?n:Hn(),t.getOrCreateEntity(n)}function Sj(e){let t=G0e(e,"lon"),n=G0e(e,"lat"),i=bv(e,"ele",Zo.gpx);return m.fromDegrees(t,n,i)}function G0e(e,t){if(!c(e))return;let n=e.getAttribute(t);if(n!==null){let i=parseFloat(n);return isNaN(i)?void 0:i}}function gv(e,t){if(!c(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function Tg(e,t,n){if(!c(e))return;let i=e.childNodes,o=i.length;for(let r=0;r${f.text}: ${f.value}

`)}if(!c(i)||i==="")return;i=Pot.link(i),yv.innerHTML=i;let s=yv.querySelectorAll("a");for(n=0;n',d+=`${yv.innerHTML}`,yv.innerHTML="",d}function v0e(e,t,n,i){let o=Sj(t),r=Tj(t,n);r.position=o;let s=c(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",Y.RED,TO);r.billboard=w0e(s);let a=Ql(t,"name",Zo.gpx);r.name=a,r.label=Aot(),r.label.text=a,r.description=Vj(t,r),i.clampToGround&&(r.billboard.heightReference=ze.CLAMP_TO_GROUND,r.label.heightReference=ze.CLAMP_TO_GROUND)}function Mot(e,t,n,i){let o=Tj(t,n);o.description=Vj(t,o);let r=Cj(t,"rtept",Zo.gpx),s=new Array(r.length);for(let a=0;a0?(a=a.concat(l.times),u.addSamples(a,s),d=d&&!0):d=!1;if(d){let f=c(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",Y.RED,TO);o.billboard=w0e(f),o.position=u,i.clampToGround&&(o.billboard.heightReference=ze.CLAMP_TO_GROUND),o.availability=new Yr,o.availability.addInterval(new Zn({start:a[0],stop:a[a.length-1]}))}o.polyline=P0e(i.trackColor),o.polyline.positions=s,i.clampToGround&&(o.polyline.clampToGround=!0)}function kot(e){let t={positions:[],times:[]},n=Cj(e,"trkpt",Zo.gpx),i;for(let o=0;o=0&&r._activeEntries.splice(s,1)}),o(e,t,n)}}else c(n)&&n(!1)}function jot(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++,M0e.call(this,e,t,n)}}var Sv=SO;var RLi=_(T(),1);var TLi=_(T(),1);var gLi=_(T(),1),Ai=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-Ai.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?Ai.Bounce.In(e*2)*.5:Ai.Bounce.Out(e*2-1)*.5+.5}}),generatePow:function(e){return e===void 0&&(e=4),e=e1e4?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}}}}),Cv=function(){return performance.now()},qot=function(){function e(){for(var t=[],n=0;n0;){this._tweensAddedDuringUpdate={};for(var o=0;o1?r(e[n],e[n-1],n-i):r(e[o],e[o+1>n?n:o+1],i-o)},Bezier:function(e,t){for(var n=0,i=e.length-1,o=Math.pow,r=MV.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=MV.Utils.CatmullRom;return e[0]===e[n]?(t<0&&(o=Math.floor(i=n*(1+t))),r(e[(o-1+n)%n],e[o],e[(o+1)%n],e[(o+2)%n],i-o)):t<0?e[0]-(r(e[0],e[0],e[1],e[1],-i)-e[0]):t>1?e[n]-(r(e[n],e[n],e[n-1],e[n-1],i-n)-e[n]):r(e[o?o-1:0],e[o],e[n1;i--)n*=i;return e[t]=n,n}}(),CatmullRom:function(e,t,n,i,o){var r=(n-e)*.5,s=(i-t)*.5,a=o*o,l=o*a;return(2*t-2*n+r+s)*l+(-3*t+3*n-2*r-s)*a+r*o+t}}},N0e=function(){function e(){}return e.nextId=function(){return e._nextId++},e._nextId=0,e}(),Lj=new qot,k0e=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=Ai.Linear.None,this._interpolationFunction=MV.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._id=N0e.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=Lj,Lj.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=Cv()),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],l=Array.isArray(a),d=l?"array":typeof a,u=!l&&Array.isArray(i[s]);if(!(d==="undefined"||d==="function")){if(u){var f=i[s];if(f.length===0)continue;for(var p=[a],y=0,h=f.length;y"u"||r)&&(n[s]=a),l||(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=Cv()),this._isPaused||!this._isPlaying?this:(this._isPaused=!0,this._pauseStart=t,this)},e.prototype.resume=function(t){return t===void 0&&(t=Cv()),!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;tl)return 1;var g=Math.trunc(s/a),x=s-g*a,S=Math.min(x/i._duration,1);return S===0&&s===i._duration?1:S},u=d(),f=this._easingFunction(u);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,f),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 y=0,h=this._chainedTweens.length;ythis._started+this._timeThreshold)){this._giveUpTime();return}i=this._nextNode()}this._pop()&&e&&this._process(!0)};function nrt(e){let t=e.slice(0,Math.min(4,e.size)),n=Cl(),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 irt(e){let t=Cl(),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 j0e(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&&(c(n)||(n=e.substr(0,e.indexOf("",t),i,o,r;for(;t!==-1&&t0?(jl.maximumRed=r,jl.red=void 0):(jl.maximumRed=void 0,jl.red=0),o>0?(jl.maximumGreen=o,jl.green=void 0):(jl.maximumGreen=void 0,jl.green=0),i>0?(jl.maximumBlue=i,jl.blue=void 0):(jl.maximumBlue=void 0,jl.blue=0),jl.alpha=n,Y.fromRandom(jl)):new Y(r,o,i,n)}function ET(e,t,n){let i=wn(e,t,n);if(c(i))return Ij(i,wn(e,"colorMode",n)==="random")}function rrt(e){let t=Mi(e,"TimeStamp",Pe.kmlgx),n=wn(t,"when",Pe.kmlgx);if(!c(t)||!c(n)||n.length===0)return;let i=ee.fromIso8601(n),o=new Yr;return o.addInterval(new Zn({start:i,stop:Ye.MAXIMUM_VALUE})),o}function srt(e){let t=Mi(e,"TimeSpan",Pe.kmlgx);if(!c(t))return;let n,i=Mi(t,"begin",Pe.kmlgx),o=c(i)?ee.fromIso8601(i.textContent):void 0,r=Mi(t,"end",Pe.kmlgx),s=c(r)?ee.fromIso8601(r.textContent):void 0;if(c(o)&&c(s)){if(ee.lessThan(s,o)){let a=o;o=s,s=a}n=new Yr,n.addInterval(new Zn({start:o,stop:s}))}else c(o)?(n=new Yr,n.addInterval(new Zn({start:o,stop:Ye.MAXIMUM_VALUE}))):c(s)&&(n=new Yr,n.addInterval(new Zn({start:Ye.MINIMUM_VALUE,stop:s})));return n}function eye(){let e=new cc;return e.width=Sg,e.height=Sg,e.scaleByDistance=new Nt(U0e,O0e,D0e,B0e),e.pixelOffsetScaleByDistance=new Nt(U0e,O0e,D0e,B0e),e}function Fj(){let e=new km;return e.outline=!0,e.outlineColor=Y.WHITE,e}function tye(){let e=new Nm;return e.translucencyByDistance=new Nt(3e6,1,5e6,0),e.pixelOffset=new D(17,0),e.horizontalOrigin=xi.LEFT,e.font="16px sans-serif",e.style=Yo.FILL_AND_OUTLINE,e}function Aj(e,t,n,i,o){let r=wn(e,"href",Pe.kml);if(!c(r)||r.length===0)return;if(r.indexOf("root://icons/palette-")===0){let a=r.charAt(21),l=ei(e,"x",Pe.gx)??0,d=ei(e,"y",Pe.gx)??0;l=Math.min(l/32,7),d=7-Math.min(d/32,7);let u=8*d+l;r=`https://maps.google.com/mapfiles/kml/pal${a}/icon${u}.png`}let s=vj(r,n,i);if(o){let a=wn(e,"refreshMode",Pe.kml),l=wn(e,"viewRefreshMode",Pe.kml);a==="onInterval"||a==="onExpire"?ht(`kml-refreshMode-${a}`,`KML - Unsupported Icon refreshMode: ${a}`):(l==="onStop"||l==="onRegion")&&ht(`kml-refreshMode-${l}`,`KML - Unsupported Icon viewRefreshMode: ${l}`);let d=wn(e,"viewBoundScale",Pe.kml)??1,u=l==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",f=wn(e,"viewFormat",Pe.kml)??u,p=wn(e,"httpQuery",Pe.kml);c(f)&&s.setQueryParameters(ld(ZO(f))),c(p)&&s.setQueryParameters(ld(ZO(p)));let y=t._ellipsoid;return Nj(s,t.camera,t.canvas,d,t._lastCameraView.bbox,y),s}return s}function art(e,t,n,i,o){let r=ei(t,"scale",Pe.kml),s=ei(t,"heading",Pe.kml),a=ET(t,"color",Pe.kml),l=Mi(t,"Icon",Pe.kml),d=Aj(l,e,i,o,!1);c(l)&&!c(d)&&(d=!1);let u=ei(l,"x",Pe.gx),f=ei(l,"y",Pe.gx),p=ei(l,"w",Pe.gx),y=ei(l,"h",Pe.gx),h=Mi(t,"hotSpot",Pe.kml),g=Cg(h,"x"),x=Cg(h,"y"),S=Is(h,"xunits"),V=Is(h,"yunits"),Z=n.billboard;c(Z)||(Z=eye(),n.billboard=Z),Z.image=d,Z.scale=r,Z.color=a,(c(u)||c(f)||c(p)||c(y))&&(Z.imageSubRegion=new je(u,f,p,y)),c(s)&&s!==0&&(Z.rotation=w.toRadians(-s),Z.alignedAxis=m.UNIT_Z),r=r??1;let R,E;c(g)&&(S==="pixels"?R=-g*r:S==="insetPixels"?R=(g-Sg)*r:S==="fraction"&&(R=-g*Sg*r),R+=Sg*.5*r),c(x)&&(V==="pixels"?E=x*r:V==="insetPixels"?E=(-x+Sg)*r:V==="fraction"&&(E=x*Sg*r),E-=Sg*.5*r),(c(R)||c(E))&&(Z.pixelOffset=new D(R,E))}function LO(e,t,n,i,o){for(let r=0,s=t.childNodes.length;r:clampToSeaFloor is currently not supported, using :clampToGround."),ze.CLAMP_TO_GROUND):t==="relativeToSeaFloor"?(ht("kml-gx:altitudeMode-relativeToSeaFloor","KML - :relativeToSeaFloor is currently not supported, using :relativeToGround."),ze.RELATIVE_TO_GROUND):(c(e)?ht("kml-altitudeMode-unknown",`KML - Unknown :${e}, using :CLAMP_TO_GROUND.`):ht("kml-gx:altitudeMode-unknown",`KML - Unknown :${t}, using :CLAMP_TO_GROUND.`),ze.CLAMP_TO_GROUND)}function drt(e,t,n){return n==="relativeToSeaFloor"||t==="absolute"||t==="relativeToGround"?e:((c(t)&&t!=="clampToGround"||c(n)&&n!=="clampToSeaFloor")&&ht("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${t??n}`),new Mh(e))}function urt(e,t,n,i){if(!c(e))return;if(n==="relativeToSeaFloor"||t==="absolute"||t==="relativeToGround")return e;(c(t)&&t!=="clampToGround"||c(n)&&n!=="clampToSeaFloor")&&ht("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${t??n}`);let o=e.length;for(let r=0;r0&&ht("kml-gx:angles","KML - gx:angles are not supported in gx:Tracks");let y=Math.min(a.length,d.length),h=[],g=[];for(let S=0;S0&&i.availability.addInterval(new Zn({start:g[0],stop:g[g.length-1]})),f&&u&&Mj(t,i,o),!0}function J0e(e,t,n,i,o,r,s,a,l){let d=e[0],u=e[e.length-1],f=new xa;f.addSamples(e,t),n.intervals.addInterval(new Zn({start:d,stop:u,isStartIncluded:l,isStopIncluded:l,data:drt(f,s,a)})),i.addInterval(new Zn({start:d,stop:u,isStartIncluded:l,isStopIncluded:l})),o.intervals.addInterval(new Zn({start:d,stop:u,isStartIncluded:l,isStopIncluded:l,data:r}))}function prt(e,t,n,i,o){let r=vf(n,"interpolate",Pe.gx),s=Pf(n,"Track",Pe.gx),a,l,d,u=!1,f=new zb,p=new Yr,y=new ya,h=e._ellipsoid;for(let g=0,x=s.length;g0)){for(h='',r=0;r`;h+="
${g.displayName??s}${g.value??""}
"}if(!c(h))return;h=ert.link(h),po.innerHTML=h;let x=po.querySelectorAll("a");for(r=0;r1&&(Hd(po,"a","href",i),Hd(po,"link","href",i),Hd(po,"area","href",i),Hd(po,"img","src",i),Hd(po,"iframe","src",i),Hd(po,"video","src",i),Hd(po,"audio","src",i),Hd(po,"source","src",i),Hd(po,"track","src",i),Hd(po,"input","src",i),Hd(po,"embed","src",i),Hd(po,"script","src",i),Hd(po,"video","poster",i)),zd(po,"a","href",o),zd(po,"link","href",o),zd(po,"area","href",o),zd(po,"img","src",o),zd(po,"iframe","src",o),zd(po,"video","src",o),zd(po,"audio","src",o),zd(po,"source","src",o),zd(po,"track","src",o),zd(po,"input","src",o),zd(po,"embed","src",o),zd(po,"script","src",o),zd(po,"video","poster",o);let S='
',S+=`${po.innerHTML}
`,po.innerHTML="",t.description=S}function EO(e,t,n){let i=n.entityCollection,o=n.parentEntity,r=n.sourceResource,s=n.uriResolver,a=$0e(t,i,n.context),l=a.kml,d=crt(e,t,n.styleCollection,r,s),u=wn(t,"name",Pe.kml);a.name=u,a.parent=o;let f=srt(t);c(f)||(f=rrt(t)),a.availability=f,Uj(a);function p(Z){return Z?Z.show&&p(Z.parent):!0}let y=vf(t,"visibility",Pe.kml);a.show=p(o)&&(y??!0);let h=Mi(t,"author",Pe.atom),g=l.author;g.name=wn(h,"name",Pe.atom),g.uri=wn(h,"uri",Pe.atom),g.email=wn(h,"email",Pe.atom);let x=Mi(t,"link",Pe.atom),S=l.link;S.href=Is(x,"href"),S.hreflang=Is(x,"hreflang"),S.rel=Is(x,"rel"),S.type=Is(x,"type"),S.title=Is(x,"title"),S.length=Is(x,"length"),l.address=wn(t,"address",Pe.kml),l.phoneNumber=wn(t,"phoneNumber",Pe.kml),l.snippet=wn(t,"Snippet",Pe.kml),grt(t,a),xrt(t,a,d,s,r);let V=e._ellipsoid;return cye(t,a,V),aye(t,a,V),c(Mi(t,"Region",Pe.kml))&&ht("kml-region","KML - Placemark Regions are unsupported"),{entity:a,styleEntity:d}}function sye(e,t,n,i){i.addNodes(t.childNodes,n),i.process()}function _rt(e,t,n,i){let o=EO(e,t,n),r=He(n);r.parentEntity=o.entity,sye(e,t,r,i)}function Trt(e,t,n,i){let o=EO(e,t,n),r=o.entity,s=o.styleEntity,a=!1,l=t.childNodes;for(let d=0,u=l.length;dw.PI_OVER_TWO?w.PI_OVER_TWO:d}function a(d){return d>w.PI?d-w.TWO_PI:d<-w.PI?d+w.TWO_PI:d}let l=ax(e.queryParameters);if(l=l.replace(/%5B/g,"[").replace(/%5D/g,"]"),c(t)&&t._mode!==se.MORPHING){let d,u;if(o=o??Grt,c(n)&&(Ej.x=n.clientWidth*.5,Ej.y=n.clientHeight*.5,d=t.pickEllipsoid(Ej,r,Ert)),c(d)?u=r.cartesianToCartographic(d,NV):(u=de.center(o,NV),d=r.cartographicToCartesian(u)),c(i)&&!w.equalsEpsilon(i,1,w.EPSILON9)){let S=o.width*i*.5,V=o.height*i*.5;o=new de(a(u.longitude-S),s(u.latitude-V),a(u.longitude+S),s(u.latitude+V))}l=l.replace("[bboxWest]",w.toDegrees(o.west).toString()),l=l.replace("[bboxSouth]",w.toDegrees(o.south).toString()),l=l.replace("[bboxEast]",w.toDegrees(o.east).toString()),l=l.replace("[bboxNorth]",w.toDegrees(o.north).toString());let f=w.toDegrees(u.longitude).toString(),p=w.toDegrees(u.latitude).toString();l=l.replace("[lookatLon]",f),l=l.replace("[lookatLat]",p),l=l.replace("[lookatTilt]",w.toDegrees(t.pitch).toString()),l=l.replace("[lookatHeading]",w.toDegrees(t.heading).toString()),l=l.replace("[lookatRange]",m.distance(t.positionWC,d)),l=l.replace("[lookatTerrainLon]",f),l=l.replace("[lookatTerrainLat]",p),l=l.replace("[lookatTerrainAlt]",u.height.toString()),r.cartesianToCartographic(t.positionWC,NV),l=l.replace("[cameraLon]",w.toDegrees(NV.longitude).toString()),l=l.replace("[cameraLat]",w.toDegrees(NV.latitude).toString()),l=l.replace("[cameraAlt]",w.toDegrees(NV.height).toString());let y=t.frustum,h=y.aspectRatio,g="",x="";if(c(h)){let S=w.toDegrees(y.fov);h>1?(g=S,x=S/h):(x=S,g=S*h)}l=l.replace("[horizFov]",g.toString()),l=l.replace("[vertFov]",x.toString())}else l=l.replace("[bboxWest]","-180"),l=l.replace("[bboxSouth]","-90"),l=l.replace("[bboxEast]","180"),l=l.replace("[bboxNorth]","90"),l=l.replace("[lookatLon]",""),l=l.replace("[lookatLat]",""),l=l.replace("[lookatRange]",""),l=l.replace("[lookatTilt]",""),l=l.replace("[lookatHeading]",""),l=l.replace("[lookatTerrainLon]",""),l=l.replace("[lookatTerrainLat]",""),l=l.replace("[lookatTerrainAlt]",""),l=l.replace("[cameraLon]",""),l=l.replace("[cameraLat]",""),l=l.replace("[cameraAlt]",""),l=l.replace("[horizFov]",""),l=l.replace("[vertFov]","");c(n)?(l=l.replace("[horizPixels]",n.clientWidth),l=l.replace("[vertPixels]",n.clientHeight)):(l=l.replace("[horizPixels]",""),l=l.replace("[vertPixels]","")),l=l.replace("[terrainEnabled]","1"),l=l.replace("[clientVersion]","1"),l=l.replace("[kmlVersion]","2.2"),l=l.replace("[clientName]","Cesium"),l=l.replace("[language]","English"),e.setQueryParameters(ld(l))}function Xrt(e,t,n,i){let r=EO(e,t,n).entity,s=n.sourceResource,a=n.uriResolver,l=Mi(t,"Link",Pe.kml);if(c(l)||(l=Mi(t,"Url",Pe.kml)),c(l)){let d=wn(l,"href",Pe.kml),u,f;if(c(d)){let p=d;if(d=vj(d,s,n.uriResolver),/^data:/.test(d.getUrlComponent()))/\.kmz/i.test(s.getUrlComponent())||(p=s.getDerivedResource({url:p}));else{if(p=d.clone(),u=wn(l,"viewRefreshMode",Pe.kml),u==="onRegion"){ht("kml-refrehMode-onRegion","KML - Unsupported viewRefreshMode: onRegion");return}f=wn(l,"viewBoundScale",Pe.kml)??1;let x=u==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",S=wn(l,"viewFormat",Pe.kml)??x,V=wn(l,"httpQuery",Pe.kml);c(S)&&d.setQueryParameters(ld(ZO(S))),c(V)&&d.setQueryParameters(ld(ZO(V)));let Z=e._ellipsoid;Nj(d,e.camera,e.canvas,f,e._lastCameraView.bbox,Z)}let y={sourceUri:p,uriResolver:a,context:r.id,screenOverlayContainer:n.screenOverlayContainer},h=new Ks,g=kj(e,h,d,y).then(function(x){let S=e._entityCollection,V=h.values;S.suspendEvents();for(let E=0;E0||Z==="onExpire"||u==="onStop"){let E=Mi(x,"NetworkLinkControl",Pe.kml),I=c(E),v=ee.now(),P={id:Hn(),href:d,cookie:{},lastUpdated:v,updating:!1,entity:r,viewBoundScale:f,needsUpdate:!1,cameraUpdateTime:v},F=0;if(I&&(P.cookie=ld(wn(E,"cookie",Pe.kml)??""),F=ei(E,"minRefreshPeriod",Pe.kml)??0),Z==="onInterval")I&&(R=Math.max(F,R)),P.refreshMode=Vg.INTERVAL,P.time=R;else if(Z==="onExpire"){let N;if(I&&(N=wn(E,"expires",Pe.kml)),c(N))try{let b=ee.fromIso8601(N),G=ee.secondsDifference(b,v);G>0&&G0;)this._screenOverlays.pop().remove()};function Uj(e){let t=e.parent;if(c(t)){let n=t.availability;if(c(n)){let i=e.availability;c(i)?i.intersect(n):e.availability=n}}}function wrt(e,t,n,i,o){return function(r){if(!i.contains(t.id))return;let s=!1,a=Mi(r,"NetworkLinkControl",Pe.kml),l=c(a),d=0;if(l){if(c(Mi(a,"Update",Pe.kml))){ht("kml-networkLinkControl-update","KML - NetworkLinkControl updates aren't supported."),t.updating=!1,i.remove(t.id);return}t.cookie=ld(wn(a,"cookie",Pe.kml)??""),d=ei(a,"minRefreshPeriod",Pe.kml)??0}let u=ee.now(),f=t.refreshMode;if(f===Vg.INTERVAL)c(a)&&(t.time=Math.max(d,t.time));else if(f===Vg.EXPIRE){let v;if(c(a)&&(v=wn(a,"expires",Pe.kml)),c(v))try{let P=ee.fromIso8601(v),F=ee.secondsDifference(P,u);F>0&&Fu.time&&(p=!0):u.refreshMode===Vg.EXPIRE?ee.greaterThan(n,u.time)&&(p=!0):u.refreshMode===Vg.STOP&&(r&&(u.needsUpdate=!0,u.cameraUpdateTime=n),u.needsUpdate&&ee.secondsDifference(n,u.cameraUpdateTime)>=u.time&&(p=!0)),p){o(f),u.updating=!0;let y=new Ks,h=u.href.clone();h.setQueryParameters(u.cookie);let g=i._ellipsoid??re.default;Nj(h,i.camera,i.canvas,u.viewBoundScale,s.bbox,g),kj(i,y,h,{context:f.id}).then(wrt(i,u,y,l,h)).catch(function(x){let S=`NetworkLink ${u.href} refresh failed: ${x}`;console.log(S),i._error.raiseEvent(i,S)}),d=!0}}l.set(u.id,u)}}),d&&(this._networkLinks=l,this._changed.raiseEvent(this)),!0};function Prt(){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}Kd._DeferredLoading=jh;Kd._getTimestamp=Ti;var XT=Kd;var KZi=_(T(),1);function Gv(){L.throwInstantiationError()}Gv.prototype.update=L.throwInstantiationError;Gv.prototype.getBoundingSphere=L.throwInstantiationError;Gv.prototype.isDestroyed=L.throwInstantiationError;Gv.prototype.destroy=L.throwInstantiationError;var Oj=Gv;var QZi=_(T(),1),kV=`#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 qZi=_(T(),1),Ev=`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; } 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; } 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 eRi=_(T(),1),Xv=`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; } 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); } 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; } 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; } 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)); } const float T0 = 0.6; const float k = 0.1; const float C0 = 0.8; const float FX0 = 0.6; const float FY0 = 0.6; 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; const float t = 0.4; const float s = 0.25; 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); float Is = max(pow(dot(-lightDir, -rayDir), 2.0), 0.0); float It = T(cloudPoint); 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; float ndDot = clamp(dot(cloudNormal, -rayDir), 0.0, 1.0); float TR = pow(ndDot, 3.0) - W; TR *= 1.3; float minusDot = 0.5 - ndDot; TR -= min(minusDot * W2, 0.0); TR -= 0.8 * (minusDot + 0.25) * W3; float shading = mix(1.0 - 0.8 * W * W, 1.0, Id * TR); shading = clamp(shading + 0.2, 0.3, 1.0); 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 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 nRi=_(T(),1),Iv=`#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() { 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 oRi=_(T(),1),Wv=`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)); } 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 sRi=_(T(),1),wv=`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 cRi=_(T(),1),Pv=`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 dRi=_(T(),1),vv=`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 mRi=_(T(),1),Fv=`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); vec2 maxPlane = vec2(czm_frustumPlanes.w, czm_frustumPlanes.x); 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 hRi=_(T(),1),Av=`in vec4 position; out vec4 positionEC; void main() { positionEC = czm_modelView * position; gl_Position = czm_projection * positionEC; czm_vertexLogDepth(); } `;var bRi=_(T(),1),UV=`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; vec3 normalEC = normalize(czm_normal * normalMC); 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() { 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; } 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; } vec4 outsideFaceColor = (intersection.start != 0.0) ? computeEllipsoidColor(ray, intersection.start, 1.0) : vec4(0.0); 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 gRi=_(T(),1),OV=`in vec3 position; uniform vec3 u_radii; out vec3 v_positionEC; void main() { vec4 p = vec4(u_radii * position, 1.0); v_positionEC = (czm_modelView * p).xyz; gl_Position = czm_modelViewProjection * p; gl_Position.z = clamp(gl_Position.z, czm_depthRange.near, czm_depthRange.far); czm_vertexLogDepth(); } `;var _Ri=_(T(),1);/** * @license * Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of NVIDIA CORPORATION nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */var Mv=`#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( FxaaFloat2 pos, FxaaTex tex, FxaaFloat2 fxaaQualityRcpFrame, FxaaFloat fxaaQualitySubpix, FxaaFloat fxaaQualityEdgeThreshold, 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 SRi=_(T(),1),Nv=`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 #ifdef COLOR_CORRECT uniform vec3 u_hsbShift; #endif #ifdef HIGHLIGHT_FILL_TILE uniform vec4 u_fillHighlightColor; #endif #ifdef TRANSLUCENT uniform vec4 u_frontFaceAlphaByDistance; uniform vec4 u_backFaceAlphaByDistance; uniform vec4 u_translucencyRectangle; #endif #ifdef UNDERGROUND_COLOR uniform vec4 u_undergroundColor; uniform vec4 u_undergroundColorAlphaByDistance; #endif #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) { 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; if (split < 0.0 && gl_FragCoord.x > splitPosition) { alpha = 0.0; } 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; 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)); vec3 normalEC = czm_normal3D * normalMC; #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 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; #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); #ifdef FOG vec3 fogColor = groundAtmosphereColor.rgb; #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 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); } const float oceanFrequencyLowAltitude = 825000.0; const float oceanAnimationSpeedLowAltitude = 0.004; const float oceanOneOverAmplitudeLowAltitude = 1.0 / 2.0; const float oceanSpecularIntensity = 0.5; 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); vec3 normalizedPositionToEyeEC = normalize(normalize(positionToEyeEC)); float waveIntensity = waveFade(70000.0, 1000000.0, positionToEyeECLength); #ifdef SHOW_OCEAN_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); time = czm_frameNumber * oceanAnimationSpeedLowAltitude; noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyLowAltitude, time, 0.0); vec3 normalTangentSpaceLowAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeLowAltitude); 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); 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); float diffuseIntensity = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * maskValue; vec3 diffuseHighlight = waveHighlightColor * diffuseIntensity * (1.0 - fade); #ifdef SHOW_OCEAN_WAVES float tsPerturbationRatio = normalTangentSpace.z; vec3 nonDiffuseHighlight = mix(waveHighlightColor * 5.0 * (1.0 - tsPerturbationRatio), vec3(0.0), diffuseIntensity); #else vec3 nonDiffuseHighlight = vec3(0.0); #endif 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 VRi=_(T(),1),kv=`#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; 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 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) { 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) { 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); return czm_modelViewProjection * morphPosition; } #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 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; 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; 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 ZRi=_(T(),1),DV=`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 GRi=_(T(),1),Uv=`uniform sampler2D u_texture; in vec2 v_textureCoordinates; void main() { out_FragColor = texture(u_texture, v_textureCoordinates); } `;var XRi=_(T(),1),Ov=`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 WRi=_(T(),1),BV=`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; 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); float radiusAdjust = (ellipsoidRadiiDifference / 4.0) + distanceAdjust; float atmosphereInnerRadius = (length(czm_viewerPositionWC) - czm_eyeHeight) - radiusAdjust; vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection); underTranslucentGlobe = 0.0; #if defined(GLOBE_TRANSLUCENT) czm_raySegment primaryRayEarthIntersect = czm_raySphereIntersectionInterval(primaryRay, vec3(0.0), atmosphereInnerRadius + radiusAdjust); if (primaryRayEarthIntersect.start > 0.0 && primaryRayEarthIntersect.stop > 0.0) { 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); float angle = dot(normalize(czm_viewerPositionWC), normalize(onEarth)); 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); underTranslucentGlobe = 1.0; return; } #endif computeScattering( primaryRay, length(cameraToPositionWC), lightDirection, atmosphereInnerRadius, rayleighColor, mieColor, opacity ); float cameraHeight = czm_eyeHeight + atmosphereInnerRadius; float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS; opacity = clamp((atmosphereOuterRadius - cameraHeight) / (atmosphereOuterRadius - atmosphereInnerRadius), 0.0, 1.0); float nightAlpha = (u_radiiAndDynamicAtmosphereColor.z != 0.0) ? clamp(dot(normalize(positionWC), lightDirection), 0.0, 1.0) : 1.0; opacity *= pow(nightAlpha, 0.5); } `;var PRi=_(T(),1),Dv=`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 if (translucent == 0.0) { color.a = mix(color.b, 1.0, color.a) * smoothstep(0.0, 1.0, czm_morphTime); } out_FragColor = color; } `;var FRi=_(T(),1),Bv=`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; gl_Position = czm_modelViewProjection * position; } `;var MRi=_(T(),1),Yv=`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 kRi=_(T(),1),Hv=`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 ORi=_(T(),1),zv=`uniform sampler2D u_texture; in vec2 v_textureCoordinates; void main() { vec4 color = texture(u_texture, v_textureCoordinates); out_FragColor = czm_gammaCorrect(color); } `;var BRi=_(T(),1),Kv=`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); burst += 0.4 * addBurst(position, vec2(0.38942, 0.92106), lengthScalar); burst += 0.4 * addBurst(position, vec2(0.99235, 0.12348), lengthScalar); burst += 0.4 * addBurst(position, vec2(0.60327, -0.79754), lengthScalar); burst += 0.3 * addBurst(position, vec2(0.31457, 0.94924), lengthScalar); burst += 0.3 * addBurst(position, vec2(0.97931, 0.20239), lengthScalar); burst += 0.3 * addBurst(position, vec2(0.66507, -0.74678), lengthScalar); color += clamp(burst, vec4(0.0), vec4(1.0)) * 0.15; out_FragColor = clamp(color, vec4(0.0), vec4(1.0)); } `;var HRi=_(T(),1),Jv=`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 KRi=_(T(),1),Qv=`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 Ceo=_(T(),1);var jRi=_(T(),1);function vrt(e){let t,n=e.name,i=e.message;c(n)&&c(i)?t=`${n}: ${i}`:t=e.toString();let o=e.stack;return c(o)&&(t+=` ${o}`),t}var qh=vrt;var fGi=_(T(),1);var aGi=_(T(),1);var tGi=_(T(),1);async function Frt(e,t,n,i){return c(i)||(i=!1),C.typeOf.object("terrainProvider",e),C.typeOf.number("level",t),C.typeOf.bool("rejectOnTileFail",i),C.defined("positions",n),Nrt(e,t,n,i)}function Art(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(uye(i)):r=o.then(uye(i)).catch(krt(i)),e.shift(),t.push(r),!0}function Mrt(e){return new Promise(function(t){setTimeout(t,e)})}function Dj(e,t,n){return e.length?Art(e,t,n)?Dj(e,t,n):Mrt(100).then(()=>Dj(e,t,n)):Promise.resolve()}function Nrt(e,t,n,i){let o=e.tilingScheme,r,s=[],a={};for(r=0;r0&&await mye(e,a,n),t}var IT=mye;async function Yj(e,t){let n=t.terrainProvider,i=t.mapProjection,o=i.ellipsoid,r,s=t.camera.getRectangleCameraCoordinates(e);if(t.mode===se.SCENE3D?r=o.cartesianToCartographic(s):r=i.unproject(s),!c(n))return r;let a=n.availability;if(!c(a)||t.mode===se.SCENE2D)return r;let l=[de.center(e),de.southeast(e),de.southwest(e),de.northeast(e),de.northwest(e)],d=await Yj._sampleTerrainMostDetailed(n,l),u=!1,f=d.reduce(function(y,h){return c(h.height)?(u=!0,Math.max(h.height,y)):y},-Number.MAX_VALUE),p=r;return u&&(p.height+=f),p}Yj._sampleTerrainMostDetailed=IT;var WT=Yj;var CAi=_(T(),1);var XEi=_(T(),1);var TEi=_(T(),1);var pGi=_(T(),1),Urt={NONE:0,LERC:1},cm=Object.freeze(Urt);var YGi=_(T(),1);var GGi=_(T(),1);var yGi=_(T(),1),Ort={NONE:0,BITS12:1},qs=Object.freeze(Ort);var wT=new m,Drt=new m,lm=new D,XO=new M,Brt=new M,Yrt=Math.pow(2,12);function Zc(e,t,n,i,o,r,s,a,l,d){let u=qs.NONE,f,p;if(c(t)&&c(n)&&c(i)&&c(o)){let y=t.minimum,h=t.maximum,g=m.subtract(h,y,Drt),x=i-n;Math.max(m.maximumComponent(g),x)0,y=e.isGeographic??!0,h=e.ellipsoid??re.default,g=1/h.maximumRadius,x=de.clone(e.nativeRectangle),S=de.clone(e.rectangle),V,Z,R,E;c(S)?(V=S.west,Z=S.south,R=S.east,E=S.north):y?(V=a(x.west),Z=a(x.south),R=a(x.east),E=a(x.north)):(V=x.west*g,Z=s-2*o(r(-x.south*g)),R=x.east*g,E=s-2*o(r(-x.north*g)));let I=e.relativeToCenter,v=c(I);I=v?I:m.ZERO;let P=e.includeWebMercatorT??!1,F=e.exaggeration??1,N=e.exaggerationRelativeHeight??0,G=F!==1,X=e.structure??$h.DEFAULT_STRUCTURE,W=X.heightScale??$h.DEFAULT_STRUCTURE.heightScale,A=X.heightOffset??$h.DEFAULT_STRUCTURE.heightOffset,k=X.elementsPerHeight??$h.DEFAULT_STRUCTURE.elementsPerHeight,B=X.stride??$h.DEFAULT_STRUCTURE.stride,O=X.elementMultiplier??$h.DEFAULT_STRUCTURE.elementMultiplier,H=X.isBigEndian??$h.DEFAULT_STRUCTURE.isBigEndian,U=de.computeWidth(x),K=de.computeHeight(x),Q=U/(d-1),ie=K/(u-1);y||(U*=g,K*=g);let j=h.radiiSquared,$=j.x,ne=j.y,be=j.z,Ce=65536,me=-65536,_e=wt.eastNorthUpToFixedFrame(I,h),Ve=M.inverseTransformation(_e,zrt),Ie,Ze;P&&(Ie=Wi.geodeticLatitudeToMercatorAngle(Z),Ze=1/(Wi.geodeticLatitudeToMercatorAngle(E)-Ie));let De=Krt;De.x=Number.POSITIVE_INFINITY,De.y=Number.POSITIVE_INFINITY,De.z=Number.POSITIVE_INFINITY;let Ke=Jrt;Ke.x=Number.NEGATIVE_INFINITY,Ke.y=Number.NEGATIVE_INFINITY,Ke.z=Number.NEGATIVE_INFINITY;let rt=Number.POSITIVE_INFINITY,Xt=d*u,Ht=f>0?d*2+u*2:0,qe=Xt+Ht,mn=new Array(qe),Dt=new Array(qe),Lt=new Array(qe),Vi=P?new Array(qe):[],ln=G?new Array(qe):[],ge=0,Le=u,yn=0,bt=d;p&&(--ge,++Le,--yn,++bt);let ro=1e-5;for(let $e=ge;$e=u&&(yt=u-1);let Bt=x.north-ie*yt;y?Bt=a(Bt):Bt=s-2*o(r(-Bt*g));let Ln=(Bt-Z)/(E-Z);Ln=w.clamp(Ln,0,1);let Io=$e===ge,To=$e===Le-1;f>0&&(Io?Bt+=ro*K:To&&(Bt-=ro*K));let Ka=t(Bt),Ja=n(Bt),Li=be*Ja,bi;P&&(bi=(Wi.geodeticLatitudeToMercatorAngle(Bt)-Ie)*Ze);for(let sa=yn;sa=d&&(Qr=d-1);let xl=yt*(d*B)+Qr*B,yo;if(k===1)yo=l[xl];else{yo=0;let Ao;if(H)for(Ao=0;Ao=0;--Ao)yo=yo*O+l[xl+Ao]}yo=yo*W+A,me=Math.max(me,yo),Ce=Math.min(Ce,yo);let wr=x.west+Q*Qr;y?wr=a(wr):wr=wr*g;let gp=(wr-V)/(R-V);gp=w.clamp(gp,0,1);let jr=yt*d+Qr;if(f>0){let Ao=sa===yn,dn=sa===bt-1,Re=Io||To||Ao||dn;if((Io||To)&&(Ao||dn))continue;Re&&(yo-=f,Ao?(jr=Xt+(u-yt-1),wr-=ro*U):To?jr=Xt+u+(d-Qr-1):dn?(jr=Xt+u+d+yt,wr+=ro*U):Io&&(jr=Xt+u+d+u+Qr))}let du=Ka*t(wr),Qa=Ka*n(wr),ex=$*du,aa=ne*Qa,ja=1/i(ex*du+aa*Qa+Li*Ja),ds=ex*ja,uu=aa*ja,mu=Li*ja,fu=new m;fu.x=ds+du*yo,fu.y=uu+Qa*yo,fu.z=mu+Ja*yo,M.multiplyByPoint(Ve,fu,Hj),m.minimumByComponent(Hj,De,De),m.maximumByComponent(Hj,Ke,Ke),rt=Math.min(rt,yo),mn[jr]=fu,Lt[jr]=new D(gp,Ln),Dt[jr]=yo,P&&(Vi[jr]=bi),G&&(ln[jr]=h.geodeticSurfaceNormal(fu))}}let Xo=ue.fromPoints(mn),ra;c(S)&&(ra=Xn.fromRectangle(S,Ce,me,h));let Wr;v&&(Wr=new kb(h).computeHorizonCullingPointPossiblyUnderEllipsoid(I,mn,Ce));let _s=new J0(De,Ke,I),Ae=new Rc(I,_s,rt,me,_e,!1,P,G,F,N),st=new Float32Array(qe*Ae.stride),Qe=0;for(let $e=0;$e=w.FOUR_GIGABYTES)throw new L("The total number of vertices (width * height) must be less than 4,294,967,296.");let n=hye[e];c(n)||(hye[e]=n=[]);let i=n[t];return c(i)||(e*t=w.FOUR_GIGABYTES)throw new L("The total number of vertices (width * height) must be less than 4,294,967,296.");let n=pye[e];c(n)||(pye[e]=n=[]);let i=n[t];if(!c(i)){let o=ml.getRegularGridIndices(e,t),r=yye(e,t),s=r.westIndicesSouthToNorth,a=r.southIndicesEastToWest,l=r.eastIndicesNorthToSouth,d=r.northIndicesWestToEast;i=n[t]={indices:o,westIndicesSouthToNorth:s,southIndicesEastToWest:a,eastIndicesNorthToSouth:l,northIndicesWestToEast:d}}return i};var bye=[];ml.getRegularGridAndSkirtIndicesAndEdgeIndices=function(e,t){if(e*t>=w.FOUR_GIGABYTES)throw new L("The total number of vertices (width * height) must be less than 4,294,967,296.");let n=bye[e];c(n)||(bye[e]=n=[]);let i=n[t];if(!c(i)){let o=e*t,r=(e-1)*(t-1)*6,s=e*2+t*2,a=Math.max(0,s-4)*6,l=o+s,d=r+a,u=yye(e,t),f=u.westIndicesSouthToNorth,p=u.southIndicesEastToWest,y=u.eastIndicesNorthToSouth,h=u.northIndicesWestToEast,g=Me.createTypedArray(l,d);gye(e,t,g,0),ml.addSkirtIndices(f,p,y,h,o,g,r),i=n[t]={indices:g,westIndicesSouthToNorth:f,southIndicesEastToWest:p,eastIndicesNorthToSouth:y,northIndicesWestToEast:h,indexCountWithoutSkirts:r}}return i};ml.addSkirtIndices=function(e,t,n,i,o,r,s){let a=o;s=wO(e,a,r,s),a+=e.length,s=wO(t,a,r,s),a+=t.length,s=wO(n,a,r,s),a+=n.length,wO(i,a,r,s)};function yye(e,t){let n=new Array(t),i=new Array(e),o=new Array(t),r=new Array(e),s;for(s=0;s0?Z=rs.getRegularGridAndSkirtIndicesAndEdgeIndices(V.gridWidth,V.gridHeight):Z=rs.getRegularGridIndicesAndEdgeIndices(V.gridWidth,V.gridHeight);let R=V.gridWidth*V.gridHeight;return S._mesh=new dm(f,new Float32Array(V.vertices),Z.indices,Z.indexCountWithoutSkirts,R,V.minimumHeight,V.maximumHeight,ue.clone(V.boundingSphere3D),m.clone(V.occludeePointInScaledSpace),V.numberOfAttributes,Xn.clone(V.orientedBoundingBox),Rc.clone(V.encoding),Z.westIndicesSouthToNorth,Z.southIndicesEastToWest,Z.eastIndicesNorthToSouth,Z.northIndicesWestToEast),S._buffer=void 0,S._mesh})};a0.prototype._createMeshSync=function(e){C.typeOf.object("options.tilingScheme",e.tilingScheme),C.typeOf.number("options.x",e.x),C.typeOf.number("options.y",e.y),C.typeOf.number("options.level",e.level);let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=e.exaggeration??1,s=e.exaggerationRelativeHeight??0,a=t.ellipsoid,l=t.tileXYToNativeRectangle(n,i,o),d=t.tileXYToRectangle(n,i,o),u=a.cartographicToCartesian(de.center(d)),f=this._structure,y=rs.getEstimatedLevelZeroGeometricErrorForAHeightmap(a,this._width,t.getNumberOfXTilesAtLevel(0))/(1<0?g=rs.getRegularGridAndSkirtIndicesAndEdgeIndices(this._width,this._height):g=rs.getRegularGridIndicesAndEdgeIndices(this._width,this._height);let x=h.gridWidth*h.gridHeight;return this._mesh=new dm(u,h.vertices,g.indices,g.indexCountWithoutSkirts,x,h.minimumHeight,h.maximumHeight,h.boundingSphere3D,h.occludeePointInScaledSpace,h.encoding.stride,h.orientedBoundingBox,h.encoding,g.westIndicesSouthToNorth,g.southIndicesEastToWest,g.eastIndicesNorthToSouth,g.northIndicesWestToEast),this._mesh};a0.prototype.interpolateHeight=function(e,t,n){let i=this._width,o=this._height,r=this._structure,s=r.stride,a=r.elementsPerHeight,l=r.elementMultiplier,d=r.isBigEndian,u=r.heightOffset,f=r.heightScale,p=c(this._mesh),y=this._encoding===cm.LERC;if(!p&&y)return;let g;if(p){let x=this._mesh.vertices,S=this._mesh.encoding;g=_ye(x,S,u,f,e,i,o,t,n)}else g=$rt(this._buffer,a,l,s,d,e,i,o,t,n),g=g*f+u;return g};a0.prototype.upsample=function(e,t,n,i,o,r,s){if(!c(e))throw new L("tilingScheme is required.");if(!c(t))throw new L("thisX is required.");if(!c(n))throw new L("thisY is required.");if(!c(i))throw new L("thisLevel is required.");if(!c(o))throw new L("descendantX is required.");if(!c(r))throw new L("descendantY is required.");if(!c(s))throw new L("descendantLevel is required.");if(s-i>1)throw new L("Upsampling through more than one level at a time is not currently supported.");let l=this._mesh;if(!c(l))return;let d=this._width,u=this._height,f=this._structure,p=f.stride,y=new this._bufferType(d*u*p),h=l.vertices,g=l.encoding,x=e.tileXYToRectangle(t,n,i),S=e.tileXYToRectangle(o,r,s),V=f.heightOffset,Z=f.heightScale,R=f.elementsPerHeight,E=f.elementMultiplier,I=f.isBigEndian,v=Math.pow(E,R-1);for(let P=0;Pf.highestEncodedHeight?f.highestEncodedHeight:G,est(y,R,E,v,p,I,P*d+N,G)}}return Promise.resolve(new a0({buffer:y,width:d,height:u,childTileMask:0,structure:this._structure,createdByUpsampling:!0}))};a0.prototype.isChildAvailable=function(e,t,n,i){if(!c(e))throw new L("thisX is required.");if(!c(t))throw new L("thisY is required.");if(!c(n))throw new L("childX is required.");if(!c(i))throw new L("childY is required.");let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<=s&&(y=s-1,p=s-2);let h=f|0,g=h+1;g>=a&&(g=a-1,h=a-2);let x=u-p,S=f-h;h=a-1-h,g=a-1-g;let V=PO(e,t,n,i,o,h*s+p),Z=PO(e,t,n,i,o,h*s+y),R=PO(e,t,n,i,o,g*s+p),E=PO(e,t,n,i,o,g*s+y);return Tye(x,S,V,Z,R,E)}function _ye(e,t,n,i,o,r,s,a,l){let d=(a-o.west)*(r-1)/(o.east-o.west),u=(l-o.south)*(s-1)/(o.north-o.south),f=d|0,p=f+1;p>=r&&(p=r-1,f=r-2);let y=u|0,h=y+1;h>=s&&(h=s-1,y=s-2);let g=d-f,x=u-y;y=s-1-y,h=s-1-h;let S=(t.decodeHeight(e,y*r+f)-n)/i,V=(t.decodeHeight(e,y*r+p)-n)/i,Z=(t.decodeHeight(e,h*r+f)-n)/i,R=(t.decodeHeight(e,h*r+p)-n)/i;return Tye(g,x,S,V,Z,R)}function Tye(e,t,n,i,o,r){return t=0;--a)s=s*n+e[r+a];return s}function est(e,t,n,i,o,r,s,a){s*=o;let l;if(r)for(l=0;l0;--l)e[s+l]=a/i|0,a-=e[s+l]*i,i/=n;e[s+l]=a}var Da=a0;function HV(e){e=e??z.EMPTY_OBJECT,this._tilingScheme=e.tilingScheme,c(this._tilingScheme)||(this._tilingScheme=new Ki({ellipsoid:e.ellipsoid??re.default})),this._levelZeroMaximumGeometricError=rs.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,64,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new ye}Object.defineProperties(HV.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(){}}});HV.prototype.requestTileGeometry=function(e,t,n,i){return Promise.resolve(new Da({buffer:new Uint8Array(16*16),width:16,height:16}))};HV.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<0&&(Ve=v?P.clippingPlanesState:0);let Ie=0;c(N)&&N.length>0&&(Ie=F?N.clippingPolygonsState:0);let Ze=n.surfaceShader;if(c(Ze)&&Ze.numberOfDayTextures===i&&Ze.flags===_e&&Ze.material===this.material&&Ze.clippingShaderState===Ve&&Ze.clippingPolygonShaderState===Ie)return Ze.shaderProgram;let De=this._shadersByTexturesFlags[i];if(c(De)||(De=this._shadersByTexturesFlags[i]=[]),Ze=De[_e],!c(Ze)||Ze.material!==this.material||Ze.clippingShaderState!==Ve||Ze.clippingPolygonShaderState!==Ie){let Ke=this.baseVertexShaderSource.clone(),rt=this.baseFragmentShaderSource.clone();Ve!==0&&rt.sources.unshift(c0(P,t.context)),Ie!==0&&(rt.sources.unshift(lst(t.context)),Ke.sources.unshift(dst(t.context))),Ke.defines.push(K),rt.defines.push(`TEXTURE_UNITS ${i}`,ne,Ce),o&&rt.defines.push("APPLY_BRIGHTNESS"),r&&rt.defines.push("APPLY_CONTRAST"),s&&rt.defines.push("APPLY_HUE"),a&&rt.defines.push("APPLY_SATURATION"),l&&rt.defines.push("APPLY_GAMMA"),d&&rt.defines.push("APPLY_ALPHA"),u&&rt.defines.push("APPLY_DAY_NIGHT_ALPHA"),p&&rt.defines.push("HAS_WATER_MASK"),y&&(rt.defines.push("SHOW_REFLECTIVE_OCEAN"),Ke.defines.push("SHOW_REFLECTIVE_OCEAN")),h&&rt.defines.push("SHOW_OCEAN_WAVES"),A&&rt.defines.push("APPLY_COLOR_TO_ALPHA"),O&&(Ke.defines.push("UNDERGROUND_COLOR"),rt.defines.push("UNDERGROUND_COLOR")),H&&(Ke.defines.push("TRANSLUCENT"),rt.defines.push("TRANSLUCENT")),g&&(R?(Ke.defines.push("ENABLE_VERTEX_LIGHTING"),rt.defines.push("ENABLE_VERTEX_LIGHTING")):(Ke.defines.push("ENABLE_DAYNIGHT_SHADING"),rt.defines.push("ENABLE_DAYNIGHT_SHADING"))),x&&(Ke.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),rt.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),S&&(Ke.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"),rt.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"))),V&&(Ke.defines.push("GROUND_ATMOSPHERE"),rt.defines.push("GROUND_ATMOSPHERE"),Z&&(Ke.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"),rt.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"))),Ke.defines.push("INCLUDE_WEB_MERCATOR_Y"),rt.defines.push("INCLUDE_WEB_MERCATOR_Y"),I&&(Ke.defines.push("FOG"),rt.defines.push("FOG")),f&&rt.defines.push("APPLY_SPLIT"),v&&rt.defines.push("ENABLE_CLIPPING_PLANES"),F&&(rt.defines.push("ENABLE_CLIPPING_POLYGONS"),Ke.defines.push("ENABLE_CLIPPING_POLYGONS"),N.inverse&&rt.defines.push("CLIPPING_INVERSE"),rt.defines.push(`CLIPPING_POLYGON_REGIONS_LENGTH ${N.extentsCount}`),Ke.defines.push(`CLIPPING_POLYGON_REGIONS_LENGTH ${N.extentsCount}`)),X&&rt.defines.push("COLOR_CORRECT"),W&&rt.defines.push("HIGHLIGHT_FILL_TILE"),k&&Ke.defines.push("GEODETIC_SURFACE_NORMALS"),B&&Ke.defines.push("EXAGGERATION");let Xt=` vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend) { vec4 color = initialColor; `;G&&(Xt+=` vec4 cutoutAndColorResult; bool texelUnclipped; `);for(let qe=0;qe0?n.raiseEvent(l):c(t)&&console.log(`An error occurred in "${t.constructor.name}": ${qh(i)}`),l};vO.reportSuccess=function(e){c(e)&&(e.timesRetried=-1)};var Ro=vO;var jEi=_(T(),1),fst={UNLOADED:0,TRANSITIONING:1,RECEIVED:2,TEXTURE_LOADED:3,READY:4,FAILED:5,INVALID:6,PLACEHOLDER:7},ci=Object.freeze(fst);var $Ei=_(T(),1),hst={START:0,LOADING:1,DONE:2,FAILED:3},$s=Object.freeze(hst);var tXi=_(T(),1),pst={FAILED:0,UNLOADED:1,RECEIVING:2,RECEIVED:3,TRANSFORMING:4,TRANSFORMED:5,READY:6},uo=Object.freeze(pst);function sr(){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=uo.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(sr.prototype,{eligibleForUnloading:{get:function(){let e=this.terrainState,n=!(e===uo.RECEIVING||e===uo.TRANSFORMING),i=this.imagery;for(let o=0,r=i.length;n&&o=0&&(u=V)}return u!==Number.MAX_VALUE?bn.getPoint(e,u,o):void 0};sr.prototype.freeResources=function(){c(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0),this.terrainData=void 0,this.terrainState=uo.UNLOADED,this.mesh=void 0,this.fill=this.fill&&this.fill.destroy();let e=this.imagery;for(let t=0,n=e.length;t=uo.RECEIVED&&s.waterMaskTexture===void 0&&n.hasWaterMask)if(s.terrainData.waterMask!==void 0)Gst(t.context,s);else{let d=s._findAncestorTileWithTerrainData(e);c(d)&&c(d.data.waterMaskTexture)&&(s.waterMaskTexture=d.data.waterMaskTexture,++s.waterMaskTexture.referenceCount,s._computeWaterMaskTranslationAndScale(e,d,s.waterMaskTranslationAndScale))}}function Sst(e,t,n,i,o,r,s){let a=t.parent;if(!a){t.state=$s.FAILED;return}let l=a.data.terrainData,d=a.x,u=a.y,f=a.level;if(!c(l))return;let p=l.upsample(i.tilingScheme,d,u,f,o,r,s);c(p)&&(e.terrainState=uo.RECEIVING,Promise.resolve(p).then(function(y){c(y)&&(e.terrainData=y,e.terrainState=uo.RECEIVED)}).catch(function(){e.terrainState=uo.FAILED}))}function Cst(e,t,n,i,o){function r(l){if(!c(l)){e.terrainState=uo.UNLOADED,e.request=void 0;return}e.terrainData=l,e.terrainState=uo.RECEIVED,e.request=void 0}function s(l){if(e.request.state===jn.CANCELLED){e.terrainData=void 0,e.terrainState=uo.UNLOADED,e.request=void 0;return}e.terrainState=uo.FAILED,e.request=void 0;let d=`Failed to obtain terrain tile X: ${n} Y: ${i} Level: ${o}. Error message: "${l}"`;t._requestError=Ro.reportError(t._requestError,t,t.errorEvent,d,n,i,o),t._requestError.retry&&a()}function a(){let l=new Jo({throttle:!1,throttleByServer:!0,type:us.TERRAIN});e.request=l;let d=t.requestTileGeometry(n,i,o,l);c(d)?(e.terrainState=uo.RECEIVING,Promise.resolve(d).then(function(u){r(u)}).catch(function(u){s(u)})):(e.terrainState=uo.UNLOADED,e.request=void 0)}a()}var Vst={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0,throttle:!0};function Lst(e,t,n,i,o,r){let s=n.tilingScheme,a=Vst;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);c(d)&&(e.terrainState=uo.TRANSFORMING,Promise.resolve(d).then(function(u){e.mesh=u,e.terrainState=uo.TRANSFORMED}).catch(function(){e.terrainState=uo.FAILED}))}sr._createVertexArrayForMesh=function(e,t){let n=t.vertices,i=_t.createVertexBuffer({context:e,typedArray:n,usage:Ne.STATIC_DRAW}),o=t.encoding.getAttributes(i),r=t.indices.indexBuffers||{},s=r[e.id];if(!c(s)||s.isDestroyed()){let a=t.indices;s=_t.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 ni({context:e,attributes:o,indexBuffer:s})};sr._freeVertexArray=function(e){if(c(e)){let t=e.indexBuffer;e.isDestroyed()||e.destroy(),c(t)&&!t.isDestroyed()&&c(t.referenceCount)&&(--t.referenceCount,t.referenceCount===0&&t.destroy())}};function Zst(e,t,n,i,o,r,s){e.vertexArray=sr._createVertexArrayForMesh(t,e.mesh),e.terrainState=uo.READY,e.fill=e.fill&&e.fill.destroy(s)}function Rst(e){let t=e.cache.tile_waterMaskData;if(!c(t)){let n=Pt.create({context:e,pixelFormat:ke.LUMINANCE,pixelDatatype:Ue.UNSIGNED_BYTE,source:{arrayBufferView:new Uint8Array([255]),width:1,height:1}});n.referenceCount=1;let i=new en({wrapS:xn.CLAMP_TO_EDGE,wrapT:xn.CLAMP_TO_EDGE,minificationFilter:Jt.LINEAR,magnificationFilter:di.LINEAR});t={allWaterTexture:n,sampler:i,destroy:function(){this.allWaterTexture.destroy()}},e.cache.tile_waterMaskData=t}return t}function Gst(e,t){let n=t.terrainData.waterMask,i=Rst(e),o,r=n.length;if(r===1)if(n[0]!==0)o=i.allWaterTexture;else return;else{let s=Math.sqrt(r);o=Pt.create({context:e,pixelFormat:ke.LUMINANCE,pixelDatatype:Ue.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)}sr.prototype._findAncestorTileWithTerrainData=function(e){let t=e.parent;for(;c(t)&&(!c(t.data)||!c(t.data.terrainData)||t.data.terrainData.wasCreatedByUpsampling());)t=t.parent;return t};sr.prototype._computeWaterMaskTranslationAndScale=function(e,t,n){let i=t.rectangle,o=e.rectangle,r=o.width,s=o.height,a=r/i.width,l=s/i.height;return n.x=a*(o.west-i.west)/r,n.y=l*(o.south-i.south)/s,n.z=a,n.w=l,n};var um=sr;var T2i=_(T(),1);var VPi=_(T(),1);var yPi=_(T(),1);var WIi=_(T(),1);var MXi=_(T(),1);function Zg(e){if(e=e??z.EMPTY_OBJECT,this._ellipsoid=e.ellipsoid??re.default,this._numberOfLevelZeroTilesX=e.numberOfLevelZeroTilesX??1,this._numberOfLevelZeroTilesY=e.numberOfLevelZeroTilesY??1,this._projection=new Wi(this._ellipsoid),c(e.rectangleSouthwestInMeters)&&c(e.rectangleNortheastInMeters))this._rectangleSouthwestInMeters=e.rectangleSouthwestInMeters,this._rectangleNortheastInMeters=e.rectangleNortheastInMeters;else{let i=this._ellipsoid.maximumRadius*Math.PI;this._rectangleSouthwestInMeters=new D(-i,-i),this._rectangleNortheastInMeters=new D(i,i)}let t=this._projection.unproject(this._rectangleSouthwestInMeters),n=this._projection.unproject(this._rectangleNortheastInMeters);this._rectangle=new de(t.longitude,t.latitude,n.longitude,n.latitude)}Object.defineProperties(Zg.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},rectangle:{get:function(){return this._rectangle}},projection:{get:function(){return this._projection}}});Zg.prototype.getNumberOfXTilesAtLevel=function(e){return this._numberOfLevelZeroTilesX<=o&&(h=o-1);let g=y/d|0;return g>=r&&(g=r-1),c(n)?(n.x=h,n.y=g,n):new D(h,g)};var ss=Zg;var DXi=_(T(),1);var Jj,Cye="AAPTxy8BH1VEsoebNVZXo8HurEOF051kAEKlhkOhBEc9BmRwxo7rIWoXrG5RJkAAlrdL0n_Ha7z7WbgHT-DpRd_LxLSeba-Kg8HsK3kJVUF2iiOVOza8OZ-DIdJzjyBZ9IIc5W0JagV3wyuZ9CKE3RHRSADOw-9FbeeUyfJA8iS2mKcK8768q4g11vlHUzVYFhWoKctRWWeG3Amwm6ez2n3vMc1fTSqDdbFP2O6x5eslQDE.AT1_SOxgo20E",zV={};zV.defaultAccessToken=Cye;zV.defaultWorldImageryServer=new Ge({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/World_Imagery/MapServer"});zV.defaultWorldHillshadeServer=new Ge({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer"});zV.defaultWorldOceanServer=new Ge({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer"});zV.getDefaultTokenCredit=function(e){if(e===Cye){if(!c(Jj)){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/.';Jj=new Ct(t,!0)}return Jj}};var Jd=zV;var QXi=_(T(),1);function Qj(e){if(e=e??z.EMPTY_OBJECT,!c(e.missingImageUrl))throw new L("options.missingImageUrl is required.");if(!c(e.pixelsToCheck))throw new L("options.pixelsToCheck is required.");this._pixelsToCheck=e.pixelsToCheck,this._missingImagePixels=void 0,this._missingImageByteLength=void 0,this._isReady=!1;let t=Ge.createIfNeeded(e.missingImageUrl),n=this;function i(r){c(r.blob)&&(n._missingImageByteLength=r.blob.size);let s=Rm(r);if(e.disableCheckIfAllPixelsAreTransparent){let a=!0,l=r.width,d=e.pixelsToCheck;for(let u=0,f=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)}Qj.prototype.isReady=function(){return this._isReady};Qj.prototype.shouldDiscardImage=function(e){if(!this._isReady)throw new L("shouldDiscardImage must not be called before the discard policy is ready.");let t=this._pixelsToCheck,n=this._missingImagePixels;if(!c(n)||c(e.blob)&&e.blob.size!==this._missingImageByteLength)return!1;let i=Rm(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)}c(n)&&(this.name=e[n])};jj.prototype.configureDescriptionFromProperties=function(e){function t(n){let i='';for(let o in n)if(n.hasOwnProperty(o)){let r=n[o];c(r)&&(typeof r=="object"?i+=``:i+=``)}return i+="
${o}${t(r)}
${o}${r}
",i}this.description=t(e)};var Af=jj;var sIi=_(T(),1);function KV(){L.throwInstantiationError()}Object.defineProperties(KV.prototype,{rectangle:{get:L.throwInstantiationError},tileWidth:{get:L.throwInstantiationError},tileHeight:{get:L.throwInstantiationError},maximumLevel:{get:L.throwInstantiationError},minimumLevel:{get:L.throwInstantiationError},tilingScheme:{get:L.throwInstantiationError},tileDiscardPolicy:{get:L.throwInstantiationError},errorEvent:{get:L.throwInstantiationError},credit:{get:L.throwInstantiationError},proxy:{get:L.throwInstantiationError},hasAlphaChannel:{get:L.throwInstantiationError}});KV.prototype.getTileCredits=function(e,t,n){L.throwInstantiationError()};KV.prototype.requestImage=function(e,t,n,i){L.throwInstantiationError()};KV.prototype.pickFeatures=function(e,t,n,i,o){L.throwInstantiationError()};var Est=/\.ktx2$/i;KV.loadImage=function(e,t){C.defined("url",t);let n=Ge.createIfNeeded(t);return Est.test(n.url)?Ll(n):c(e)&&c(e.tileDiscardPolicy)?n.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}):n.fetchImage({preferImageBitmap:!0,flipY:!0})};var fl=KV;var cIi=_(T(),1),Xst={SATELLITE:1,OCEANS:2,HILLSHADE:3},Mf=Object.freeze(Xst);function Vye(e){this.useTiles=e.usePreCachedTilesIfAvailable??!0;let t=e.ellipsoid;this.tilingScheme=e.tilingScheme??new Ki({ellipsoid:t}),this.rectangle=e.rectangle??this.tilingScheme.rectangle,this.ellipsoid=t;let n=e.credit;typeof n=="string"&&(n=new Ct(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}Vye.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&&!c(this.tileDiscardPolicy)&&(e._tileDiscardPolicy=new $v({missingImageUrl:Lye(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 Ist(e,t){let n=e.tileInfo;if(!c(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 ss({ellipsoid:t.ellipsoid});else if(e.tileInfo.spatialReference.wkid===4326)t.tilingScheme=new Ki({ellipsoid:t.ellipsoid});else{let i=`Tile spatial reference WKID ${e.tileInfo.spatialReference.wkid} is not supported.`;throw new le(i)}if(t.maximumLevel=e.tileInfo.lods.length-1,c(e.fullExtent)){if(c(e.fullExtent.spatialReference)&&c(e.fullExtent.spatialReference.wkid))if(e.fullExtent.spatialReference.wkid===102100||e.fullExtent.spatialReference.wkid===102113){let i=new Wi,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 de(r.longitude,r.latitude,s.longitude,s.latitude)}else if(e.fullExtent.spatialReference.wkid===4326)t.rectangle=de.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 le(i)}}else t.rectangle=t.tilingScheme.rectangle;t.useTiles=!0}c(e.copyrightText)&&e.copyrightText.length>0&&(c(t.credit)?t.tileCredits=[new Ct(e.copyrightText)]:t.credit=new Ct(e.copyrightText))}function Wst(e,t){let n=`An error occurred while accessing ${e.url}`;throw c(t)&&c(t.message)&&(n+=`: ${t.message}`),new le(n)}async function wst(e,t){let n=e.getDerivedResource({queryParameters:{f:"json"}});try{let i=await n.fetchJson();Ist(i,t)}catch(i){Wst(e,i)}}function tp(e){e=e??z.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 Ki({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 Ct(t)),this.enablePickFeatures=e.enablePickFeatures??!0,this._errorEvent=new ye}tp.fromBasemapType=async function(e,t){C.defined("style",e),t=t??z.EMPTY_OBJECT;let n,i,o;switch(e){case Mf.SATELLITE:{n=t.token??Jd.defaultAccessToken,i=Ge.createIfNeeded(Jd.defaultWorldImageryServer),i.appendForwardSlash();let r=Jd.getDefaultTokenCredit(n);c(r)&&(o=Ct.clone(r))}break;case Mf.OCEANS:{n=t.token??Jd.defaultAccessToken,i=Ge.createIfNeeded(Jd.defaultWorldOceanServer),i.appendForwardSlash();let r=Jd.getDefaultTokenCredit(n);c(r)&&(o=Ct.clone(r))}break;case Mf.HILLSHADE:{n=t.token??Jd.defaultAccessToken,i=Ge.createIfNeeded(Jd.defaultWorldHillshadeServer),i.appendForwardSlash();let r=Jd.getDefaultTokenCredit(n);c(r)&&(o=Ct.clone(r))}break;default:throw new L(`Unsupported basemap type: ${e}`)}return tp.fromUrl(i,{...t,token:n,credit:o,usePreCachedTilesIfAvailable:!0})};function Lye(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),l={bbox:`${s.west},${s.south},${s.east},${s.north}`,size:`${e._tileWidth},${e._tileHeight}`,format:"png32",transparent:!0,f:"image"};e._tilingScheme.projection instanceof Xi?(l.bboxSR=4326,l.imageSR=4326):(l.bboxSR=3857,l.imageSR=3857),e.layers&&(l.layers=`show:${e.layers}`),r=e._resource.getDerivedResource({url:"export",request:o,queryParameters:l})}return r}Object.defineProperties(tp.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}}});tp.fromUrl=async function(e,t){C.defined("url",e),t=t??z.EMPTY_OBJECT;let n=Ge.createIfNeeded(e);n.appendForwardSlash(),c(t.token)&&n.setQueryParameters({token:t.token});let i=new tp(t);i._resource=n;let o=new Vye(t);return(t.usePreCachedTilesIfAvailable??!0)&&await wst(n,o),o.build(i),i};tp.prototype.getTileCredits=function(e,t,n){return this._tileCredits};tp.prototype.requestImage=function(e,t,n,i){return fl.loadImage(this,Lye(this,e,t,n,i))};tp.prototype.pickFeatures=function(e,t,n,i,o){if(!this.enablePickFeatures)return;let r=this._tilingScheme.tileXYToNativeRectangle(e,t,n),s,a,l;if(this._tilingScheme.projection instanceof Xi)s=w.toDegrees(i),a=w.toDegrees(o),l="4326";else{let p=this._tilingScheme.projection.project(new pe(i,o,0));s=p.x,a=p.y,l="3857"}let d="visible";c(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:l,layers:d};return this._resource.getDerivedResource({url:"identify",queryParameters:u}).fetchJson().then(function(p){let y=[],h=p.results;if(!c(h))return y;for(let g=0;go.coverageAreas?.some(r=>c(r.bbox)))),t.attributionList=i}function Fst(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw c(t)&&c(t.message)&&(i+=`: ${t.message}`),Ro.reportError(void 0,n,c(n)?n._errorEvent:void 0,i,void 0,void 0,void 0,t),new le(i)}async function Ast(e,t,n){let i=e.url,o=Ws._metadataCache[i];c(o)||(o=e.fetchJsonp("jsonp"),Ws._metadataCache[i]=o);try{let r=await o;return vst(r,t)}catch(r){Fst(e,r,n)}}function Ws(e){e=e??z.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??JV.AERIAL,this._mapLayer=e.mapLayer,this._culture=e.culture??"",this._key=e.key,this._tileDiscardPolicy=e.tileDiscardPolicy,c(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new QV),this._proxy=e.proxy,this._credit=new Ct(``),this._tilingScheme=new ss({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 ye}Object.defineProperties(Ws.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 c(this.mapLayer)}}});Ws.fromUrl=async function(e,t){t=t??z.EMPTY_OBJECT,C.defined("url",e),C.defined("options.key",t.key);let n=t.tileProtocol;c(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??JV.AERIAL,o=Ge.createIfNeeded(e);o.appendForwardSlash();let r={incl:"ImageryProviders",key:t.key,uriScheme:n};c(t.mapLayer)&&(r.mapLayer=t.mapLayer),c(t.culture)&&(r.culture=t.culture);let s=o.getDerivedResource({url:`REST/v1/Imagery/Metadata/${i}`,queryParameters:r}),a=new Ws(t);a._resource=o;let l=new Zye(t);return await Ast(s,l),l.build(a),a};var Mst=new de;Ws.prototype.getTileCredits=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(e,t,n,Mst);return Ust(this._attributionList,n,i)};Ws.prototype.requestImage=function(e,t,n,i){let o=fl.loadImage(this,Nst(this,e,t,n,i));if(c(o))return o.catch(function(r){return c(r.blob)&&r.blob.size===0?QV.EMPTY_IMAGE:Promise.reject(r)})};Ws.prototype.pickFeatures=function(e,t,n,i,o){};Ws.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<=0;--o){let r=1<=f.zoomMin&&t<=f.zoomMax){let p=de.intersection(n,f.bbox,kst);c(p)&&(l=!0)}}l&&i.push(s.credit)}return i}Ws._metadataCache={};var tF=Ws;var wWi=_(T(),1);var yWi=_(T(),1);var Rye=/{[^}]+}/g,Gye={x:Yst,y:zst,z:Qst,s:jst,reverseX:Hst,reverseY:Kst,reverseZ:Jst,westDegrees:qst,southDegrees:$st,eastDegrees:eat,northDegrees:tat,westProjected:nat,southProjected:iat,eastProjected:oat,northProjected:rat,width:sat,height:aat},Ost=St(Gye,{i:cat,j:lat,reverseI:dat,reverseJ:uat,longitudeDegrees:fat,latitudeDegrees:hat,longitudeProjected:pat,latitudeProjected:bat,format:gat});function nF(e){e=e??z.EMPTY_OBJECT,this._errorEvent=new ye,C.defined("options.url",e.url);let t=Ge.createIfNeeded(e.url),n=Ge.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():c(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 ss({ellipsoid:e.ellipsoid}),this._rectangle=e.rectangle??this._tilingScheme.rectangle,this._rectangle=de.intersection(this._rectangle,this._tilingScheme.rectangle),this._tileDiscardPolicy=e.tileDiscardPolicy;let o=e.credit;typeof o=="string"&&(o=new Ct(o)),this._credit=o,this._hasAlphaChannel=e.hasAlphaChannel??!0;let r=e.customTags,s=St(Gye,r),a=St(Ost,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(nF.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}}});nF.prototype.getTileCredits=function(e,t,n){};nF.prototype.requestImage=function(e,t,n,i){return fl.loadImage(this,Dst(this,e,t,n,i))};nF.prototype.pickFeatures=function(e,t,n,i,o){if(!this.enablePickFeatures||!c(this._pickFeaturesResource)||this._getFeatureInfoFormats.length===0)return;let r=0,s=this;function a(d,u){return d.callback(u)}function l(){if(r>=s._getFeatureInfoFormats.length)return Promise.resolve([]);let d=s._getFeatureInfoFormats[r],u=Bst(s,e,t,n,i,o,d.format);return++r,d.type==="json"?u.fetchJson().then(d.callback).catch(l):d.type==="xml"?u.fetchXML().then(d.callback).catch(l):d.type==="text"||d.type==="html"?u.fetchText().then(d.callback).catch(l):u.fetch({responseType:d.format}).then(a.bind(void 0,d)).catch(l)}return l()};var AO=!1,Qd=new de,MO=!1,iF=new de;function Dst(e,t,n,i,o){AO=!1,MO=!1;let r=e._resource,s=r.getUrlComponent(!0),a=e._tags,l={},d=s.match(Rye);return c(d)&&d.forEach(function(u){let f=u.substring(1,u.length-1);c(a[f])&&(l[f]=a[f](e,t,n,i))}),r.getDerivedResource({request:o,templateValues:l})}var qj=!1,qV=new D,$j=!1;function Bst(e,t,n,i,o,r,s){AO=!1,MO=!1,qj=!1,$j=!1;let a=e._pickFeaturesResource,l=a.getUrlComponent(!0),d=e._pickFeaturesTags,u={},f=l.match(Rye);return c(f)&&f.forEach(function(p){let y=p.substring(1,p.length-1);c(d[y])&&(u[y]=d[y](e,t,n,i,o,r,s))}),a.getDerivedResource({templateValues:u})}function $V(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 Yst(e,t,n,i){return $V(e,"{x}",t)}function Hst(e,t,n,i){let o=e.tilingScheme.getNumberOfXTilesAtLevel(i)-t-1;return $V(e,"{reverseX}",o)}function zst(e,t,n,i){return $V(e,"{y}",n)}function Kst(e,t,n,i){let o=e.tilingScheme.getNumberOfYTilesAtLevel(i)-n-1;return $V(e,"{reverseY}",o)}function Jst(e,t,n,i){let o=e.maximumLevel,r=c(o)&&it.rectangle.east&&(e.east=t.rectangle.east),e.southt.rectangle.north&&(e.north=t.rectangle.north),e}function Xye(e,t,n){let i=e.positionToTileXY(de.southwest(t),n),o=e.positionToTileXY(de.northeast(t),n);return(Math.abs(o.x-i.x)+1)*(Math.abs(o.y-i.y)+1)>4?0:n}mm._metadataSuccess=function(e,t,n,i,o){let r=/tileformat/i,s=/tileset/i,a=/tilesets/i,l=/boundingbox/i,d,u,f,p=[],y=e.childNodes[0].childNodes;for(let P=0;P`),this._tilingScheme=void 0,this._version=void 0,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=e.maximumLevel,this._errorEvent=new ye}Object.defineProperties(ql.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}}});ql.fromUrl=async function(e,t,n){C.defined("url",e),C.defined("channel",t),n=n??{};let i=n.path??"/default_map",o=Ge.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 Iye(n);s.channel=t,await Tat(r,s);let a=new ql(n);return s.build(a),a._resource=o,a._url=e,a._path=i,a};ql.prototype.getTileCredits=function(e,t,n){};ql.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 fl.loadImage(this,o)};ql.prototype.pickFeatures=function(e,t,n,i,o){};ql._logoUrl=void 0;Object.defineProperties(ql,{logoUrl:{get:function(){return c(ql._logoUrl)||(ql._logoUrl=on("Assets/Images/google_earth_credit.png")),ql._logoUrl},set:function(e){C.defined("value",e),ql._logoUrl=e}}});var oF=ql;var twi=_(T(),1);var Sat=/\/$/,Wye=new Ct('© Mapbox © OpenStreetMap Improve this map');function eL(e){e=e??z.EMPTY_OBJECT;let t=e.mapId;if(!c(t))throw new L("options.mapId is required.");let n=e.accessToken;if(!c(n))throw new L("options.accessToken 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;let i=Ge.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();Sat.test(r)||(r+="/"),r+=`${t}/{z}/{x}/{y}${this._format}`,i.url=r,i.setQueryParameters({access_token:n});let s;c(e.credit)?(s=e.credit,typeof s=="string"&&(s=new Ct(s))):s=Wye,this._resource=i,this._imageryProvider=new Ba({url:i,credit:s,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(eL.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}}});eL.prototype.getTileCredits=function(e,t,n){};eL.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};eL.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};eL._defaultCredit=Wye;var rF=eL;var hwi=_(T(),1);function PT(e){e=e??z.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??de.MAX_VALUE,n=new Ki({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 ye;let i=e.credit;typeof i=="string"&&(i=new Ct(i)),this._credit=i,C.defined("options.url",e.url);let o=Ge.createIfNeeded(e.url);this._resource=o,C.typeOf.number("options.tileWidth",e.tileWidth),C.typeOf.number("options.tileHeight",e.tileHeight),this._tileWidth=e.tileWidth,this._tileHeight=e.tileHeight}Object.defineProperties(PT.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 Cat(e,t,n,i){let o=`Failed to load image ${e.url}`;c(t)&&c(t.message)&&(o+=`: ${t.message}`);let r=Ro.reportError(i,n,c(n)?n._errorEvent:void 0,o,0,0,0,t);if(r.retry)return t4(e,n,r);throw c(n)&&(n._hasError=!0),new le(o)}async function t4(e,t,n){try{return await fl.loadImage(null,e)}catch(i){return Cat(e,i,t,n)}}PT.fromUrl=async function(e,t){C.defined("url",e);let n=Ge.createIfNeeded(e),i=await t4(n);t=t??z.EMPTY_OBJECT;let o=new PT({...t,url:e,tileWidth:i.width,tileHeight:i.height});return o._image=i,o};PT.prototype.getTileCredits=function(e,t,n){};PT.prototype.requestImage=async function(e,t,n,i){if(!this._hasError&&!c(this._image)){let o=await t4(this._resource,this);return this._image=o,Ro.reportSuccess(this._errorEvent),o}return this._image};PT.prototype.pickFeatures=function(e,t,n,i,o){};var sF=PT;var Uwi=_(T(),1);var Twi=_(T(),1);function Vat(e,t,n){if(!c(e))throw new L("type is required.");if(this.type=e,!c(t))if(e==="json")t="application/json";else if(e==="xml")t="text/xml";else if(e==="html")t="text/html";else if(e==="text")t="text/plain";else throw new L('format is required when type is not "json", "xml", "html", or "text".');if(this.format=t,!c(n))if(e==="json")n=Lat;else if(e==="xml")n=Eat;else if(e==="html")n=wye;else if(e==="text")n=wye;else throw new L('callback is required when type is not "json", "xml", "html", or "text".');this.callback=n}function Lat(e){let t=[],n=e.features;for(let i=0;i0)for(let r=0;r\s*<\/body>/im,Fat=//im,Aat=/([\s\S]*)<\/title>/im;function wye(e){if(vat.test(e)||Fat.test(e))return;let t,n=Aat.exec(e);n&&n.length>1&&(t=n[1]);let i=new Af;return i.name=t,i.description=e,i.data=e,[i]}var vT=Vat;var Xwi=_(T(),1);function aF(e){e=e??z.EMPTY_OBJECT,C.typeOf.object("options.clock",e.clock),C.typeOf.object("options.times",e.times),C.typeOf.func("options.requestImageFunction",e.requestImageFunction),C.typeOf.func("options.reloadFunction",e.reloadFunction),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(aF.prototype,{clock:{get:function(){return this._clock},set:function(e){if(!c(e))throw new L("value is required.");this._clock!==e&&(this._clock=e,this._clockOnTick(e),this._reloadFunction())}},times:{get:function(){return this._times},set:function(e){if(!c(e))throw new L("value is required.");this._times!==e&&(this._times=e,this._clockOnTick(this._clock),this._reloadFunction())}},currentInterval:{get:function(){return this._times.get(this._currentIntervalIndex)}}});aF.prototype.getFromCache=function(e,t,n,i){let o=Pye(e,t,n),r,s=this._tileCache[this._currentIntervalIndex];if(c(s)&&c(s[o])){let a=s[o];r=a.promise.catch(function(l){throw i.state=a.request.state,l}),delete s[o]}return r};aF.prototype.checkApproachingInterval=function(e,t,n,i){let o=Pye(e,t,n),r=this._tilesRequestedForInterval,s=vye(this),a={key:o,priorityFunction:i.priorityFunction};(!c(s)||!Fye(this,a,s))&&r.push(a),r.length>=512&&r.splice(0,256)};aF.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=vye(this);if(c(r)){let s=this._tilesRequestedForInterval,a=!0;for(;a&&s.length!==0;){let l=s.pop();a=Fye(this,l,r),a||s.push(l)}}};function Pye(e,t,n){return`${e}-${t}-${n}`}function Mat(e){let t=e.split("-");if(t.length===3)return{x:Number(t[0]),y:Number(t[1]),level:Number(t[2])}}function vye(e){let t=e._times;if(!c(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 l=t.get(a);return r>0?(s=ee.secondsDifference(l.stop,i),++a):(s=ee.secondsDifference(l.start,i),--a),s/=r,a>=0&&s<=5?t.get(a):void 0}function Fye(e,t,n){let i=e._times.indexOf(n.start),o=e._tileCache,r=o[i];c(r)||(r=o[i]={});let s=t.key;if(c(r[s]))return!0;let a=Mat(s),l=new Jo({throttle:!1,throttleByServer:!0,type:us.IMAGERY,priorityFunction:t.priorityFunction}),d=e._requestImageFunction(a.x,a.y,a.level,l,n);return c(d)?(r[s]={promise:d,request:l},!0):!1}var FT=aF;var Nat=[3034,3035,3042,3043,3044],kat=[4471,4559];function Nf(e){if(e=e??z.EMPTY_OBJECT,!c(e.url))throw new L("options.url is required.");if(!c(e.layers))throw new L("options.layers is required.");if(c(e.times)&&!c(e.clock))throw new L("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=Ge.createIfNeeded(e.url),n=Ge.createIfNeeded(this._getFeatureInfoUrl);t.setQueryParameters(Nf.DefaultParameters,!0),n.setQueryParameters(Nf.GetFeatureInfoDefaultParameters,!0),c(e.parameters)&&t.setQueryParameters(Aye(e.parameters)),c(e.getFeatureInfoParameters)&&n.setQueryParameters(Aye(e.getFeatureInfoParameters));let i=this;this._reload=void 0,c(e.times)&&(this._timeDynamicImagery=new FT({clock:e.clock,times:e.times,requestImageFunction:function(s,a,l,d,u){return Mye(i,s,a,l,d,u)},reloadFunction:function(){c(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 Wi?"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&&!kat.includes(a)||Nat.includes(a))&&(o.bbox="{southProjected},{westProjected},{northProjected},{eastProjected}")}}else o.srs=e.srs??(e.tilingScheme&&e.tilingScheme.projection instanceof Wi?"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 Ba({url:t,pickFeaturesUrl:n,tilingScheme:e.tilingScheme??new Ki({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??Nf.DefaultGetFeatureInfoFormats,enablePickFeatures:e.enablePickFeatures})}function Mye(e,t,n,i,o,r){let s=c(r)?r.data:void 0,a=e._tileProvider;return c(s)&&a._resource.setQueryParameters(s),a.requestImage(t,n,i,o)}function Uat(e,t,n,i,o,r,s){let a=c(s)?s.data:void 0,l=e._tileProvider;return c(a)&&l._pickFeaturesResource.setQueryParameters(a),l.pickFeatures(t,n,i,o,r)}Object.defineProperties(Nf.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}}});Nf.prototype.getTileCredits=function(e,t,n){return this._tileProvider.getTileCredits(e,t,n)};Nf.prototype.requestImage=function(e,t,n,i){let o,r=this._timeDynamicImagery,s;return c(r)&&(s=r.currentInterval,o=r.getFromCache(e,t,n,i)),c(o)||(o=Mye(this,e,t,n,i,s)),c(o)&&c(r)&&r.checkApproachingInterval(e,t,n,i),o};Nf.prototype.pickFeatures=function(e,t,n,i,o){let r=this._timeDynamicImagery,s=c(r)?r.currentInterval:void 0;return Uat(this,e,t,n,i,o,s)};Nf.DefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetMap",styles:"",format:"image/jpeg"});Nf.GetFeatureInfoDefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetFeatureInfo"});Nf.DefaultGetFeatureInfoFormats=Object.freeze([Object.freeze(new vT("json","application/json")),Object.freeze(new vT("xml","text/xml")),Object.freeze(new vT("text","text/html"))]);function Aye(e){let t={};for(let n in e)e.hasOwnProperty(n)&&(t[n.toLowerCase()]=e[n]);return t}var cF=Nf;var ePi=_(T(),1);var Oat=Object.freeze({service:"WMTS",version:"1.0.0",request:"GetTile"});function lF(e){if(e=e??z.EMPTY_OBJECT,!c(e.url))throw new L("options.url is required.");if(!c(e.layer))throw new L("options.layer is required.");if(!c(e.style))throw new L("options.style is required.");if(!c(e.tileMatrixSetID))throw new L("options.tileMatrixSetID is required.");if(c(e.times)&&!c(e.clock))throw new L("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;let t=Ge.createIfNeeded(e.url),n=e.style,i=e.tileMatrixSetID,o=t.url,r=o.match(/{/g);if(!c(r)||r.length===1&&/{s}/.test(o))t.setQueryParameters(Oat),this._useKvp=!0;else{let f={style:n,Style:n,TileMatrixSet:i};t.setTemplateValues(f),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=c(e.tilingScheme)?e.tilingScheme:new ss({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,c(e.times)&&(this._timeDynamicImagery=new FT({clock:e.clock,times:e.times,requestImageFunction:function(f,p,y,h,g){return Nye(s,f,p,y,h,g)},reloadFunction:function(){c(s._reload)&&s._reload()}}));let a=this._tilingScheme.positionToTileXY(de.southwest(this._rectangle),this._minimumLevel),l=this._tilingScheme.positionToTileXY(de.northeast(this._rectangle),this._minimumLevel),d=(Math.abs(l.x-a.x)+1)*(Math.abs(l.y-a.y)+1);if(d>4)throw new L(`The imagery provider's rectangle and minimumLevel indicate that there are ${d} tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported.`);this._errorEvent=new ye;let u=e.credit;this._credit=typeof u=="string"?new Ct(u):u,this._subdomains=e.subdomains,Array.isArray(this._subdomains)?this._subdomains=this._subdomains.slice():c(this._subdomains)&&this._subdomains.length>0?this._subdomains=this._subdomains.split(""):this._subdomains=["a","b","c"]}function Nye(e,t,n,i,o,r){let s=e._tileMatrixLabels,a=c(s)?s[i]:i.toString(),l=e._subdomains,d=e._dimensions,u=c(r)?r.data:void 0,f,p;if(!e._useKvp)p={TileMatrix:a,TileRow:n.toString(),TileCol:t.toString(),s:l[(t+n+i)%l.length]},f=e._resource.getDerivedResource({request:o}),f.setTemplateValues(p),c(d)&&f.setTemplateValues(d),c(u)&&f.setTemplateValues(u);else{let y={};y.tilematrix=a,y.layer=e._layer,y.style=e._style,y.tilerow=n,y.tilecol=t,y.tilematrixset=e._tileMatrixSetID,y.format=e._format,c(d)&&(y=St(y,d)),c(u)&&(y=St(y,u)),p={s:l[(t+n+i)%l.length]},f=e._resource.getDerivedResource({queryParameters:y,request:o}),f.setTemplateValues(p)}return fl.loadImage(e,f)}Object.defineProperties(lF.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,c(this._reload)&&this._reload())}}});lF.prototype.getTileCredits=function(e,t,n){};lF.prototype.requestImage=function(e,t,n,i){let o,r=this._timeDynamicImagery,s;return c(r)&&(s=r.currentInterval,o=r.getFromCache(e,t,n,i)),c(o)||(o=Nye(this,e,t,n,i,s)),c(o)&&c(r)&&r.checkApproachingInterval(e,t,n,i),o};lF.prototype.pickFeatures=function(e,t,n,i,o){};var dF=lF;var Dat={ARCGIS_MAPSERVER:l0.fromUrl,BING:async(e,t)=>tF.fromUrl(e,t),GOOGLE_EARTH:async(e,t)=>{let n=t.channel;return delete t.channel,oF.fromUrl(e,n,t)},MAPBOX:(e,t)=>new rF({url:e,...t}),SINGLE_TILE:sF.fromUrl,TMS:Rg.fromUrl,URL_TEMPLATE:(e,t)=>new Ba({url:e,...t}),WMS:(e,t)=>new cF({url:e,...t}),WMTS:(e,t)=>new dF({url:e,...t})};function np(e){e=e??z.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 ye}Object.defineProperties(np.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(){}}});np.fromAssetId=async function(e,t){C.typeOf.number("assetId",e),t=t??z.EMPTY_OBJECT;let n=xd._createEndpointResource(e,t),i=e.toString()+t.accessToken+t.server,o=np._endpointCache[i];c(o)||(o=n.fetchJson(),np._endpointCache[i]=o);let r=await o;if(r.type!=="IMAGERY")throw new le(`Cesium ion asset ${e} is not an imagery asset.`);let s,a=r.externalType;if(!c(a))s=await Rg.fromUrl(new xd(r,n));else{let d=Dat[a];if(!c(d))throw new le(`Unrecognized Cesium ion imagery type: ${a}`);let u={...r.options},f=u.url;delete u.url,s=await d(f,u)}let l=new np(t);return s.errorEvent.addEventListener(function(d){d.provider=l,l._errorEvent.raiseEvent(d)}),l._tileCredits=xd.getCreditsFromEndpoint(r,n),l._imageryProvider=s,l};np.prototype.getTileCredits=function(e,t,n){let i=this._imageryProvider.getTileCredits(e,t,n);return c(i)?this._tileCredits.concat(i):this._tileCredits};np.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};np.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};np._endpointCache={};var d0=np;var xPi=_(T(),1),Bat={AERIAL:2,AERIAL_WITH_LABELS:3,ROAD:4},u0=Object.freeze(Bat);function Yat(e){e=e??z.EMPTY_OBJECT;let t=e.style??u0.AERIAL;return d0.fromAssetId(t)}var m0=Yat;var EPi=_(T(),1);function tL(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=ci.UNLOADED,this.imageUrl=void 0,this.image=void 0,this.texture=void 0,this.textureWebMercator=void 0,this.credits=void 0,this.referenceCount=0,!c(o)&&e.ready&&(o=e.imageryProvider.tilingScheme.tileXYToRectangle(t,n,i)),this.rectangle=o}tL.createPlaceholder=function(e){let t=new tL(e,0,0,0);return t.addReference(),t.state=ci.PLACEHOLDER,t};tL.prototype.addReference=function(){++this.referenceCount};tL.prototype.releaseReference=function(){return--this.referenceCount,this.referenceCount===0?(this.imageryLayer.removeImageryFromCache(this),c(this.parent)&&this.parent.releaseReference(),c(this.image)&&c(this.image.destroy)&&this.image.destroy(),c(this.texture)&&this.texture.destroy(),c(this.textureWebMercator)&&this.texture!==this.textureWebMercator&&this.textureWebMercator.destroy(),he(this),0):this.referenceCount};tL.prototype.processStateMachine=function(e,t,n){this.state===ci.UNLOADED&&!n&&(this.state=ci.TRANSITIONING,this.imageryLayer._requestImagery(this)),this.state===ci.RECEIVED&&(this.state=ci.TRANSITIONING,this.imageryLayer._createTexture(e.context,this));let i=this.state===ci.READY&&t&&!this.texture;(this.state===ci.TEXTURE_LOADED||i)&&(this.state=ci.TRANSITIONING,this.imageryLayer._reprojectTexture(e,this,t))};var nL=tL;var wPi=_(T(),1);function o4(e,t,n){this.readyImagery=void 0,this.loadingImagery=e,this.textureCoordinateRectangle=t,this.textureTranslationAndScale=void 0,this.useWebMercatorT=n}o4.prototype.freeResources=function(){c(this.readyImagery)&&this.readyImagery.releaseReference(),c(this.loadingImagery)&&this.loadingImagery.releaseReference()};o4.prototype.processStateMachine=function(e,t,n){let i=this.loadingImagery,o=i.imageryLayer;if(i.processStateMachine(t,!this.useWebMercatorT,n),i.state===ci.READY)return c(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(;c(r)&&(r.state!==ci.READY||!this.useWebMercatorT&&!c(r.texture));)r.state!==ci.FAILED&&r.state!==ci.INVALID&&(s=s||r),r=r.parent;return this.readyImagery!==r&&(c(this.readyImagery)&&this.readyImagery.releaseReference(),this.readyImagery=r,c(r)&&(r.addReference(),this.textureTranslationAndScale=o._calculateTextureTranslationAndScale(e,this))),i.state===ci.FAILED||i.state===ci.INVALID?c(s)?(s.processStateMachine(t,!this.useWebMercatorT,n),!1):!0:!1};var iL=o4;function Si(e,t){this._imageryProvider=e,this._readyEvent=new ye,this._errorEvent=new ye,t=t??z.EMPTY_OBJECT,e=e??z.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??Si.DEFAULT_BRIGHTNESS,this.contrast=t.contrast??e._defaultContrast??Si.DEFAULT_CONTRAST,this.hue=t.hue??e._defaultHue??Si.DEFAULT_HUE,this.saturation=t.saturation??e._defaultSaturation??Si.DEFAULT_SATURATION,this.gamma=t.gamma??e._defaultGamma??Si.DEFAULT_GAMMA,this.splitDirection=t.splitDirection??Si.DEFAULT_SPLIT,this.minificationFilter=t.minificationFilter??e._defaultMinificationFilter??Si.DEFAULT_MINIFICATION_FILTER,this.magnificationFilter=t.magnificationFilter??e._defaultMagnificationFilter??Si.DEFAULT_MAGNIFICATION_FILTER,this.show=t.show??!0,this._minimumTerrainLevel=t.minimumTerrainLevel,this._maximumTerrainLevel=t.maximumTerrainLevel,this._rectangle=t.rectangle??de.MAX_VALUE,this._maximumAnisotropy=t.maximumAnisotropy,this._imageryCache={},this._skeletonPlaceholder=new iL(nL.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??Si.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD}Object.defineProperties(Si.prototype,{imageryProvider:{get:function(){return this._imageryProvider}},ready:{get:function(){return c(this._imageryProvider)}},errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},rectangle:{get:function(){return this._rectangle}}});Si.DEFAULT_BRIGHTNESS=1;Si.DEFAULT_CONTRAST=1;Si.DEFAULT_HUE=0;Si.DEFAULT_SATURATION=1;Si.DEFAULT_GAMMA=1;Si.DEFAULT_SPLIT=Ar.NONE;Si.DEFAULT_MINIFICATION_FILTER=Jt.LINEAR;Si.DEFAULT_MAGNIFICATION_FILTER=di.LINEAR;Si.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD=.004;Si.fromProviderAsync=function(e,t){C.typeOf.object("imageryProviderPromise",e);let n=new Si(void 0,t);return Qat(n,Promise.resolve(e)),n};Si.fromWorldImagery=function(e){return e=e??z.EMPTY_OBJECT,Si.fromProviderAsync(m0({style:e.style}),e)};Si.prototype.isBaseLayer=function(){return this._isBaseLayer};Si.prototype.isDestroyed=function(){return!1};Si.prototype.destroy=function(){return he(this)};var Oye=new de,kye=new de,r4=new de,Dye=new de;Si.prototype.getImageryRectangle=function(){let e=this._imageryProvider,t=this._rectangle;return de.intersection(e.rectangle,t)};Si.prototype._createTileImagerySkeletons=function(e,t,n){let i=e.data;if(!c(t)||c(this._minimumTerrainLevel)&&e.level<this._minimumTerrainLevel||c(this._maximumTerrainLevel)&&e.level>this._maximumTerrainLevel)return!1;c(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 Wi&&e.rectangle.north<Wi.MaximumLatitude&&e.rectangle.south>-Wi.MaximumLatitude,s=de.intersection(o.rectangle,this._rectangle,Oye),a=de.intersection(e.rectangle,s,kye);if(!c(a)){if(!this.isBaseLayer())return!1;let X=s,W=e.rectangle;a=kye,W.south>=X.north?a.north=a.south=X.north:W.north<=X.south?a.north=a.south=X.south:(a.south=Math.max(W.south,X.south),a.north=Math.min(W.north,X.north)),W.west>=X.east?a.west=a.east=X.east:W.east<=X.west?a.west=a.east=X.west:(a.west=Math.max(W.west,X.west),a.east=Math.min(W.east,X.east))}let l=0;a.south>0?l=a.south:a.north<0&&(l=a.north);let u=1*t.getLevelMaximumGeometricError(e.level),f=Kat(this,u,l);f=Math.max(0,f);let p=o.maximumLevel;if(f>p&&(f=p),c(o.minimumLevel)){let X=o.minimumLevel;f<X&&(f=X)}let y=o.tilingScheme,h=y.positionToTileXY(de.northwest(a),f),g=y.positionToTileXY(de.southeast(a),f),x=e.rectangle.width/512,S=e.rectangle.height/512,V=y.tileXYToRectangle(h.x,h.y,f);Math.abs(V.south-e.rectangle.north)<S&&h.y<g.y&&++h.y,Math.abs(V.east-e.rectangle.west)<x&&h.x<g.x&&++h.x;let Z=y.tileXYToRectangle(g.x,g.y,f);Math.abs(Z.north-e.rectangle.south)<S&&g.y>h.y&&--g.y,Math.abs(Z.west-e.rectangle.east)<x&&g.x>h.x&&--g.x;let R=de.clone(e.rectangle,Dye),E=y.tileXYToRectangle(h.x,h.y,f),I=de.intersection(E,s,r4),v;r?(y.rectangleToNativeRectangle(R,R),y.rectangleToNativeRectangle(E,E),y.rectangleToNativeRectangle(I,I),y.rectangleToNativeRectangle(s,s),v=y.tileXYToNativeRectangle.bind(y),x=R.width/512,S=R.height/512):v=y.tileXYToRectangle.bind(y);let P,F=0,N=1,b;!this.isBaseLayer()&&Math.abs(I.west-R.west)>=x&&(F=Math.min(1,(I.west-R.west)/R.width)),!this.isBaseLayer()&&Math.abs(I.north-R.north)>=S&&(N=Math.max(0,(I.north-R.south)/R.height));let G=N;for(let X=h.x;X<=g.x;X++)if(P=F,E=v(X,h.y,f),I=de.simpleIntersection(E,s,r4),!!c(I)){F=Math.min(1,(I.east-R.west)/R.width),X===g.x&&(this.isBaseLayer()||Math.abs(I.east-R.east)<x)&&(F=1),N=G;for(let W=h.y;W<=g.y;W++){if(b=N,E=v(X,W,f),I=de.simpleIntersection(E,s,r4),!c(I))continue;N=Math.max(0,(I.south-R.south)/R.height),W===g.y&&(this.isBaseLayer()||Math.abs(I.south-R.south)<S)&&(N=0);let A=new ce(P,N,F,b),k=this.getImageryFromCache(X,W,f);i.imagery.splice(n,0,new iL(k,A,r)),++n}}return!0};Si.prototype._calculateTextureTranslationAndScale=function(e,t){let n=t.readyImagery.rectangle,i=e.rectangle;if(t.useWebMercatorT){let l=t.readyImagery.imageryLayer.imageryProvider.tilingScheme;n=l.rectangleToNativeRectangle(n,Oye),i=l.rectangleToNativeRectangle(i,Dye)}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)};Si.prototype._requestImagery=function(e){let t=this._imageryProvider,n=this;function i(s){if(!c(s))return o();e.image=s,e.state=ci.RECEIVED,e.request=void 0,Ro.reportSuccess(n._requestImageError)}function o(s){if(e.request.state===jn.CANCELLED){e.state=ci.UNLOADED,e.request=void 0;return}e.state=ci.FAILED,e.request=void 0;let a=`Failed to obtain image tile X: ${e.x} Y: ${e.y} Level: ${e.level}.`;n._requestImageError=Ro.reportError(n._requestImageError,t,t.errorEvent,a,e.x,e.y,e.level,s),n._requestImageError.retry&&r()}function r(){let s=new Jo({throttle:!1,throttleByServer:!0,type:us.IMAGERY});e.request=s,e.state=ci.TRANSITIONING;let a=t.requestImage(e.x,e.y,e.level,s);if(!c(a)){e.state=ci.UNLOADED,e.request=void 0;return}c(t.getTileCredits)&&(e.credits=t.getTileCredits(e.x,e.y,e.level)),a.then(function(l){i(l)}).catch(function(l){o(l)})}r()};Si.prototype._createTextureWebGL=function(e,t){let n=new en({minificationFilter:this.minificationFilter,magnificationFilter:this.magnificationFilter}),i=t.image;return c(i.internalFormat)?new Pt({context:e,pixelFormat:i.internalFormat,width:i.width,height:i.height,source:{arrayBufferView:i.bufferView},sampler:n}):new Pt({context:e,source:i,pixelFormat:this._imageryProvider.hasAlphaChannel?ke.RGBA:ke.RGB,sampler:n})};Si.prototype._createTexture=function(e,t){let n=this._imageryProvider,i=t.image;if(c(n.tileDiscardPolicy)){let r=n.tileDiscardPolicy;if(c(r)){if(!r.isReady()){t.state=ci.RECEIVED;return}if(r.shouldDiscardImage(i)){t.state=ci.INVALID;return}}}if(this.minificationFilter!==Jt.NEAREST&&this.minificationFilter!==Jt.LINEAR)throw new L("ImageryLayer minification filter must be NEAREST or LINEAR");let o=this._createTextureWebGL(e,t);n.tilingScheme.projection instanceof Wi?t.textureWebMercator=o:t.texture=o,t.image=void 0,t.state=ci.TEXTURE_LOADED};function Uye(e,t,n){return`${e}:${t}:${n}`}Si.prototype._finalizeReprojectTexture=function(e,t){let n=this.minificationFilter,i=this.magnificationFilter;if(n===Jt.LINEAR&&i===di.LINEAR&&!ke.isCompressedFormat(t.pixelFormat)&&w.isPowerOfTwo(t.width)&&w.isPowerOfTwo(t.height)){n=Jt.LINEAR_MIPMAP_LINEAR;let r=mt.maximumTextureFilterAnisotropy,s=Math.min(r,this._maximumAnisotropy??r),a=Uye(n,i,s),l=e.cache.imageryLayerMipmapSamplers;c(l)||(l={},e.cache.imageryLayerMipmapSamplers=l);let d=l[a];c(d)||(d=l[a]=new en({wrapS:xn.CLAMP_TO_EDGE,wrapT:xn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i,maximumAnisotropy:s})),t.generateMipmap(_u.NICEST),t.sampler=d}else{let r=Uye(n,i,0),s=e.cache.imageryLayerNonMipmapSamplers;c(s)||(s={},e.cache.imageryLayerNonMipmapSamplers=s);let a=s[r];c(a)||(a=s[r]=new en({wrapS:xn.CLAMP_TO_EDGE,wrapT:xn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i})),t.sampler=a}};Si.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 Xi)&&o.width/i.width>1e-5){let s=this;t.addReference();let a=new vc({persists:!0,owner:this,preExecute:function(l){zat(l,r,i,t.rectangle)},postExecute:function(l){t.texture=l,s._finalizeReprojectTexture(r,l),t.state=ci.READY,t.releaseReference()},canceled:function(){t.state=ci.TEXTURE_LOADED,t.releaseReference()}});this._reprojectComputeCommands.push(a)}else n&&(t.texture=i),this._finalizeReprojectTexture(r,i),t.state=ci.READY};Si.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};Si.prototype.cancelReprojections=function(){this._reprojectComputeCommands.forEach(function(e){c(e.canceled)&&e.canceled()}),this._reprojectComputeCommands.length=0};Si.prototype.getImageryFromCache=function(e,t,n,i){let o=Bye(e,t,n),r=this._imageryCache[o];return c(r)||(r=new nL(this,e,t,n,i),this._imageryCache[o]=r),r.addReference(),r};Si.prototype.removeImageryFromCache=function(e){let t=Bye(e.x,e.y,e.level);delete this._imageryCache[t]};function Bye(e,t,n){return JSON.stringify([e,t,n])}var DO={u_textureDimensions:function(){return this.textureDimensions},u_texture:function(){return this.texture},textureDimensions:new D,texture:void 0},Hat=Ot.supportsTypedArrays()?new Float32Array(2*64):void 0;function zat(e,t,n,i){let o=t.cache.imageryLayer_reproject;if(!c(o)){o=t.cache.imageryLayer_reproject={vertexArray:void 0,shaderProgram:void 0,sampler:void 0,destroy:function(){c(this.framebuffer)&&this.framebuffer.destroy(),c(this.vertexArray)&&this.vertexArray.destroy(),c(this.shaderProgram)&&this.shaderProgram.destroy()}};let x=new Float32Array(2*64*2),S=0;for(let I=0;I<64;++I){let v=I/63;x[S++]=0,x[S++]=v,x[S++]=1,x[S++]=v}let V={position:0,webMercatorT:1},Z=rs.getRegularGridIndices(2,64),R=_t.createIndexBuffer({context:t,typedArray:Z,usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT});o.vertexArray=new ni({context:t,attributes:[{index:V.position,vertexBuffer:_t.createVertexBuffer({context:t,typedArray:x,usage:Ne.STATIC_DRAW}),componentsPerAttribute:2},{index:V.webMercatorT,vertexBuffer:_t.createVertexBuffer({context:t,sizeInBytes:64*2*4,usage:Ne.STREAM_DRAW}),componentsPerAttribute:1}],indexBuffer:R});let E=new Be({sources:[Ov]});o.shaderProgram=tn.fromCache({context:t,vertexShaderSource:E,fragmentShaderSource:Uv,attributeLocations:V}),o.sampler=new en({wrapS:xn.CLAMP_TO_EDGE,wrapT:xn.CLAMP_TO_EDGE,minificationFilter:Jt.LINEAR,magnificationFilter:di.LINEAR})}n.sampler=o.sampler;let r=n.width,s=n.height;DO.textureDimensions.x=r,DO.textureDimensions.y=s,DO.texture=n;let a=Math.sin(i.south),l=.5*Math.log((1+a)/(1-a));a=Math.sin(i.north);let u=1/(.5*Math.log((1+a)/(1-a))-l),f=new Pt({context:t,width:r,height:s,pixelFormat:n.pixelFormat,pixelDatatype:n.pixelDatatype,preMultiplyAlpha:n.preMultiplyAlpha});w.isPowerOfTwo(r)&&w.isPowerOfTwo(s)&&f.generateMipmap(_u.NICEST);let p=i.south,y=i.north,h=Hat,g=0;for(let x=0;x<64;++x){let S=x/63,V=w.lerp(p,y,S);a=Math.sin(V);let R=(.5*Math.log((1+a)/(1-a))-l)*u;h[g++]=R,h[g++]=R}o.vertexArray.getAttribute(1).vertexBuffer.copyFromArrayView(h),e.shaderProgram=o.shaderProgram,e.outputTexture=f,e.uniformMap=DO,e.vertexArray=o.vertexArray}function Kat(e,t,n){let i=e._imageryProvider,o=i.tilingScheme,r=o.ellipsoid,s=e._imageryProvider.tilingScheme.projection instanceof Xi?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 Jat(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function Qat(e,t){let n;try{if(n=await Promise.resolve(t),e.isDestroyed())return;e._imageryProvider=n,e._readyEvent.raiseEvent(n)}catch(i){Jat(e._errorEvent,i)}}var Ya=Si;var z2i=_(T(),1);var C2i=_(T(),1),jat={WEST:0,NORTH:1,EAST:2,SOUTH:3,NORTHWEST:4,NORTHEAST:5,SOUTHWEST:6,SOUTHEAST:7},_n=jat;var L2i=_(T(),1),Yye={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>=Yye.RENDERED_AND_KICKED},originalResult:function(e){return e&3},kick:function(e){return e|4}},Jn=Yye;function rL(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}rL.prototype.update=function(e,t,n){this.changedThisFrame&&(qye(e,t,this.tile,n),this.changedThisFrame=!1)};rL.prototype.destroy=function(e){this._destroyVertexArray(e),c(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0)};rL.prototype._destroyVertexArray=function(e){c(this.vertexArray)&&(c(e)?e.push(this.vertexArray):um._freeVertexArray(this.vertexArray),this.vertexArray=void 0)};var qat=new _y;rL.updateFillTiles=function(e,t,n,i){let o=e._quadtree,r=o._levelZeroTiles,s=o._lastSelectionFrameNumber,a=qat;a.clear();for(let d=0;d<t.length;++d){let u=t[d];c(u.data.vertexArray)&&a.enqueue(t[d])}let l=a.dequeue();for(;l!==void 0;){let d=l.findTileToWest(r),u=l.findTileToSouth(r),f=l.findTileToEast(r),p=l.findTileToNorth(r);ws(e,n,l,d,s,_n.EAST,!1,a,i),ws(e,n,l,u,s,_n.NORTH,!1,a,i),ws(e,n,l,f,s,_n.WEST,!1,a,i),ws(e,n,l,p,s,_n.SOUTH,!1,a,i);let y=d.findTileToNorth(r),h=d.findTileToSouth(r),g=f.findTileToNorth(r),x=f.findTileToSouth(r);ws(e,n,l,y,s,_n.SOUTHEAST,!1,a,i),ws(e,n,l,g,s,_n.SOUTHWEST,!1,a,i),ws(e,n,l,h,s,_n.NORTHEAST,!1,a,i),ws(e,n,l,x,s,_n.NORTHWEST,!1,a,i),l=a.dequeue()}};function ws(e,t,n,i,o,r,s,a,l){if(i===void 0)return;let d=i;for(;d&&(d._lastSelectionResultFrame!==o||Jn.wasKicked(d._lastSelectionResult)||Jn.originalResult(d._lastSelectionResult)===Jn.CULLED);){if(s)return;let u=d.parent;if(r>=_n.NORTHWEST&&u!==void 0)switch(r){case _n.NORTHWEST:d=d===u.northwestChild?u:void 0;break;case _n.NORTHEAST:d=d===u.northeastChild?u:void 0;break;case _n.SOUTHWEST:d=d===u.southwestChild?u:void 0;break;case _n.SOUTHEAST:d=d===u.southeastChild?u:void 0;break}else d=u}if(d!==void 0){if(d._lastSelectionResult===Jn.RENDERED){if(c(d.data.vertexArray))return;$at(e,t,n,d,r,o,a,l);return}if(Jn.originalResult(i._lastSelectionResult)!==Jn.CULLED)switch(r){case _n.WEST:ws(e,t,n,i.northwestChild,o,r,!0,a,l),ws(e,t,n,i.southwestChild,o,r,!0,a,l);break;case _n.EAST:ws(e,t,n,i.southeastChild,o,r,!0,a,l),ws(e,t,n,i.northeastChild,o,r,!0,a,l);break;case _n.SOUTH:ws(e,t,n,i.southwestChild,o,r,!0,a,l),ws(e,t,n,i.southeastChild,o,r,!0,a,l);break;case _n.NORTH:ws(e,t,n,i.northeastChild,o,r,!0,a,l),ws(e,t,n,i.northwestChild,o,r,!0,a,l);break;case _n.NORTHWEST:ws(e,t,n,i.northwestChild,o,r,!0,a,l);break;case _n.NORTHEAST:ws(e,t,n,i.northeastChild,o,r,!0,a,l);break;case _n.SOUTHWEST:ws(e,t,n,i.southwestChild,o,r,!0,a,l);break;case _n.SOUTHEAST:ws(e,t,n,i.southeastChild,o,r,!0,a,l);break;default:throw new L("Invalid edge")}}}function $at(e,t,n,i,o,r,s,a){let l=i.data;if(l.fill===void 0)l.fill=new rL(i);else if(l.fill.visitedFrame===r)return;l.fill.enqueuedFrame!==r&&(l.fill.enqueuedFrame=r,l.fill.changedThisFrame=!1,s.enqueue(i)),ect(e,t,n,i,o,a)}function ect(e,t,n,i,o,r){let s=i.data.fill,a,l=n.data.fill;c(l)?(l.visitedFrame=t.frameNumber,l.changedThisFrame&&(qye(e,t,n,r),l.changedThisFrame=!1),a=n.data.fill.mesh):a=n.data.mesh;let d,u;switch(o){case _n.WEST:d=s.westMeshes,u=s.westTiles;break;case _n.SOUTH:d=s.southMeshes,u=s.southTiles;break;case _n.EAST:d=s.eastMeshes,u=s.eastTiles;break;case _n.NORTH:d=s.northMeshes,u=s.northTiles;break;case _n.NORTHWEST:s.changedThisFrame=s.changedThisFrame||s.northwestMesh!==a,s.northwestMesh=a,s.northwestTile=n;return;case _n.NORTHEAST:s.changedThisFrame=s.changedThisFrame||s.northeastMesh!==a,s.northeastMesh=a,s.northeastTile=n;return;case _n.SOUTHWEST:s.changedThisFrame=s.changedThisFrame||s.southwestMesh!==a,s.southwestMesh=a,s.southwestTile=n;return;case _n.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 f,p,y,h,g=n.rectangle,x,S=i.rectangle;switch(o){case _n.WEST:for(x=(S.north-S.south)*w.EPSILON5,f=0;f<u.length&&(y=u[f],h=y.rectangle,!w.greaterThan(g.north,h.south,x));++f);for(p=f;p<u.length&&(y=u[p],h=y.rectangle,!w.greaterThanOrEquals(g.south,h.north,x));++p);break;case _n.SOUTH:for(x=(S.east-S.west)*w.EPSILON5,f=0;f<u.length&&(y=u[f],h=y.rectangle,!w.lessThan(g.west,h.east,x));++f);for(p=f;p<u.length&&(y=u[p],h=y.rectangle,!w.lessThanOrEquals(g.east,h.west,x));++p);break;case _n.EAST:for(x=(S.north-S.south)*w.EPSILON5,f=0;f<u.length&&(y=u[f],h=y.rectangle,!w.lessThan(g.south,h.north,x));++f);for(p=f;p<u.length&&(y=u[p],h=y.rectangle,!w.lessThanOrEquals(g.north,h.south,x));++p);break;case _n.NORTH:for(x=(S.east-S.west)*w.EPSILON5,f=0;f<u.length&&(y=u[f],h=y.rectangle,!w.greaterThan(g.east,h.west,x));++f);for(p=f;p<u.length&&(y=u[p],h=y.rectangle,!w.greaterThanOrEquals(g.west,h.east,x));++p);break}p-f===1?(s.changedThisFrame=s.changedThisFrame||d[f]!==a,d[f]=a,u[f]=n):(s.changedThisFrame=!0,d.splice(f,p-f,a),u.splice(f,p-f,n))}var AT=new pe,tct=new pe,oL=new m,l4=new m,s4=new D,a4=new D,jd=new D;function QO(){this.height=0,this.encodedNormal=new D}function BO(e,t,n,i,o,r,s,a,l){if(c(o))return o;let d;if(c(r)&&c(s))d=(r.height+s.height)*.5;else if(c(r))d=r.height;else if(c(s))d=s.height;else if(c(a))d=a.height;else{let f=e.tile.data.tileBoundingRegion,p=0,y=0;c(f)&&(p=f.minimumHeight,y=f.maximumHeight),d=(p+y)*.5}return $ye(e,t,n,i,d,l),l}var nct={minimumHeight:0,maximumHeight:0},ict=new m,Hye=new QO,zye=new QO,Kye=new QO,Jye=new QO,oct=typeof Uint8Array<"u"?new Uint8Array(9*9):void 0,rct={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0};function qye(e,t,n,i){um.initialize(n,e.terrainProvider,e._imageryLayers);let o=n.data,r=o.fill,s=n.rectangle,a=t.verticalExaggeration,l=t.verticalExaggerationRelativeHeight,d=a!==1,u=n.tilingScheme.ellipsoid,f=HO(r,u,0,1,r.northwestTile,r.northwestMesh,r.northTiles,r.northMeshes,r.westTiles,r.westMeshes,Kye),p=HO(r,u,0,0,r.southwestTile,r.southwestMesh,r.westTiles,r.westMeshes,r.southTiles,r.southMeshes,Hye),y=HO(r,u,1,0,r.southeastTile,r.southeastMesh,r.southTiles,r.southMeshes,r.eastTiles,r.eastMeshes,zye),h=HO(r,u,1,1,r.northeastTile,r.northeastMesh,r.eastTiles,r.eastMeshes,r.northTiles,r.northMeshes,Jye);f=BO(r,u,0,1,f,p,h,y,Kye),p=BO(r,u,0,0,p,f,y,h,Hye),y=BO(r,u,1,1,y,p,h,f,zye),h=BO(r,u,1,1,h,y,f,p,Jye);let g=p.height,x=y.height,S=f.height,V=h.height,Z=Math.min(g,x,S,V),R=Math.max(g,x,S,V),E=(Z+R)*.5,I,v,P=e.getLevelMaximumGeometricError(n.level),F=u.maximumRadius-P,N=Math.acos(F/u.maximumRadius)*4;if(N*=1.5,s.width>N&&R-Z<=P){let X=new Da({width:9,height:9,buffer:oct,structure:{heightOffset:R}}),W=rct;W.tilingScheme=n.tilingScheme,W.x=n.x,W.y=n.y,W.level=n.level,W.exaggeration=a,W.exaggerationRelativeHeight=l,r.mesh=X._createMeshSync(W)}else{let X=d,W=de.center(s,tct);W.height=E;let A=u.cartographicToCartesian(W,ict),k=new Rc(A,void 0,void 0,void 0,void 0,!0,!0,X,a,l),B=5,O;for(O=r.westMeshes,I=0,v=O.length;I<v;++I)B+=O[I].eastIndicesNorthToSouth.length;for(O=r.southMeshes,I=0,v=O.length;I<v;++I)B+=O[I].northIndicesWestToEast.length;for(O=r.eastMeshes,I=0,v=O.length;I<v;++I)B+=O[I].westIndicesSouthToNorth.length;for(O=r.northMeshes,I=0,v=O.length;I<v;++I)B+=O[I].southIndicesEastToWest.length;let H=nct;H.minimumHeight=Z,H.maximumHeight=R;let U=k.stride,K=new Float32Array(B*U),Q=0,ie=Q;Q=YO(u,s,k,K,Q,0,1,f.height,f.encodedNormal,1,H),Q=KO(r,u,k,K,Q,r.westTiles,r.westMeshes,_n.EAST,H);let j=Q;Q=YO(u,s,k,K,Q,0,0,p.height,p.encodedNormal,0,H),Q=KO(r,u,k,K,Q,r.southTiles,r.southMeshes,_n.NORTH,H);let $=Q;Q=YO(u,s,k,K,Q,1,0,y.height,y.encodedNormal,0,H),Q=KO(r,u,k,K,Q,r.eastTiles,r.eastMeshes,_n.WEST,H);let ne=Q;Q=YO(u,s,k,K,Q,1,1,h.height,h.encodedNormal,1,H),Q=KO(r,u,k,K,Q,r.northTiles,r.northMeshes,_n.SOUTH,H),Z=H.minimumHeight,R=H.maximumHeight;let be=Xn.fromRectangle(s,Z,R,n.tilingScheme.ellipsoid),Ce=Wi.geodeticLatitudeToMercatorAngle(s.south),me=1/(Wi.geodeticLatitudeToMercatorAngle(s.north)-Ce),_e=(Wi.geodeticLatitudeToMercatorAngle(W.latitude)-Ce)*me,Ve=u.geodeticSurfaceNormalCartographic(AT,l4),Ie=Fn.octEncode(Ve,s4),Ze=Q;k.encode(K,Q*U,be.center,D.fromElements(.5,.5,jd),E,Ie,_e,Ve),++Q;let De=Q,Ke=De<256?1:2,rt=(De-1)*3,Xt=rt*Ke,Ht=(K.length-De*U)*Float32Array.BYTES_PER_ELEMENT,qe;if(Ht>=Xt){let ge=De*U*Float32Array.BYTES_PER_ELEMENT;qe=De<256?new Uint8Array(K.buffer,ge,rt):new Uint16Array(K.buffer,ge,rt)}else qe=De<256?new Uint8Array(rt):new Uint16Array(rt);K=new Float32Array(K.buffer,0,De*U);let mn=0;for(I=0;I<De-2;++I)qe[mn++]=Ze,qe[mn++]=I,qe[mn++]=I+1;qe[mn++]=Ze,qe[mn++]=I,qe[mn++]=0;let Dt=[];for(I=j;I>=ie;--I)Dt.push(I);let Lt=[];for(I=$;I>=j;--I)Lt.push(I);let Vi=[];for(I=ne;I>=$;--I)Vi.push(I);let ln=[];for(ln.push(0),I=Ze-1;I>=ne;--I)ln.push(I);r.mesh=new dm(k.center,K,qe,rt,De,Z,R,ue.fromOrientedBoundingBox(be),mct(e,be.center,s,Z,R),k.stride,be,k,Dt,Lt,Vi,ln)}let b=t.context;r._destroyVertexArray(i),r.vertexArray=um._createVertexArrayForMesh(b,r.mesh),o.processImagery(n,e.terrainProvider,t,!0);let G=r.waterMaskTexture;if(r.waterMaskTexture=void 0,e.terrainProvider.hasWaterMask){let X=o._findAncestorTileWithTerrainData(n);c(X)&&c(X.data.waterMaskTexture)&&(r.waterMaskTexture=X.data.waterMaskTexture,++r.waterMaskTexture.referenceCount,o._computeWaterMaskTranslationAndScale(n,X,r.waterMaskTranslationAndScale))}c(G)&&(--G.referenceCount,G.referenceCount===0&&G.destroy())}function YO(e,t,n,i,o,r,s,a,l,d,u){let f=AT;f.longitude=w.lerp(t.west,t.east,r),f.latitude=w.lerp(t.south,t.north,s),f.height=a;let p=e.cartographicToCartesian(f,oL),y;n.hasGeodeticSurfaceNormals&&(y=e.geodeticSurfaceNormal(p,l4));let h=a4;return h.x=r,h.y=s,n.encode(i,o*n.stride,p,h,a,l,d,y),u.minimumHeight=Math.min(u.minimumHeight,a),u.maximumHeight=Math.max(u.maximumHeight,a),o+1}var JO=new de;function uF(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=de.clone(e.rectangle,JO),o.west-=w.TWO_PI,o.east-=w.TWO_PI):e.x===0&&n.x===0&&t.x===t.tilingScheme.getNumberOfXTilesAtLevel(t.level)-1&&(o=de.clone(e.rectangle,JO),o.west+=w.TWO_PI,o.east+=w.TWO_PI);let s=o.east-o.west,a=(r.west-o.west)/s,l=(r.east-o.west)/s,d=o.north-o.south,u=(r.south-o.south)/d,f=(r.north-o.south)/d,p=(n.x-a)/(l-a),y=(n.y-u)/(f-u);return Math.abs(p)<Math.EPSILON5?p=0:Math.abs(p-1)<Math.EPSILON5&&(p=1),Math.abs(y)<Math.EPSILON5?y=0:Math.abs(y-1)<Math.EPSILON5&&(y=1),i.x=p,i.y=y,i}var sct=new D;function c4(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 act=new D,cct=new m;function lct(e,t,n,i,o,r,s,a,l,d){let u=i.encoding,f=i.vertices,p=uF(t,n,u.decodeTextureCoordinates(f,o,jd),jd),y=uF(t,n,u.decodeTextureCoordinates(f,r,a4),a4),h;l?h=(s-p.x)/(y.x-p.x):h=(a-p.y)/(y.y-p.y);let g=u.decodeHeight(f,o),x=u.decodeHeight(f,r),S=n.rectangle;AT.longitude=w.lerp(S.west,S.east,s),AT.latitude=w.lerp(S.south,S.north,a),d.height=AT.height=w.lerp(g,x,h);let V;if(u.hasVertexNormals){let Z=u.getOctEncodedNormal(f,o,sct),R=u.getOctEncodedNormal(f,r,act),E=Fn.octDecode(Z.x,Z.y,oL),I=Fn.octDecode(R.x,R.y,cct);V=m.lerp(E,I,h,oL),m.normalize(V,V),Fn.octEncode(V,d.encodedNormal)}else V=e.geodeticSurfaceNormalCartographic(AT,oL),Fn.octEncode(V,d.encodedNormal)}function $ye(e,t,n,i,o,r){r.height=o;let s=t.geodeticSurfaceNormalCartographic(AT,oL);Fn.octEncode(s,r.encodedNormal)}function HO(e,t,n,i,o,r,s,a,l,d,u){if(jye(e,t,a,s,!1,n,i,u)||jye(e,t,d,l,!0,n,i,u))return u;let p;if(d4(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],c4(r,p,n,i,u),u;let y;if(n===0?i===0?y=zO(e.westMeshes,e.westTiles,_n.EAST,e.southMeshes,e.southTiles,_n.NORTH,n,i):y=zO(e.northMeshes,e.northTiles,_n.SOUTH,e.westMeshes,e.westTiles,_n.EAST,n,i):i===0?y=zO(e.southMeshes,e.southTiles,_n.NORTH,e.eastMeshes,e.eastTiles,_n.WEST,n,i):y=zO(e.eastMeshes,e.eastTiles,_n.WEST,e.northMeshes,e.northTiles,_n.SOUTH,n,i),c(y))return $ye(e,t,n,i,y,u),u}function zO(e,t,n,i,o,r,s,a){let l=Qye(e,t,!1,n,s,a),d=Qye(i,o,!0,r,s,a);return c(l)&&c(d)?(l+d)*.5:c(l)?l:d}function KO(e,t,n,i,o,r,s,a,l){for(let d=0;d<r.length;++d)o=dct(e,t,n,i,o,r[d],s[d],a,l);return o}function dct(e,t,n,i,o,r,s,a,l){let d=r.rectangle;a===_n.EAST&&e.tile.x===0?(d=de.clone(r.rectangle,JO),d.west-=w.TWO_PI,d.east-=w.TWO_PI):a===_n.WEST&&r.x===0&&(d=de.clone(r.rectangle,JO),d.west+=w.TWO_PI,d.east+=w.TWO_PI);let u=e.tile.rectangle,f,p;o>0&&(n.decodeTextureCoordinates(i,o-1,jd),f=jd.x,p=jd.y);let y,h;switch(a){case _n.WEST:y=s.westIndicesSouthToNorth,h=!1;break;case _n.NORTH:y=s.northIndicesWestToEast,h=!0;break;case _n.EAST:y=s.eastIndicesNorthToSouth,h=!1;break;case _n.SOUTH:y=s.southIndicesEastToWest,h=!0;break}let g=r,x=e.tile,S=s.encoding,V=s.vertices,Z=n.stride,R,E;S.hasWebMercatorT&&(R=Wi.geodeticLatitudeToMercatorAngle(u.south),E=1/(Wi.geodeticLatitudeToMercatorAngle(u.north)-R));for(let I=0;I<y.length;++I){let v=y[I],P=S.decodeTextureCoordinates(V,v,jd);uF(g,x,P,P);let F=P.x,N=P.y,b=h?F:N;if(b<0||b>1||Math.abs(F-f)<w.EPSILON5&&Math.abs(N-p)<w.EPSILON5)continue;let G=Math.abs(F)<w.EPSILON5||Math.abs(F-1)<w.EPSILON5,X=Math.abs(N)<w.EPSILON5||Math.abs(N-1)<w.EPSILON5;if(G&&X)continue;let W=S.decodePosition(V,v,oL),A=S.decodeHeight(V,v),k;S.hasVertexNormals?k=S.getOctEncodedNormal(V,v,s4):(k=s4,k.x=0,k.y=0);let B=N;if(S.hasWebMercatorT){let H=w.lerp(u.south,u.north,N);B=(Wi.geodeticLatitudeToMercatorAngle(H)-R)*E}let O;n.hasGeodeticSurfaceNormals&&(O=t.geodeticSurfaceNormal(W,l4)),n.encode(i,o*Z,W,P,A,k,B,O),l.minimumHeight=Math.min(l.minimumHeight,A),l.maximumHeight=Math.max(l.maximumHeight,A),++o}return o}function Qye(e,t,n,i,o,r){let s,a,l;n?(s=0,a=e.length,l=1):(s=e.length-1,a=-1,l=-1);for(let d=s;d!==a;d+=l){let u=e[d],f=t[d];if(!d4(f,u))continue;let p;switch(i){case _n.WEST:p=u.westIndicesSouthToNorth;break;case _n.SOUTH:p=u.southIndicesEastToWest;break;case _n.EAST:p=u.eastIndicesNorthToSouth;break;case _n.NORTH:p=u.northIndicesWestToEast;break}let y=p[n?0:p.length-1];if(c(y))return u.encoding.decodeHeight(u.vertices,y)}}function d4(e,t){return c(t)&&(!c(e.data.fill)||!e.data.fill.changedThisFrame)}function jye(e,t,n,i,o,r,s,a){let l,d,u,f,p,y=i[o?0:n.length-1],h=n[o?0:n.length-1];if(d4(y,h)&&(r===0?s===0?(l=o?h.northIndicesWestToEast:h.eastIndicesNorthToSouth,d=o,u=o):(l=o?h.eastIndicesNorthToSouth:h.southIndicesEastToWest,d=!o,u=!1):s===0?(l=o?h.westIndicesSouthToNorth:h.northIndicesWestToEast,d=!o,u=!0):(l=o?h.southIndicesEastToWest:h.westIndicesSouthToNorth,d=o,u=!o),l.length>0)){f=o?0:l.length-1,p=l[f],h.encoding.decodeTextureCoordinates(h.vertices,p,jd);let g=uF(y,e.tile,jd,jd);if(g.x===r&&g.y===s)return c4(h,p,r,s,a),!0;if(f=Wo(l,d?r:s,function(x,S){h.encoding.decodeTextureCoordinates(h.vertices,x,jd);let V=uF(y,e.tile,jd,jd);return u?d?V.x-r:V.y-s:d?r-V.x:s-V.y}),f<0){if(f=~f,f>0&&f<l.length)return lct(t,y,e.tile,h,l[f-1],l[f],r,s,d,a),!0}else return c4(h,l[f],r,s,a),!0}return!1}var uct=[new m,new m,new m,new m];function mct(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,l=uct;return m.fromRadians(n.west,n.south,o,a,l[0]),m.fromRadians(n.east,n.south,o,a,l[1]),m.fromRadians(n.west,n.north,o,a,l[2]),m.fromRadians(n.east,n.north,o,a,l[3]),s.computeHorizonCullingPointPossiblyUnderEllipsoid(t,l,i,r)}var sL=rL;function ar(e){if(!c(e))throw new L("options is required.");if(c(e.terrainProvider))if(c(e.imageryLayers)){if(!c(e.surfaceShaderSet))throw new L("options.surfaceShaderSet is required.")}else throw new L("options.imageryLayers is required.");else throw new L("options.terrainProvider is required.");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=Sn.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 ye,this._removeLayerAddedListener=this._imageryLayers.layerAdded.addEventListener(ar.prototype._onLayerAdded,this),this._removeLayerRemovedListener=this._imageryLayers.layerRemoved.addEventListener(ar.prototype._onLayerRemoved,this),this._removeLayerMovedListener=this._imageryLayers.layerMoved.addEventListener(ar.prototype._onLayerMoved,this),this._removeLayerShownListener=this._imageryLayers.layerShownOrHidden.addEventListener(ar.prototype._onLayerShownOrHidden,this),this._imageryLayersUpdatedEvent=new ye,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 Y(0,0,.5,1),this._clippingPlanes=void 0,this._clippingPolygons=void 0,this.cartographicLimitRectangle=de.clone(de.MAX_VALUE),this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1,this._oldVerticalExaggeration=void 0,this._oldVerticalExaggerationRelativeHeight=void 0}Object.defineProperties(ar.prototype,{baseColor:{get:function(){return this._baseColor},set:function(e){if(!c(e))throw new L("value is required.");this._baseColor=e,this._firstPassInitialColor=ce.fromColor(e,this._firstPassInitialColor)}},quadtree:{get:function(){return this._quadtree},set:function(e){if(!c(e))throw new L("value is required.");this._quadtree=e}},tilingScheme:{get:function(){if(c(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,c(this._quadtree)&&this._quadtree.invalidateAllTiles())}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){hs.setOwner(e,this,"_clippingPlanes")}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){qm.setOwner(e,this,"_clippingPolygons")}}});function fct(e,t){let n=e.loadingImagery;c(n)||(n=e.readyImagery);let i=t.loadingImagery;return c(i)||(i=t.readyImagery),n.imageryLayer._layerIndex-i.imageryLayer._layerIndex}ar.prototype.update=function(e){this._imageryLayers._update()};function hct(e,t){let n=t.creditDisplay,i=e._terrainProvider;c(i)&&c(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&&c(a.imageryProvider.credit)&&n.addCreditToNextFrame(a.imageryProvider.credit)}}ar.prototype.initialize=function(e){this._imageryLayers.queueReprojectionCommands(e),this._layerOrderChanged&&(this._layerOrderChanged=!1,this._quadtree.forEachLoadedTile(function(i){i.data.imagery.sort(fct)})),hct(this,e);let t=this._vertexArraysToDestroy,n=t.length;for(let i=0;i<n;++i)um._freeVertexArray(t[i]);t.length=0};ar.prototype.beginUpdate=function(e){let t=this._tilesToRenderByTextureCount;for(let o=0,r=t.length;o<r;++o){let s=t[o];c(s)&&(s.length=0)}let n=this._clippingPlanes;c(n)&&n.enabled&&n.update(e);let i=this._clippingPolygons;c(i)&&i.enabled&&(i.update(e),i.queueCommands(e)),this._usedDrawCommands=0,this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1};ar.prototype.endUpdate=function(e){if(!c(this._renderState)){this._renderState=Oe.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:lc.LESS}}),this._blendRenderState=Oe.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:lc.LESS_OR_EQUAL},blending:un.ALPHA_BLEND});let s=He(this._renderState,!0);s.cull.enabled=!1,this._disableCullingRenderState=Oe.fromCache(s),s=He(this._blendRenderState,!0),s.cull.enabled=!1,this._disableCullingBlendRenderState=Oe.fromCache(s)}this._hasFillTilesThisFrame&&this._hasLoadedTilesThisFrame&&sL.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 l=r[s];if(c(l))for(let d=0,u=l.length;d<u;++d){let f=l[d],p=f.data.tileBoundingRegion;Mct(this,f,e),e.minimumTerrainHeight=Math.min(e.minimumTerrainHeight,p.minimumHeight)}}};function oge(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)}ar.prototype.updateForPick=function(e){let t=this._drawCommands;for(let n=0,i=this._usedDrawCommands;n<i;++n)oge(t[n],e)};ar.prototype.cancelReprojections=function(){this._imageryLayers.cancelReprojections()};ar.prototype.getLevelMaximumGeometricError=function(e){return c(this._terrainProvider)?this._terrainProvider.getLevelMaximumGeometricError(e):0};ar.prototype.loadTile=function(e,t){let n=t.data,i=!0,o;c(n)&&(i=n.boundingVolumeSourceTile!==t||t._lastSelectionResult===Jn.CULLED_BUT_NEEDED,o=n.terrainState),um.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)!==yr.NONE&&n.boundingVolumeSourceTile===t&&(i=!1,um.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this.quadtree,this._vertexArraysToDestroy,i))};var pct=new ue,rge=new de,bct=new de,yct=new pe;function qO(e,t){if(t.west<t.east)return t;let n=de.clone(t,bct);return de.center(e,yct).longitude>0?n.east=w.PI:n.west=-w.PI,n}function sge(e,t){if(t.cameraUnderground||t.globeTranslucencyState.translucent)return!0;if(e.backFaceCulling)return!1;let n=e._clippingPlanes;if(c(n)&&n.enabled)return!0;let i=e._clippingPolygons;return!!(c(i)&&i.enabled||!de.equals(e.cartographicLimitRectangle,de.MAX_VALUE))}ar.prototype.computeTileVisibility=function(e,t,n){let i=this.computeDistanceToTile(e,t);e._distance=i;let o=sge(this,t);if(t.fog.enabled&&!o&&w.fog(i,t.fog.density)>=1)return yr.NONE;let r=e.data,s=r.tileBoundingRegion;if(r.boundingVolumeSourceTile===void 0)return yr.PARTIAL;let a=t.cullingVolume,l=s.boundingVolume;c(l)||(l=s.boundingSphere),r.clippedByBoundaries=!1;let d=qO(e.rectangle,this.cartographicLimitRectangle),u=de.simpleIntersection(d,e.rectangle,rge);if(!c(u))return yr.NONE;if(de.equals(u,e.rectangle)||(r.clippedByBoundaries=!0),t.mode!==se.SCENE3D&&(l=pct,ue.fromRectangleWithHeights2D(e.rectangle,t.mapProjection,s.minimumHeight,s.maximumHeight,l),m.fromElements(l.center.z,l.center.x,l.center.y,l.center),t.mode===se.MORPHING&&c(r.renderedMesh)&&(l=ue.union(s.boundingSphere,l,l))),!c(l))return yr.PARTIAL;let f=this._clippingPlanes;if(c(f)&&f.enabled){let x=f.computeIntersectionWithBoundingVolume(l);if(e.isClipped=x!==zt.INSIDE,x===zt.OUTSIDE)return yr.NONE}let p=this._clippingPolygons;if(c(p)&&p.enabled){let x=p.computeIntersectionWithBoundingVolume(s);e.isClipped=x!==zt.OUTSIDE}let y,h=a.computeVisibility(l);if(h===zt.OUTSIDE?y=yr.NONE:h===zt.INTERSECTING?y=yr.PARTIAL:h===zt.INSIDE&&(y=yr.FULL),y===yr.NONE)return y;let g=t.mode===se.SCENE3D&&t.camera.frustum instanceof sn;if(t.mode===se.SCENE3D&&!g&&c(n)&&!o){let x=r.occludeePointInScaledSpace;return!c(x)||n.ellipsoid.isScaledSpacePointVisiblePossiblyUnderEllipsoid(x,s.minimumHeight)?y:yr.NONE}return y};ar.prototype.canRefine=function(e){return c(e.data.terrainData)?!0:this.terrainProvider.getTileDataAvailable(e.x*2,e.y*2,e.level+1)!==void 0};var gct=[],xct=[];ar.prototype.canRenderWithoutLosingDetail=function(e,t){let n=e.data,i=gct;i.length=this._imageryLayers.length;let o=!1,r=!1,s;c(n)&&(o=n.terrainState===uo.READY,r=!0,s=n.imagery);let a,l;for(a=0,l=i.length;a<l;++a)i[a]=r;if(c(s))for(a=0,l=s.length;a<l;++a){let f=s[a],p=f.loadingImagery,y=!c(p)||p.state===ci.FAILED||p.state===ci.INVALID,h=(f.loadingImagery||f.readyImagery).imageryLayer._layerIndex;i[h]=y&&i[h]}let d=this.quadtree._lastSelectionFrameNumber,u=xct;for(u.length=0,u.push(e.southwestChild,e.southeastChild,e.northwestChild,e.northeastChild);u.length>0;){let f=u.pop(),p=f._lastSelectionResultFrame===d?f._lastSelectionResult:Jn.NONE;if(p===Jn.RENDERED){let y=f.data;if(!c(y))continue;if(!o&&f.data.terrainState===uo.READY)return!1;let h=f.data.imagery;for(a=0,l=h.length;a<l;++a){let g=h[a],x=g.loadingImagery,S=!c(x)||x.state===ci.FAILED||x.state===ci.INVALID,V=(g.loadingImagery||g.readyImagery).imageryLayer._layerIndex;if(S&&!i[V])return!1}}else p===Jn.REFINED&&u.push(f.southwestChild,f.southeastChild,f.northwestChild,f.northeastChild)}return!0};var _ct=new m;ar.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,_ct),a=m.magnitude(s);return a<w.EPSILON5?0:(m.divideByScalar(s,a,s),(1-m.dot(s,r))*e._distance)};var ege=new M,jO=new M,Tct=new ce,Sct=new ce,Cct=new ce,Vct=new m,tge=new m,Lct=new m,Zct=new m;ar.prototype.showTileThisFrame=function(e,t){let n=0,i=e.data.imagery;for(let a=0,l=i.length;a<l;++a){let d=i[a];c(d.readyImagery)&&d.readyImagery.imageryLayer.alpha!==0&&++n}let o=this._tilesToRenderByTextureCount[n];c(o)||(o=[],this._tilesToRenderByTextureCount[n]=o),o.push(e);let r=e.data;c(r.vertexArray)?this._hasLoadedTilesThisFrame=!0:this._hasFillTilesThisFrame=!0;let s=this._debug;++s.tilesRendered,s.texturesRendered+=n};var Rct=[new m,new m,new m,new m];function nge(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,l=Rct;return m.fromRadians(n.west,n.south,o,a,l[0]),m.fromRadians(n.east,n.south,o,a,l[1]),m.fromRadians(n.west,n.north,o,a,l[2]),m.fromRadians(n.east,n.north,o,a,l[3]),s.computeHorizonCullingPointPossiblyUnderEllipsoid(t,l,i,r)}ar.prototype.computeDistanceToTile=function(e,t){Gct(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 l=t.camera.positionCartographic.height,d=Math.abs(l-r),u=Math.abs(l-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 Gct(e,t,n){let i=e.data;i===void 0&&(i=e.data=new um);let o=e.tilingScheme.ellipsoid;i.tileBoundingRegion===void 0&&(i.tileBoundingRegion=new Xd({computeBoundingVolumes:!1,rectangle:e.rectangle,ellipsoid:o,minimumHeight:0,maximumHeight:0}));let r=i.tileBoundingRegion,s=r.minimumHeight,a=r.maximumHeight,l=!1,d=e,u=i.mesh,f=i.terrainData;if(u!==void 0&&u.minimumHeight!==void 0&&u.maximumHeight!==void 0)r.minimumHeight=u.minimumHeight,r.maximumHeight=u.maximumHeight,l=!0;else if(f!==void 0&&f._minimumHeight!==void 0&&f._maximumHeight!==void 0)r.minimumHeight=f._minimumHeight,r.maximumHeight=f._maximumHeight;else{r.minimumHeight=Number.NaN,r.maximumHeight=Number.NaN;let p=e.parent;for(;p!==void 0;){let y=p.data;if(y!==void 0){let h=y.mesh,g=y.terrainData;if(h!==void 0&&h.minimumHeight!==void 0&&h.maximumHeight!==void 0){r.minimumHeight=h.minimumHeight,r.maximumHeight=h.maximumHeight;break}else if(g!==void 0&&g._minimumHeight!==void 0&&g._maximumHeight!==void 0){r.minimumHeight=g._minimumHeight,r.maximumHeight=g._maximumHeight;break}}p=p.parent}d=p}if(d!==void 0){let p=n.verticalExaggeration,y=n.verticalExaggerationRelativeHeight;if(p!==1&&(l=!1,r.minimumHeight=Lr.getHeight(r.minimumHeight,p,y),r.maximumHeight=Lr.getHeight(r.maximumHeight,p,y)),l)i.boundingVolumeIsFromMesh||(r._orientedBoundingBox=Xn.clone(u.orientedBoundingBox,r._orientedBoundingBox),r._boundingSphere=ue.clone(u.boundingSphere3D,r._boundingSphere),i.occludeePointInScaledSpace=m.clone(u.occludeePointInScaledSpace,i.occludeePointInScaledSpace),c(i.occludeePointInScaledSpace)||(i.occludeePointInScaledSpace=nge(t,r._orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace)));else{let g=r._orientedBoundingBox===void 0||r._boundingSphere===void 0;(r.minimumHeight!==s||r.maximumHeight!==a||g)&&(r.computeBoundingVolumes(o),i.occludeePointInScaledSpace=nge(t,r._orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace))}i.boundingVolumeSourceTile=d,i.boundingVolumeIsFromMesh=l}else i.boundingVolumeSourceTile=void 0,i.boundingVolumeIsFromMesh=!1}ar.prototype.isDestroyed=function(){return!1};ar.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(),he(this)};function Ect(e,t,n){return function(i){let o,r,s=-1,a=i.data.imagery,l=a.length,d;for(d=0;d<l;++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=c(o)?o.readyImagery??o.loadingImagery:void 0,!c(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}}ar.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(c(s._loadedCallbacks[e._layerIndex]))return;let a,l=s.data.imagery,d=l.length,u=-1,f=0;for(a=0;a<d;++a){let y=l[a];if((y.readyImagery??y.loadingImagery).imageryLayer===e)u===-1&&(u=a),++f;else if(u!==-1)break}if(u===-1)return;let p=u+f;e._createTileImagerySkeletons(s,n,p)&&(s._loadedCallbacks[e._layerIndex]=Ect(f,e,n),s.state=$s.LOADING)})};if(e.ready){let s=e.imageryProvider;s._reload=r}this._quadtree.forEachLoadedTile(function(s){e._createTileImagerySkeletons(s,n)&&(s.state=$s.LOADING,s.level!==0&&(s._lastSelectionResultFrame!==i.quadtree._lastSelectionFrameNumber||s._lastSelectionResult!==Jn.RENDERED)&&(s.renderable=!1))}),this._layerOrderChanged=!0,o.raiseEvent()}};ar.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 l=i[s],d=l.loadingImagery;if(c(d)||(d=l.readyImagery),d.imageryLayer===e)o===-1&&(o=s),l.freeResources(),++r;else if(o!==-1)break}o!==-1&&i.splice(o,r)}),c(e.imageryProvider)&&(e.imageryProvider._reload=void 0),this._imageryLayersUpdatedEvent.raiseEvent()};ar.prototype._onLayerMoved=function(e,t,n){this._layerOrderChanged=!0,this._imageryLayersUpdatedEvent.raiseEvent()};ar.prototype._onLayerShownOrHidden=function(e,t,n){n?this._onLayerAdded(e,t):this._onLayerRemoved(e,t)};var Xct=new M,Ict=new M;function ige(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=M.multiplyByPoint(i,this.properties.rtc,tge);return M.setTranslation(i,o,ege),ege},u_modifiedModelViewProjection:function(){let i=e.context.uniformState.view,o=e.context.uniformState.projection,r=M.multiplyByPoint(i,this.properties.rtc,tge);return M.setTranslation(i,r,jO),M.multiply(o,jO,jO),jO},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 c(i)&&c(i.texture)?i.texture:e.context.defaultTexture},u_cartographicLimitRectangle:function(){return this.properties.localizedCartographicLimitRectangle},u_clippingPlanesMatrix:function(){let i=t._clippingPlanes,o=c(i)?M.multiply(e.context.uniformState.view,i.modelMatrix,Xct):M.IDENTITY;return M.inverseTranspose(o,Ict)},u_clippingPlanesEdgeStyle:function(){let i=this.properties.clippingPlanesEdgeColor;return i.alpha=this.properties.clippingPlanesEdgeWidth,i},u_clippingDistance:function(){let i=t._clippingPolygons.clippingTexture;return c(i)?i:e.context.defaultTexture},u_clippingExtents:function(){let i=t._clippingPolygons.extentsTexture;return c(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 Y(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 M,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 M,clippingPlanesEdgeColor:Y.clone(Y.WHITE),clippingPlanesEdgeWidth:0,localizedCartographicLimitRectangle:new ce,frontFaceAlphaByDistance:new ce,backFaceAlphaByDistance:new ce,localizedTranslucencyRectangle:new ce,undergroundColor:Y.clone(Y.TRANSPARENT),undergroundColorAlphaByDistance:new ce,lambertDiffuseMultiplier:0,vertexShadowDarkness:0}};return c(t.materialUniformMap)?St(n,t.materialUniformMap):n}function Wct(e,t,n){let i=n.data,o,r;if(c(i.vertexArray)?(o=i.mesh,r=i.vertexArray):c(i.fill)&&c(i.fill.vertexArray)&&(o=i.fill.mesh,r=i.fill.vertexArray),!(!c(o)||!c(r))){if(c(i.wireframeVertexArray)){if(i.wireframeVertexArray.mesh===o)return;i.wireframeVertexArray.destroy(),i.wireframeVertexArray=void 0}i.wireframeVertexArray=wct(e,r,o),i.wireframeVertexArray.mesh=o}}function wct(e,t,n){let o={indices:n.indices,primitiveType:ve.TRIANGLES};An.toWireframe(o);let r=o.indices,s=_t.createIndexBuffer({context:e,typedArray:r,usage:Ne.STATIC_DRAW,indexDatatype:Me.fromSizeInBytes(r.BYTES_PER_ELEMENT)});return new ni({context:e,attributes:t._attributes,indexBuffer:s})}var age,cge,$O;(function(){let e=new Rt({geometry:Fm.fromDimensions({dimensions:new m(2,2,2)})}),t=new Rt({geometry:new Ib({radius:1})}),n=new M,i,o;function r(s){return new In({geometryInstances:s,appearance:new an({translucent:!1,flat:!0}),asynchronous:!1})}age=function(s,a){return s===i||($O(),i=s,n=M.fromRotationTranslation(s.halfAxes,s.center,n),e.modelMatrix=n,e.attributes.color=Yt.fromColor(a),o=r(e)),o},cge=function(s,a){return s===i||($O(),i=s,n=M.fromTranslation(s.center,n),n=M.multiplyByUniformScale(n,s.radius,n),t.modelMatrix=n,t.attributes.color=Yt.fromColor(a),o=r(t)),o},$O=function(){c(o)&&(o.destroy(),o=void 0,i=void 0)}})();var Pct=new ce(0,0,0,0),vct={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},Fct=Y.TRANSPARENT,Act=new Nt;function Mct(e,t,n){let i=t.data;c(i.vertexArray)||(i.fill===void 0&&(i.fill=new sL(t)),i.fill.update(e,n));let o=n.creditDisplay,r=i.terrainData;if(c(r)&&c(r.credits)){let ge=r.credits;for(let Le=0,yn=ge.length;Le<yn;++Le)o.addCreditToNextFrame(ge[Le])}let s=mt.maximumTextureImageUnits,a=i.waterMaskTexture,l=i.waterMaskTranslationAndScale;!c(a)&&c(i.fill)&&(a=i.fill.waterMaskTexture,l=i.fill.waterMaskTranslationAndScale);let d=n.cameraUnderground,u=n.globeTranslucencyState,f=u.translucent,p=u.frontFaceAlphaByDistance,y=u.backFaceAlphaByDistance,h=u.rectangle,g=e.undergroundColor??Fct,x=e.undergroundColorAlphaByDistance??Act,S=sge(e,n)&&n.mode===se.SCENE3D&&g.alpha>0&&(x.nearValue>0||x.farValue>0),V=e.lambertDiffuseMultiplier,Z=e.vertexShadowDarkness,R=e.hasWaterMask&&c(a),E=R&&e.showWaterEffect,I=e.oceanNormalMap,v=E&&c(I),P=e.terrainProvider,F=c(P)&&e.terrainProvider.hasVertexNormals,N=n.fog.enabled&&n.fog.renderable&&!d,b=e.showGroundAtmosphere&&n.mode===se.SCENE3D,G=Sn.castShadows(e.shadows)&&!f,X=Sn.receiveShadows(e.shadows)&&!f,W=e.hueShift,A=e.saturationShift,k=e.brightnessShift,B=!(w.equalsEpsilon(W,0,w.EPSILON7)&&w.equalsEpsilon(A,0,w.EPSILON7)&&w.equalsEpsilon(k,0,w.EPSILON7)),O=!1;if(b){let ge=m.magnitude(n.camera.positionWC),Le=e.nightFadeOutDistance;O=ge>Le}R&&--s,v&&--s,c(n.shadowState)&&n.shadowState.shadowsEnabled&&--s,c(e.clippingPlanes)&&e.clippingPlanes.enabled&&--s,c(e.clippingPolygons)&&e.clippingPolygons.enabled&&(--s,--s),s-=u.numberOfTextureUniforms;let H=i.renderedMesh,U=H.center,K=H.encoding,Q=i.tileBoundingRegion,ie=n.verticalExaggeration,j=n.verticalExaggerationRelativeHeight,$=ie!==1,ne=K.hasGeodeticSurfaceNormals,be=Tct,Ce=0,me=0,_e=0,Ve=0,Ie=!1;if(n.mode!==se.SCENE3D){let ge=n.mapProjection,Le=ge.project(de.southwest(t.rectangle),Lct),yn=ge.project(de.northeast(t.rectangle),Zct);if(be.x=Le.x,be.y=Le.y,be.z=yn.x,be.w=yn.y,n.mode!==se.MORPHING&&(U=Vct,U.x=0,U.y=(be.z+be.x)*.5,U.z=(be.w+be.y)*.5,be.x-=U.y,be.y-=U.z,be.z-=U.y,be.w-=U.z),n.mode===se.SCENE2D&&K.quantization===qs.BITS12){let bt=1/(Math.pow(2,12)-1)*.5,ro=(be.z-be.x)*bt,Xo=(be.w-be.y)*bt;be.x-=ro,be.y-=Xo,be.z+=ro,be.w+=Xo}ge instanceof Wi&&(Ce=t.rectangle.south,me=t.rectangle.north,_e=Wi.geodeticLatitudeToMercatorAngle(Ce),Ve=1/(Wi.geodeticLatitudeToMercatorAngle(me)-_e),Ie=!0)}let Ze=vct;Ze.frameState=n,Ze.surfaceTile=i,Ze.hasWaterMask=R,Ze.showReflectiveOcean=E,Ze.showOceanWaves=v,Ze.enableLighting=e.enableLighting,Ze.dynamicAtmosphereLighting=e.dynamicAtmosphereLighting,Ze.dynamicAtmosphereLightingFromSun=e.dynamicAtmosphereLightingFromSun,Ze.showGroundAtmosphere=b,Ze.atmosphereLightIntensity=e.atmosphereLightIntensity,Ze.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,Ze.atmosphereMieCoefficient=e.atmosphereMieCoefficient,Ze.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,Ze.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,Ze.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,Ze.perFragmentGroundAtmosphere=O,Ze.hasVertexNormals=F,Ze.useWebMercatorProjection=Ie,Ze.clippedByBoundaries=i.clippedByBoundaries,Ze.hasGeodeticSurfaceNormals=ne,Ze.hasExaggeration=$;let De=i.imagery,Ke=0,rt=De.length,Xt=e.showSkirts&&!d&&!f,Ht=e.backFaceCulling&&!d&&!f,qe=Ht?e._renderState:e._disableCullingRenderState,mn=Ht?e._blendRenderState:e._disableCullingBlendRenderState,Dt=qe,Lt=e._firstPassInitialColor,Vi=n.context;if(c(e._debug.boundingSphereTile)||$O(),e._materialUniformMap!==e.materialUniformMap){e._materialUniformMap=e.materialUniformMap;let ge=e._drawCommands.length;for(let Le=0;Le<ge;++Le)e._uniformMaps[Le]=ige(n,e)}do{let ge=0,Le,yn;if(e._drawCommands.length<=e._usedDrawCommands?(Le=new et,Le.owner=t,Le.cull=!1,Le.boundingVolume=new ue,Le.orientedBoundingBox=void 0,yn=ige(n,e),e._drawCommands.push(Le),e._uniformMaps.push(yn)):(Le=e._drawCommands[e._usedDrawCommands],yn=e._uniformMaps[e._usedDrawCommands]),Le.owner=t,++e._usedDrawCommands,t===e._debug.boundingSphereTile){let aa=Q.boundingVolume,_l=Q.boundingSphere;c(aa)?age(aa,Y.RED).update(n):c(_l)&&cge(_l,Y.RED).update(n)}let bt=yn.properties;ce.clone(Lt,bt.initialColor),bt.oceanNormalMap=I,bt.lightingFadeDistance.x=e.lightingFadeOutDistance,bt.lightingFadeDistance.y=e.lightingFadeInDistance,bt.nightFadeDistance.x=e.nightFadeOutDistance,bt.nightFadeDistance.y=e.nightFadeInDistance,bt.atmosphereLightIntensity=e.atmosphereLightIntensity,bt.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,bt.atmosphereMieCoefficient=e.atmosphereMieCoefficient,bt.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,bt.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,bt.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,bt.zoomedOutOceanSpecularIntensity=e.zoomedOutOceanSpecularIntensity;let ro=d?y:p,Xo=d?p:y;c(ro)&&(ce.fromElements(ro.near,ro.nearValue,ro.far,ro.farValue,bt.frontFaceAlphaByDistance),ce.fromElements(Xo.near,Xo.nearValue,Xo.far,Xo.farValue,bt.backFaceAlphaByDistance)),ce.fromElements(x.near,x.nearValue,x.far,x.farValue,bt.undergroundColorAlphaByDistance),Y.clone(g,bt.undergroundColor),bt.lambertDiffuseMultiplier=V,bt.vertexShadowDarkness=Z;let ra=!c(i.vertexArray)&&c(e.fillHighlightColor)&&e.fillHighlightColor.alpha>0;ra&&Y.clone(e.fillHighlightColor,bt.fillHighlightColor),bt.verticalExaggerationAndRelativeHeight.x=ie,bt.verticalExaggerationAndRelativeHeight.y=j,bt.center3D=H.center,m.clone(U,bt.rtc),ce.clone(be,bt.tileRectangle),bt.southAndNorthLatitude.x=Ce,bt.southAndNorthLatitude.y=me,bt.southMercatorYAndOneOverHeight.x=_e,bt.southMercatorYAndOneOverHeight.y=Ve;let Wr=Sct,_s=qO(t.rectangle,e.cartographicLimitRectangle),Ae=Cct,st=qO(t.rectangle,h);m.fromElements(W,A,k,bt.hsbShift);let Qe=t.rectangle,$e=1/Qe.width,yt=1/Qe.height;Wr.x=(_s.west-Qe.west)*$e,Wr.y=(_s.south-Qe.south)*yt,Wr.z=(_s.east-Qe.west)*$e,Wr.w=(_s.north-Qe.south)*yt,ce.clone(Wr,bt.localizedCartographicLimitRectangle),Ae.x=(st.west-Qe.west)*$e,Ae.y=(st.south-Qe.south)*yt,Ae.z=(st.east-Qe.west)*$e,Ae.w=(st.north-Qe.south)*yt,ce.clone(Ae,bt.localizedTranslucencyRectangle);let Bt=N&&w.fog(t._distance,n.fog.density)>w.EPSILON3;B=B&&(Bt||b);let Ln=!1,Io=!1,To=!1,Ka=!1,Ja=!1,Li=!1,bi=!1,sa=!1,Qr=!1,xl=!1;for(;ge<s&&Ke<rt;){let aa=De[Ke],_l=aa.readyImagery;if(++Ke,!c(_l)||_l.imageryLayer.alpha===0)continue;let ja=aa.useWebMercatorT?_l.textureWebMercator:_l.texture;if(!c(ja))throw new L("readyImagery is not actually ready!");let ds=_l.imageryLayer;c(aa.textureTranslationAndScale)||(aa.textureTranslationAndScale=ds._calculateTextureTranslationAndScale(t,aa)),bt.dayTextures[ge]=ja,bt.dayTextureTranslationAndScale[ge]=aa.textureTranslationAndScale,bt.dayTextureTexCoordsRectangle[ge]=aa.textureCoordinateRectangle,bt.dayTextureUseWebMercatorT[ge]=aa.useWebMercatorT,bt.dayTextureAlpha[ge]=ds.alpha,Li=Li||bt.dayTextureAlpha[ge]!==1,bt.dayTextureNightAlpha[ge]=ds.nightAlpha,bi=bi||bt.dayTextureNightAlpha[ge]!==1,bt.dayTextureDayAlpha[ge]=ds.dayAlpha,bi=bi||bt.dayTextureDayAlpha[ge]!==1,bt.dayTextureBrightness[ge]=ds.brightness,Ln=Ln||bt.dayTextureBrightness[ge]!==Ya.DEFAULT_BRIGHTNESS,bt.dayTextureContrast[ge]=ds.contrast,Io=Io||bt.dayTextureContrast[ge]!==Ya.DEFAULT_CONTRAST,bt.dayTextureHue[ge]=ds.hue,To=To||bt.dayTextureHue[ge]!==Ya.DEFAULT_HUE,bt.dayTextureSaturation[ge]=ds.saturation,Ka=Ka||bt.dayTextureSaturation[ge]!==Ya.DEFAULT_SATURATION,bt.dayTextureOneOverGamma[ge]=1/ds.gamma,Ja=Ja||bt.dayTextureOneOverGamma[ge]!==1/Ya.DEFAULT_GAMMA,bt.dayTextureSplit[ge]=ds.splitDirection,sa=sa||bt.dayTextureSplit[ge]!==0;let uu=bt.dayTextureCutoutRectangles[ge];if(c(uu)||(uu=bt.dayTextureCutoutRectangles[ge]=new ce),ce.clone(ce.ZERO,uu),c(ds.cutoutRectangle)){let Ao=qO(Qe,ds.cutoutRectangle),dn=de.simpleIntersection(Ao,Qe,rge);Qr=c(dn)||Qr,uu.x=(Ao.west-Qe.west)*$e,uu.y=(Ao.south-Qe.south)*yt,uu.z=(Ao.east-Qe.west)*$e,uu.w=(Ao.north-Qe.south)*yt}let mu=bt.colorsToAlpha[ge];c(mu)||(mu=bt.colorsToAlpha[ge]=new ce);let fu=c(ds.colorToAlpha)&&ds.colorToAlphaThreshold>0;if(xl=xl||fu,fu){let Ao=ds.colorToAlpha;mu.x=Ao.red,mu.y=Ao.green,mu.z=Ao.blue,mu.w=ds.colorToAlphaThreshold}else mu.w=-1;if(c(_l.credits)){let Ao=_l.credits;for(let dn=0,Re=Ao.length;dn<Re;++dn)o.addCreditToNextFrame(Ao[dn])}++ge}bt.dayTextures.length=ge,bt.waterMask=a,ce.clone(l,bt.waterMaskTranslationAndScale),bt.minMaxHeight.x=K.minimumHeight,bt.minMaxHeight.y=K.maximumHeight,M.clone(K.matrix,bt.scaleAndBias);let yo=e._clippingPlanes,wr=c(yo)&&yo.enabled&&t.isClipped;wr&&(bt.clippingPlanesEdgeColor=Y.clone(yo.edgeColor,bt.clippingPlanesEdgeColor),bt.clippingPlanesEdgeWidth=yo.edgeWidth);let gp=e._clippingPolygons,jr=c(gp)&&gp.enabled&&t.isClipped;Ze.numberOfDayTextures=ge,Ze.applyBrightness=Ln,Ze.applyContrast=Io,Ze.applyHue=To,Ze.applySaturation=Ka,Ze.applyGamma=Ja,Ze.applyAlpha=Li,Ze.applyDayNightAlpha=bi,Ze.applySplit=sa,Ze.enableFog=Bt,Ze.enableClippingPlanes=wr,Ze.clippingPlanes=yo,Ze.enableClippingPolygons=jr,Ze.clippingPolygons=gp,Ze.hasImageryLayerCutout=Qr,Ze.colorCorrect=B,Ze.highlightFillTile=ra,Ze.colorToAlpha=xl,Ze.showUndergroundColor=S,Ze.translucent=f;let du=i.renderedMesh.indices.length;Xt||(du=i.renderedMesh.indexCountWithoutSkirts),Le.shaderProgram=e._surfaceShaderSet.getShaderProgram(Ze),Le.castShadows=G,Le.receiveShadows=X,Le.renderState=Dt,Le.primitiveType=ve.TRIANGLES,Le.vertexArray=i.vertexArray||i.fill.vertexArray,Le.count=du,Le.uniformMap=yn,Le.pass=Xe.GLOBE,e._debug.wireframe&&(Wct(Vi,e,t),c(i.wireframeVertexArray)&&(Le.vertexArray=i.wireframeVertexArray,Le.primitiveType=ve.LINES,Le.count=du*2));let Qa=Le.boundingVolume,ex=Le.orientedBoundingBox;n.mode!==se.SCENE3D?(ue.fromRectangleWithHeights2D(t.rectangle,n.mapProjection,Q.minimumHeight,Q.maximumHeight,Qa),m.fromElements(Qa.center.z,Qa.center.x,Qa.center.y,Qa.center),n.mode===se.MORPHING&&(Qa=ue.union(Q.boundingSphere,Qa,Qa))):(Le.boundingVolume=ue.clone(Q.boundingSphere,Qa),Le.orientedBoundingBox=Xn.clone(Q.boundingVolume,ex)),Le.dirty=!0,f&&u.updateDerivedCommands(Le,n),oge(Le,n),Dt=mn,Lt=Pct}while(Ke<rt)}var mF=ar;var tFi=_(T(),1);function lge(){this._enabled=!1,this._frontFaceAlpha=1,this._frontFaceAlphaByDistance=void 0,this._backFaceAlpha=1,this._backFaceAlphaByDistance=void 0,this._rectangle=de.clone(de.MAX_VALUE)}Object.defineProperties(lge.prototype,{enabled:{get:function(){return this._enabled},set:function(e){C.typeOf.bool("enabled",e),this._enabled=e}},frontFaceAlpha:{get:function(){return this._frontFaceAlpha},set:function(e){C.typeOf.number.greaterThanOrEquals("frontFaceAlpha",e,0),C.typeOf.number.lessThanOrEquals("frontFaceAlpha",e,1),this._frontFaceAlpha=e}},frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance},set:function(e){if(c(e)&&e.far<e.near)throw new L("far distance must be greater than near distance.");this._frontFaceAlphaByDistance=Nt.clone(e,this._frontFaceAlphaByDistance)}},backFaceAlpha:{get:function(){return this._backFaceAlpha},set:function(e){C.typeOf.number.greaterThanOrEquals("backFaceAlpha",e,0),C.typeOf.number.lessThanOrEquals("backFaceAlpha",e,1),this._backFaceAlpha=e}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance},set:function(e){if(c(e)&&e.far<e.near)throw new L("far distance must be greater than near distance.");this._backFaceAlphaByDistance=Nt.clone(e,this._backFaceAlphaByDistance)}},rectangle:{get:function(){return this._rectangle},set:function(e){c(e)||(e=de.clone(de.MAX_VALUE)),de.clone(e,this._rectangle)}}});var fF=lge;var dFi=_(T(),1);function Ps(){this._layers=[],this.layerAdded=new ye,this.layerRemoved=new ye,this.layerMoved=new ye,this.layerShownOrHidden=new ye}Object.defineProperties(Ps.prototype,{length:{get:function(){return this._layers.length}}});Ps.prototype.add=function(e,t){let n=c(t);if(!c(e))throw new L("layer is required.");if(n){if(t<0)throw new L("index must be greater than or equal to zero.");if(t>this._layers.length)throw new L("index must be less than or equal to the number of layers.")}n?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()})};Ps.prototype.addImageryProvider=function(e,t){if(!c(e))throw new L("imageryProvider is required.");let n=new Ya(e);return this.add(n,t),n};Ps.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};Ps.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=[]};Ps.prototype.contains=function(e){return this.indexOf(e)!==-1};Ps.prototype.indexOf=function(e){return this._layers.indexOf(e)};Ps.prototype.get=function(e){if(!c(e))throw new L("index is required.","index");return this._layers[e]};function eD(e,t){if(!c(t))throw new L("layer is required.");let n=e.indexOf(t);if(n===-1)throw new L("layer is not in this collection.");return n}function dge(e,t,n){let i=e._layers;if(t=w.clamp(t,0,i.length-1),n=w.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)}Ps.prototype.raise=function(e){let t=eD(this._layers,e);dge(this,t,t+1)};Ps.prototype.lower=function(e){let t=eD(this._layers,e);dge(this,t,t-1)};Ps.prototype.raiseToTop=function(e){let t=eD(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))};Ps.prototype.lowerToBottom=function(e){let t=eD(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 Nct=new de;function uge(e,t,n,i){let o=e.globe._surface._tilesToRender,r;for(let a=0;!c(r)&&a<o.length;++a){let l=o[a];de.contains(l.rectangle,t)&&(r=l)}if(!c(r))return;let s=r.data.imagery;for(let a=s.length-1;a>=0;--a){let l=s[a],d=l.readyImagery;if(!c(d)||!d.imageryLayer.ready)continue;let u=d.imageryLayer.imageryProvider;if(n&&!c(u.pickFeatures)||!de.contains(d.rectangle,t))continue;let f=Nct,p=1/1024;f.west=w.lerp(r.rectangle.west,r.rectangle.east,l.textureCoordinateRectangle.x-p),f.east=w.lerp(r.rectangle.west,r.rectangle.east,l.textureCoordinateRectangle.z+p),f.south=w.lerp(r.rectangle.south,r.rectangle.north,l.textureCoordinateRectangle.y-p),f.north=w.lerp(r.rectangle.south,r.rectangle.north,l.textureCoordinateRectangle.w+p),de.contains(f,t)&&i(d)}}Ps.prototype.pickImageryLayers=function(e,t){let n=t.globe.pick(e,t);if(!c(n))return;let i=t.ellipsoid.cartesianToCartographic(n),o=[];if(uge(t,i,!1,function(r){o.push(r.imageryLayer)}),o.length!==0)return o};Ps.prototype.pickImageryLayerFeatures=function(e,t){let n=t.globe.pick(e,t);if(!c(n))return;let i=t.ellipsoid.cartesianToCartographic(n),o=[],r=[];if(uge(t,i,!0,function(s){if(!s.imageryLayer.ready)return;let l=s.imageryLayer.imageryProvider.pickFeatures(s.x,s.y,s.level,i.longitude,i.latitude);c(l)&&(o.push(l),r.push(s.imageryLayer))}),o.length!==0)return Promise.all(o).then(function(s){let a=[];for(let l=0;l<s.length;++l){let d=s[l],u=r[l];if(c(d)&&d.length>0)for(let f=0;f<d.length;++f){let p=d[f];p.imageryLayer=u,c(p.position)||(p.position=i),a.push(p)}}return a})};Ps.prototype.queueReprojectionCommands=function(e){let t=this._layers;for(let n=0,i=t.length;n<i;++n)t[n].queueReprojectionCommands(e)};Ps.prototype.cancelReprojections=function(){let e=this._layers;for(let t=0,n=e.length;t<n;++t)e[t].cancelReprojections()};Ps.prototype.isDestroyed=function(){return!1};Ps.prototype.destroy=function(){return this.removeAll(!0),he(this)};Ps.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&&(c(i._show)&&(c(n)||(n=[]),n.push(i)),i._show=i.show);if(c(n))for(o=0,r=n.length;o<r;++o)i=n[o],this.layerShownOrHidden.raiseEvent(i,i._layerIndex,i.show)};var hF=Ps;var YFi=_(T(),1);var hFi=_(T(),1);function mge(e){this._ellipsoid=new kb(e.ellipsoid,m.ZERO)}Object.defineProperties(mge.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var pF=mge;var TFi=_(T(),1);var u4=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()}},kct=1e3;function ea(e){if(!c(e))throw new L("options is required.");if(c(e.x))if(c(e.y)){if(e.x<0||e.y<0)throw new L("options.x and options.y must be greater than or equal to zero.")}else throw new L("options.y is required.");else throw new L("options.x is required.");if(!c(e.level))throw new L("options.level is required and must be greater than or equal to zero.");if(!c(e.tilingScheme))throw new L("options.tilingScheme is required.");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=Jn.NONE,this._lastSelectionResultFrame=void 0,this._loadedCallbacks={},this._positionCache=new u4(kct),this.state=$s.START,this.renderable=!1,this.upsampledFromParent=!1,this.data=void 0}ea.createLevelZeroTiles=function(e){if(!c(e))throw new L("tilingScheme is required.");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 Uct=256;function Oct(e,t,n,i){let o=n.width/Uct*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 Oct(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(c(t)&&c(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],de.contains(s,r.positionCartographic)&&i.push(r);this._frameUpdated=e}else{let a=this._parent;if(c(a)&&this._frameUpdated!==a._frameUpdated){i.length=0,s=this._rectangle;let l=a.customData;for(o=0;o<l.length;++o)r=l[o],de.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 c(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 c(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 c(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 c(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<$s.DONE}},eligibleForUnloading:{get:function(){let e=!0;return c(this.data)&&(e=this.data.eligibleForUnloading,c(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=$s.START,this.renderable=!1,this.upsampledFromParent=!1,c(this.data)&&c(this.data.freeResources)&&this.data.freeResources(),tD(this._southwestChild),this._southwestChild=void 0,tD(this._southeastChild),this._southeastChild=void 0,tD(this._northwestChild),this._northwestChild=void 0,tD(this._northeastChild),this._northeastChild=void 0};function tD(e){c(e)&&e.freeResources()}var bF=ea;var VFi=_(T(),1);function nD(){this.head=void 0,this.tail=void 0,this.count=0,this._lastBeforeStartOfFrame=void 0}nD.prototype.markStartOfRenderFrame=function(){this._lastBeforeStartOfFrame=this.head};nD.prototype.trimTiles=function(e){let t=this.tail,n=!0;for(;n&&c(this._lastBeforeStartOfFrame)&&this.count>e&&c(t);){n=t!==this._lastBeforeStartOfFrame;let i=t.replacementPrevious;t.eligibleForUnloading&&(t.freeResources(),fge(this,t)),t=i}};function fge(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}nD.prototype.markTileRendered=function(e){let t=this.head;if(t===e){e===this._lastBeforeStartOfFrame&&(this._lastBeforeStartOfFrame=e.replacementNext);return}if(++this.count,!c(t)){e.replacementPrevious=void 0,e.replacementNext=void 0,this.head=e,this.tail=e;return}(c(e.replacementPrevious)||c(e.replacementNext))&&fge(this,e),e.replacementPrevious=void 0,e.replacementNext=t,t.replacementPrevious=e,this.head=e};var yF=nD;function fm(e){if(!c(e)||!c(e.tileProvider))throw new L("options.tileProvider is required.");if(c(e.tileProvider.quadtree))throw new L("A QuadtreeTileProvider can only be used with a single QuadtreePrimitive");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 yF,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 pF({ellipsoid:n}),this._tileLoadProgressEvent=new ye,this._lastTileLoadQueueLength=0,this._lastSelectionFrameNumber=void 0}Object.defineProperties(fm.prototype,{tileProvider:{get:function(){return this._tileProvider}},tileLoadProgressEvent:{get:function(){return this._tileLoadProgressEvent}},occluders:{get:function(){return this._occluders}}});fm.prototype.invalidateAllTiles=function(){this._tilesInvalidated=!0};function Dct(e){let t=e._tileReplacementQueue;t.head=void 0,t.tail=void 0,t.count=0,pge(e);let n=e._levelZeroTiles;if(c(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 l=r[a];l.level=0,e._addHeightCallbacks.push(l)}n[i].freeResources()}e._levelZeroTiles=void 0,e._tileProvider.cancelReprojections()}fm.prototype.forEachLoadedTile=function(e){let t=this._tileReplacementQueue.head;for(;c(t);)t.state!==$s.START&&e(t),t=t.replacementNext};fm.prototype.forEachRenderedTile=function(e){let t=this._tilesToRender;for(let n=0,i=t.length;n<i;++n)e(t[n])};fm.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};fm.prototype.update=function(e){c(this._tileProvider.update)&&this._tileProvider.update(e)};function pge(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}fm.prototype.beginFrame=function(e){e.passes.render&&(this._tilesInvalidated&&(Dct(this),this._tilesInvalidated=!1),this._tileProvider.initialize(e),pge(this),!this._debug.suspendLodUpdate&&this._tileReplacementQueue.markStartOfRenderFrame())};fm.prototype.render=function(e){let t=e.passes,n=this._tileProvider;t.render&&(n.beginUpdate(e),zct(this,e),ilt(this,e),n.endUpdate(e)),t.pick&&this._tilesToRender.length>0&&n.updateForPick(e)};function Bct(e,t){let n=e._tileLoadQueueHigh.length+e._tileLoadQueueMedium.length+e._tileLoadQueueLow.length;if(n!==e._lastTileLoadQueueLength||e._tilesInvalidated){let o=ye.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))}fm.prototype.endFrame=function(e){!e.passes.render||e.mode===se.MORPHING||($ct(this,e),nlt(this,e),Bct(this,e))};fm.prototype.isDestroyed=function(){return!1};fm.prototype.destroy=function(){this._tileProvider=this._tileProvider&&this._tileProvider.destroy()};var xF,hge=new pe;function Yct(e,t){let n=de.center(e.rectangle,hge),i=n.longitude-xF.longitude,o=n.latitude-xF.latitude;n=de.center(t.rectangle,hge);let r=n.longitude-xF.longitude,s=n.latitude-xF.latitude;return i*i+o*o-(r*r+s*s)}var Hct=new m,gF=[];function zct(e,t){let n=e._debug;if(n.suspendLodUpdate)return;let i=e._tilesToRender;i.length=0;let o,r=e._tileProvider;if(!c(e._levelZeroTiles)){let g=r.tilingScheme;if(c(g)){let x=r.tilingScheme;e._levelZeroTiles=bF.createLevelZeroTiles(x);let S=e._levelZeroTiles.length;if(gF.length<S)for(gF=new Array(S),o=0;o<S;++o)gF[o]===void 0&&(gF[o]=new _F)}else return}e._occluders.ellipsoid.cameraPosition=t.camera.positionWC;let s,a=e._levelZeroTiles,l=a.length>1?e._occluders:void 0;xF=t.camera.positionCartographic,a.sort(Yct);let d=e._addHeightCallbacks,u=e._removeHeightCallbacks,f=t.frameNumber,p;if(d.length>0||u.length>0){for(o=0,p=a.length;o<p;++o)s=a[o],s._updateCustomData(f,d,u);d.length=0,u.length=0}let y=t.camera;e._cameraPositionCartographic=y.positionCartographic;let h=M.getTranslation(y.transform,Hct);for(e._cameraReferenceFrameOriginCartographic=e.tileProvider.tilingScheme.ellipsoid.cartesianToCartographic(h,e._cameraReferenceFrameOriginCartographic),o=0,p=a.length;o<p;++o)s=a[o],e._tileReplacementQueue.markTileRendered(s),s.renderable?Ha(e,s,r,t,l,!1,gF[o]):(f0(e,e._tileLoadQueueHigh,s,t),++n.tilesWaitingForChildren);e._lastSelectionFrameNumber=f}function f0(e,t,n,i){n.needsLoading&&(e.tileProvider.computeTileLoadPriority!==void 0&&(n._loadPriority=e.tileProvider.computeTileLoadPriority(n,i)),t.push(n))}function _F(){this.allAreRenderable=!0,this.anyWereRenderedLastFrame=!1,this.notYetRenderableCount=0}function bge(){this.southwest=new _F,this.southeast=new _F,this.northwest=new _F,this.northeast=new _F}bge.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 f4=new Array(31);for(let e=0;e<f4.length;++e)f4[e]=new bge;function Kct(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=jct(e,t,n)<e.maximumScreenSpaceError,a=n.southwestChild,l=n.southeastChild,d=n.northwestChild,u=n.northeastChild,f=e._lastSelectionFrameNumber,p=n._lastSelectionResultFrame===f?n._lastSelectionResult:Jn.NONE,y=e.tileProvider;if(s||i){let h=Jn.originalResult(p)===Jn.RENDERED,g=Jn.originalResult(p)===Jn.CULLED||p===Jn.NONE,x=n.state===$s.DONE,S=h||g||x;if(S||c(y.canRenderWithoutLosingDetail)&&(S=y.canRenderWithoutLosingDetail(n)),S){s&&f0(e,e._tileLoadQueueMedium,n,t),iD(e,n),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===Jn.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=Jn.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}i=!0,s&&f0(e,e._tileLoadQueueHigh,n,t)}if(y.canRefine(n)){if(a.upsampledFromParent&&l.upsampledFromParent&&d.upsampledFromParent&&u.upsampledFromParent){iD(e,n),f0(e,e._tileLoadQueueMedium,n,t),e._tileReplacementQueue.markTileRendered(a),e._tileReplacementQueue.markTileRendered(l),e._tileReplacementQueue.markTileRendered(d),e._tileReplacementQueue.markTileRendered(u),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===Jn.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=Jn.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=Jn.REFINED;let g=e._tilesToRender.length,x=e._tileLoadQueueLow.length,S=e._tileLoadQueueMedium.length,V=e._tileLoadQueueHigh.length,Z=e._tileToUpdateHeights.length;if(Jct(e,a,l,d,u,t,i,o),g!==e._tilesToRender.length){let R=o.allAreRenderable,E=o.anyWereRenderedLastFrame,I=o.notYetRenderableCount,v=!1;if(!R&&!E){let P=e._tilesToRender;for(let N=g;N<P.length;++N){let b=P[N];for(;b!==void 0&&b._lastSelectionResult!==Jn.KICKED&&b!==n;)b._lastSelectionResult=Jn.kick(b._lastSelectionResult),b=b.parent}e._tilesToRender.length=g,e._tileToUpdateHeights.length=Z,iD(e,n),n._lastSelectionResult=Jn.RENDERED;let F=p===Jn.RENDERED;!F&&I>e.loadingDescendantLimit&&(e._tileLoadQueueLow.length=x,e._tileLoadQueueMedium.length=S,e._tileLoadQueueHigh.length=V,f0(e,e._tileLoadQueueMedium,n,t),o.notYetRenderableCount=n.renderable?0:1,v=!0),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=F,F||e._tileToUpdateHeights.push(n),++r.tilesWaitingForChildren}e.preloadAncestors&&!v&&f0(e,e._tileLoadQueueLow,n,t)}return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=Jn.RENDERED,iD(e,n),f0(e,e._tileLoadQueueHigh,n,t),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===Jn.RENDERED,o.notYetRenderableCount=n.renderable?0:1}function Jct(e,t,n,i,o,r,s,a){let l=r.camera.positionCartographic,d=e._tileProvider,u=e._occluders,f=f4[t.level],p=f.southwest,y=f.southeast,h=f.northwest,g=f.northeast;l.longitude<t.rectangle.east?l.latitude<t.rectangle.north?(Ha(e,t,d,r,u,s,p),Ha(e,n,d,r,u,s,y),Ha(e,i,d,r,u,s,h),Ha(e,o,d,r,u,s,g)):(Ha(e,i,d,r,u,s,h),Ha(e,t,d,r,u,s,p),Ha(e,o,d,r,u,s,g),Ha(e,n,d,r,u,s,y)):l.latitude<t.rectangle.north?(Ha(e,n,d,r,u,s,y),Ha(e,t,d,r,u,s,p),Ha(e,o,d,r,u,s,g),Ha(e,i,d,r,u,s,h)):(Ha(e,o,d,r,u,s,g),Ha(e,i,d,r,u,s,h),Ha(e,n,d,r,u,s,y),Ha(e,t,d,r,u,s,p)),f.combine(a)}function Qct(e,t){let n=t.rectangle;return c(e._cameraPositionCartographic)&&de.contains(n,e._cameraPositionCartographic)||c(e._cameraReferenceFrameOriginCartographic)&&de.contains(n,e._cameraReferenceFrameOriginCartographic)}function Ha(e,t,n,i,o,r,s){if(n.computeTileVisibility(t,i,o)!==yr.NONE)return Kct(e,i,t,r,s);if(++e._debug.tilesCulled,e._tileReplacementQueue.markTileRendered(t),s.allAreRenderable=!0,s.anyWereRenderedLastFrame=!1,s.notYetRenderableCount=0,Qct(e,t)){(!c(t.data)||!c(t.data.vertexArray))&&f0(e,e._tileLoadQueueMedium,t,i);let a=e._lastSelectionFrameNumber,l=t._lastSelectionResultFrame===a?t._lastSelectionResult:Jn.NONE;l!==Jn.CULLED_BUT_NEEDED&&l!==Jn.RENDERED&&e._tileToUpdateHeights.push(t),t._lastSelectionResult=Jn.CULLED_BUT_NEEDED}else e.preloadSiblings||t.level===0?(f0(e,e._tileLoadQueueLow,t,i),t._lastSelectionResult=Jn.CULLED):t._lastSelectionResult=Jn.CULLED;t._lastSelectionResultFrame=i.frameNumber}function jct(e,t,n){if(t.mode===se.SCENE2D||t.camera.frustum instanceof sn||t.camera.frustum instanceof Oo)return qct(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-=w.fog(o,t.fog.density)*t.fog.sse),a/=t.pixelRatio,a}function qct(e,t,n){let o=t.camera.frustum,r=o.offCenterFrustum;c(r)&&(o=r);let s=t.context,a=s.drawingBufferWidth,l=s.drawingBufferHeight,d=e._tileProvider.getLevelMaximumGeometricError(n.level),u=Math.max(o.top-o.bottom,o.right-o.left)/Math.max(a,l),f=d/u;return t.fog.enabled&&t.mode!==se.SCENE2D&&(f-=w.fog(n._distance,t.fog.density)*t.fog.sse),f/=t.pixelRatio,f}function iD(e,t){e._tilesToRender.push(t)}function $ct(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=Ti()+e._loadQueueTimeSlice,s=e._tileProvider,a=m4(e,t,s,r,n,!1);a=m4(e,t,s,r,i,a),m4(e,t,s,r,o,a)}function elt(e,t){return e._loadPriority-t._loadPriority}function m4(e,t,n,i,o,r){n.computeTileLoadPriority!==void 0&&o.sort(elt);for(let s=0,a=o.length;s<a&&(Ti()<i||!r);++s){let l=o[s];e._tileReplacementQueue.markTileRendered(l),n.loadTile(t,l),r=!0}return r}var aL=new bn,oD=new pe,Gg=new m,tlt=[];function nlt(e,t){if(!c(e.tileProvider.tilingScheme))return;let n=tlt;n.length=0;let i=e._tileToUpdateHeights,o=Ti(),r=e._updateHeightsTimeSlice,s=o+r,a=t.mode,l=t.mapProjection,d=e.tileProvider.tilingScheme.ellipsoid,u;for(;i.length>0;){let f=i[0];if(!c(f.data)||!c(f.data.mesh)){let g=f._lastSelectionResultFrame===e._lastSelectionFrameNumber?f._lastSelectionResult:Jn.NONE;(g===Jn.RENDERED||g===Jn.CULLED_BUT_NEEDED)&&n.push(f),f.clearPositionCache(),i.shift(),e._lastTileIndex=0;continue}let p=f.customData,y=p.length,h=!1;for(u=e._lastTileIndex;u<y;++u){let g=p[u],x=f.data.terrainData,S=c(x)&&x.wasCreatedByUpsampling();if(f.level>g.level&&!S){let V,Z=f.getPositionCacheEntry(g.positionCartographic,e.maximumScreenSpaceError);if(c(Z))V=Z;else{if(c(g.positionOnEllipsoidSurface)||(g.positionOnEllipsoidSurface=m.fromRadians(g.positionCartographic.longitude,g.positionCartographic.latitude,0,d)),a===se.SCENE3D){let R=d.geodeticSurfaceNormal(g.positionOnEllipsoidSurface,aL.direction),E=d.getSurfaceNormalIntersectionWithZAxis(g.positionOnEllipsoidSurface,11500,aL.origin);if(!c(E)){let I=0;c(f.data.tileBoundingRegion)&&(I=f.data.tileBoundingRegion.minimumHeight);let v=Math.min(I,-11500),P=m.multiplyByScalar(R,Math.abs(v)+1,Gg);m.subtract(g.positionOnEllipsoidSurface,P,aL.origin)}}else pe.clone(g.positionCartographic,oD),oD.height=-11500,l.project(oD,Gg),m.fromElements(Gg.z,Gg.x,Gg.y,Gg),m.clone(Gg,aL.origin),m.clone(m.UNIT_X,aL.direction);V=f.data.pick(aL,a,l,!1,Gg),c(V)&&f.setPositionCacheEntry(g.positionCartographic,e.maximumScreenSpaceError,V)}if(c(V)){if(c(g.callback)){let R=d.cartesianToCartographic(V,oD);g.callback(R)}g.level=f.level}}if(Ti()>=s){h=!0;break}}if(h){e._lastTileIndex=u;break}else e._lastTileIndex=0,i.shift()}for(u=0;u<n.length;u++)i.push(n[u])}function ilt(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 TF=fm;function kf(e){e=e??re.default;let t=new ep({ellipsoid:e}),n=new hF;this._ellipsoid=e,this._imageryLayerCollection=n,this._surfaceShaderSet=new qv,this._material=void 0,this._surface=new TF({tileProvider:new mF({terrainProvider:t,imageryLayers:n,surfaceShaderSet:this._surfaceShaderSet})}),this._terrainProvider=t,this._terrainProviderChanged=new ye,this._undergroundColor=Y.clone(Y.BLACK),this._undergroundColorAlphaByDistance=new Nt(e.maximumRadius/1e3,0,e.maximumRadius/5,1),this._translucency=new fF,p4(this),this.show=!0,this._oceanNormalMapResourceDirty=!0,this._oceanNormalMapResource=new Ge({url:on("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=re.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=w.PI_OVER_TWO*e.minimumRadius,this.lightingFadeInDistance=w.PI*e.minimumRadius,this.nightFadeOutDistance=w.PI_OVER_TWO*e.minimumRadius,this.nightFadeInDistance=5*w.PI_OVER_TWO*e.minimumRadius,this.showWaterEffect=!0,this.depthTestAgainstTerrain=!1,this.shadows=Sn.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(kf.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 c(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){c(e)||(e=de.clone(de.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),c(this._material)&&p4(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,p4(this))}},undergroundColor:{get:function(){return this._undergroundColor},set:function(e){this._undergroundColor=Y.clone(e,this._undergroundColor)}},undergroundColorAlphaByDistance:{get:function(){return this._undergroundColorAlphaByDistance},set:function(e){if(c(e)&&e.far<e.near)throw new L("far distance must be greater than near distance.");this._undergroundColorAlphaByDistance=Nt.clone(e,this._undergroundColorAlphaByDistance)}},translucency:{get:function(){return this._translucency}}});function p4(e){let t=[],n=c(e._material)&&(c(e._material.shaderSource.match(/slope/))||c(e._material.shaderSource.match("normalEC"))),i=[$m,DV];c(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(Nv),e._surfaceShaderSet.baseVertexShaderSource=new Be({sources:[$m,DV,kv],defines:t}),e._surfaceShaderSet.baseFragmentShaderSource=new Be({sources:i,defines:t}),e._surfaceShaderSet.material=e._material}function olt(e){return function(t,n){let i=ue.distanceSquaredTo(t.pickBoundingSphere,e),o=ue.distanceSquaredTo(n.pickBoundingSphere,e);return i-o}}var rlt=[],slt={start:0,stop:0};kf.prototype.pickWorldCoordinates=function(e,t,n,i){if(!c(e))throw new L("ray is required");if(!c(t))throw new L("scene is required");n=n??!0;let o=t.mode,r=t.mapProjection,s=rlt;s.length=0;let a=this._surface._tilesToRender,l=a.length,d,u;for(u=0;u<l;++u){d=a[u];let p=d.data;if(!c(p))continue;let y=p.pickBoundingSphere;if(o!==se.SCENE3D)p.pickBoundingSphere=y=ue.fromRectangleWithHeights2D(d.rectangle,r,p.tileBoundingRegion.minimumHeight,p.tileBoundingRegion.maximumHeight,y),m.fromElements(y.center.z,y.center.x,y.center.y,y.center);else if(c(p.renderedMesh))ue.clone(p.tileBoundingRegion.boundingSphere,y);else continue;let h=qn.raySphere(e,y,slt);c(h)&&s.push(p)}s.sort(olt(e.origin));let f;for(l=s.length,u=0;u<l&&(f=s[u].pick(e,t.mode,t.mapProjection,n,i),!c(f));++u);return f};var alt=new pe;kf.prototype.pick=function(e,t,n){if(n=this.pickWorldCoordinates(e,t,!0,n),c(n)&&t.mode!==se.SCENE3D){n=m.fromElements(n.y,n.z,n.x,n);let i=t.mapProjection.unproject(n,alt);n=this._ellipsoid.cartographicToCartesian(i,n)}return n};var clt=new m,yge=new m,llt=new pe,dlt=new bn;function h4(e,t){return c(e)&&de.contains(e.rectangle,t)?e:void 0}kf.prototype.getHeight=function(e){if(!c(e))throw new L("cartographic is required");let t=this._surface._levelZeroTiles;if(!c(t))return;let n,i,o=t.length;for(i=0;i<o&&(n=t[i],!de.contains(n.rectangle,e));++i);if(i>=o)return;let r=n;for(;c(n);)n=h4(n._southwestChild,e)||h4(n._southeastChild,e)||h4(n._northwestChild,e)||n._northeastChild,c(n)&&c(n.data)&&c(n.data.renderedMesh)&&(r=n);if(n=r,!c(n)||!c(n.data)||!c(n.data.renderedMesh))return;let s=this._surface._tileProvider.tilingScheme.projection,a=this._surface._tileProvider.tilingScheme.ellipsoid,l=m.fromRadians(e.longitude,e.latitude,0,a,clt),d=dlt,u=a.geodeticSurfaceNormal(l,d.direction),f=a.getSurfaceNormalIntersectionWithZAxis(l,11500,d.origin);if(!c(f)){let y;c(n.data.tileBoundingRegion)&&(y=n.data.tileBoundingRegion.minimumHeight);let h=Math.min(y??0,-11500),g=m.multiplyByScalar(u,Math.abs(h)+1,yge);m.subtract(l,g,d.origin)}let p=n.data.pick(d,void 0,s,!1,yge);if(c(p))return a.cartesianToCartographic(p,llt).height};kf.prototype.update=function(e){this.show&&e.passes.render&&this._surface.update(e)};kf.prototype.beginFrame=function(e){let t=this._surface,n=t.tileProvider,i=this.terrainProvider,o=c(i)&&i.hasWaterMask&&i.hasWaterMask;if(o&&this._oceanNormalMapResourceDirty){this._oceanNormalMapResourceDirty=!1;let a=this._oceanNormalMapResource,l=a.url;if(c(l)){let d=this;a.fetchImage().then(function(u){l===d._oceanNormalMapResource.url&&(d._oceanNormalMap=d._oceanNormalMap&&d._oceanNormalMap.destroy(),d._oceanNormalMap=new Pt({context:e.context,source:u}))})}else this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy()}let r=e.passes,s=e.mode;r.render&&(this.showGroundAtmosphere?this._zoomedOutOceanSpecularIntensity=.4:this._zoomedOutOceanSpecularIntensity=.5,t.maximumScreenSpaceError=this.maximumScreenSpaceError,t.tileCacheSize=this.tileCacheSize,t.loadingDescendantLimit=this.loadingDescendantLimit,t.preloadAncestors=this.preloadAncestors,t.preloadSiblings=this.preloadSiblings,n.terrainProvider=this.terrainProvider,n.lightingFadeOutDistance=this.lightingFadeOutDistance,n.lightingFadeInDistance=this.lightingFadeInDistance,n.nightFadeOutDistance=this.nightFadeOutDistance,n.nightFadeInDistance=this.nightFadeInDistance,n.zoomedOutOceanSpecularIntensity=s===se.SCENE3D?this._zoomedOutOceanSpecularIntensity:0,n.hasWaterMask=o,n.showWaterEffect=this.showWaterEffect,n.oceanNormalMap=this._oceanNormalMap,n.enableLighting=this.enableLighting,n.dynamicAtmosphereLighting=this.dynamicAtmosphereLighting,n.dynamicAtmosphereLightingFromSun=this.dynamicAtmosphereLightingFromSun,n.showGroundAtmosphere=this.showGroundAtmosphere,n.atmosphereLightIntensity=this.atmosphereLightIntensity,n.atmosphereRayleighCoefficient=this.atmosphereRayleighCoefficient,n.atmosphereMieCoefficient=this.atmosphereMieCoefficient,n.atmosphereRayleighScaleHeight=this.atmosphereRayleighScaleHeight,n.atmosphereMieScaleHeight=this.atmosphereMieScaleHeight,n.atmosphereMieAnisotropy=this.atmosphereMieAnisotropy,n.shadows=this.shadows,n.hueShift=this.atmosphereHueShift,n.saturationShift=this.atmosphereSaturationShift,n.brightnessShift=this.atmosphereBrightnessShift,n.fillHighlightColor=this.fillHighlightColor,n.showSkirts=this.showSkirts,n.backFaceCulling=this.backFaceCulling,n.vertexShadowDarkness=this.vertexShadowDarkness,n.undergroundColor=this._undergroundColor,n.undergroundColorAlphaByDistance=this._undergroundColorAlphaByDistance,n.lambertDiffuseMultiplier=this.lambertDiffuseMultiplier,t.beginFrame(e))};kf.prototype.render=function(e){this.show&&(c(this._material)&&this._material.update(e.context),this._surface.render(e))};kf.prototype.endFrame=function(e){this.show&&e.passes.render&&this._surface.endFrame(e)};kf.prototype.isDestroyed=function(){return!1};kf.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(),he(this)};var SF=kf;var R9i=_(T(),1);var UAi=_(T(),1);var WAi=_(T(),1);var LAi=_(T(),1);function ult(e,t,n,i){this.rightAscension=e,this.declination=t,this.rotation=n,this.rotationRate=i}var CF=ult;var Ige={},mlt=32.184,flt=2451545,gge=-.0529921,xge=-.1059842,_ge=13.0120009,Tge=13.3407154,Sge=.9856003,Cge=26.4057084,Vge=13.064993,Lge=.3287146,Zge=1.7484877,Rge=-.1589763,Gge=.0036096,Ege=.1643573,Xge=12.9590088,b4=new ee;Ige.ComputeMoon=function(e,t){c(e)||(e=ee.now()),b4=ee.addSeconds(e,mlt,b4);let n=ee.totalDays(b4)-flt,i=n/Kn.DAYS_PER_JULIAN_CENTURY,o=(125.045+gge*n)*w.RADIANS_PER_DEGREE,r=(250.089+xge*n)*w.RADIANS_PER_DEGREE,s=(260.008+_ge*n)*w.RADIANS_PER_DEGREE,a=(176.625+Tge*n)*w.RADIANS_PER_DEGREE,l=(357.529+Sge*n)*w.RADIANS_PER_DEGREE,d=(311.589+Cge*n)*w.RADIANS_PER_DEGREE,u=(134.963+Vge*n)*w.RADIANS_PER_DEGREE,f=(276.617+Lge*n)*w.RADIANS_PER_DEGREE,p=(34.226+Zge*n)*w.RADIANS_PER_DEGREE,y=(15.134+Rge*n)*w.RADIANS_PER_DEGREE,h=(119.743+Gge*n)*w.RADIANS_PER_DEGREE,g=(239.961+Ege*n)*w.RADIANS_PER_DEGREE,x=(25.053+Xge*n)*w.RADIANS_PER_DEGREE,S=Math.sin(o),V=Math.sin(r),Z=Math.sin(s),R=Math.sin(a),E=Math.sin(l),I=Math.sin(d),v=Math.sin(u),P=Math.sin(f),F=Math.sin(p),N=Math.sin(y),b=Math.sin(h),G=Math.sin(g),X=Math.sin(x),W=Math.cos(o),A=Math.cos(r),k=Math.cos(s),B=Math.cos(a),O=Math.cos(l),H=Math.cos(d),U=Math.cos(u),K=Math.cos(f),Q=Math.cos(p),ie=Math.cos(y),j=Math.cos(h),$=Math.cos(g),ne=Math.cos(x),be=(269.9949+.0031*i-3.8787*S-.1204*V+.07*Z-.0172*R+.0072*I-.0052*N+.0043*X)*w.RADIANS_PER_DEGREE,Ce=(66.5392+.013*i+1.5419*W+.0239*A-.0278*k+.0068*B-.0029*H+9e-4*U+8e-4*ie-9e-4*ne)*w.RADIANS_PER_DEGREE,me=(38.3213+13.17635815*n-14e-13*n*n+3.561*S+.1208*V-.0642*Z+.0158*R+.0252*E-.0066*I-.0047*v-.0046*P+.0028*F+.0052*N+.004*b+.0019*G-.0044*X)*w.RADIANS_PER_DEGREE,_e=(13.17635815-14e-13*(2*n)+3.561*W*gge+.1208*A*xge-.0642*k*_ge+.0158*B*Tge+.0252*O*Sge-.0066*H*Cge-.0047*U*Vge-.0046*K*Lge+.0028*Q*Zge+.0052*ie*Rge+.004*j*Gge+.0019*$*Ege-.0044*ne*Xge)/86400*w.RADIANS_PER_DEGREE;return c(t)||(t=new CF),t.rightAscension=be,t.declination=Ce,t.rotation=me,t.rotationRate=_e,t};var VF=Ige;function Wge(e){(!c(e)||typeof e!="function")&&(e=VF.ComputeMoon),this._computeFunction=e}var hlt=new m,plt=new m,blt=new m;function ylt(e,t,n){let i=hlt;i.x=Math.cos(e+w.PI_OVER_TWO),i.y=Math.sin(e+w.PI_OVER_TWO),i.z=0;let o=Math.cos(t),r=blt;r.x=o*Math.cos(e),r.y=o*Math.sin(e),r.z=Math.sin(t);let s=m.cross(r,i,plt);return c(n)||(n=new te),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 glt=new te,xlt=new Fe;Wge.prototype.evaluate=function(e,t){c(e)||(e=ee.now());let n=this._computeFunction(e),i=ylt(n.rightAscension,n.declination,t),o=w.zeroToTwoPi(n.rotation),r=Fe.fromAxisAngle(m.UNIT_Z,o,xlt),s=te.fromQuaternion(Fe.conjugate(r,r),glt);return te.multiply(s,i,i)};var LF=Wge;var m9i=_(T(),1);var y4={position:0};function rD(e){e=e??z.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=M.clone(e.modelMatrix??M.IDENTITY),this._modelMatrix=new M,this._computedModelMatrix=new M,this.show=e.show??!0,this.material=e.material??zi.fromType(zi.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 et({owner:e._owner??this}),this._pickCommand=new et({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 _lt(e){let t=e.cache.ellipsoidPrimitive_vertexArray;if(c(t))return t;let n=Wa.createGeometry(Wa.fromDimensions({dimensions:new m(2,2,2),vertexFormat:We.POSITION_ONLY}));return t=ni.fromGeometry({context:e,geometry:n,attributeLocations:y4,bufferUsage:Ne.STATIC_DRAW,interleave:!0}),e.cache.ellipsoidPrimitive_vertexArray=t,t}rD.prototype.update=function(e){if(!this.show||e.mode!==se.SCENE3D||!c(this.center)||!c(this.radii))return;if(!c(this.material))throw new L("this.material must be defined.");let t=e.context,n=this.material.isTranslucent(),i=this._translucent!==n;(!c(this._rs)||i)&&(this._translucent=n,this._rs=Oe.fromCache({cull:{enabled:!0,face:_i.FRONT},depthTest:{enabled:this._depthTestEnabled},depthMask:!n&&t.fragmentDepth,blending:n?un.ALPHA_BLEND:void 0})),c(this._va)||(this._va=_lt(t));let o=!1,r=this.radii;if(!m.equals(this._radii,r)){m.clone(r,this._radii);let g=this._oneOverEllipsoidRadiiSquared;g.x=1/(r.x*r.x),g.y=1/(r.y*r.y),g.z=1/(r.z*r.z),o=!0}(!M.equals(this.modelMatrix,this._modelMatrix)||!m.equals(this.center,this._center))&&(M.clone(this.modelMatrix,this._modelMatrix),m.clone(this.center,this._center),M.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 l=e.useLogDepth,d=this._useLogDepth!==l;this._useLogDepth=l;let u=this._colorCommand,f,p;(s||a||i||d)&&(f=new Be({sources:[OV]}),p=new Be({sources:[this.material.shaderSource,UV]}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(f.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH")),this._sp=tn.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:p,attributeLocations:y4}),u.vertexArray=this._va,u.renderState=this._rs,u.shaderProgram=this._sp,u.uniformMap=St(this._uniforms,this.material._uniforms),u.executeInClosestFrustum=n);let y=e.commandList,h=e.passes;if(h.render&&(u.boundingVolume=this._boundingSphere,u.debugShowBoundingVolume=this.debugShowBoundingVolume,u.modelMatrix=this._computedModelMatrix,u.pass=n?Xe.TRANSLUCENT:Xe.OPAQUE,y.push(u)),h.pick){let g=this._pickCommand;(!c(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||!c(this._pickSP)||d)&&(f=new Be({sources:[OV]}),p=new Be({sources:[this.material.shaderSource,UV],pickColorQualifier:"uniform"}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(f.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH")),this._pickSP=tn.replaceCache({context:t,shaderProgram:this._pickSP,vertexShaderSource:f,fragmentShaderSource:p,attributeLocations:y4}),g.vertexArray=this._va,g.renderState=this._rs,g.shaderProgram=this._pickSP,g.uniformMap=St(St(this._uniforms,this._pickUniforms),this.material._uniforms),g.executeInClosestFrustum=n),g.boundingVolume=this._boundingSphere,g.modelMatrix=this._computedModelMatrix,g.pass=n?Xe.TRANSLUCENT:Xe.OPAQUE,y.push(g)}};rD.prototype.isDestroyed=function(){return!1};rD.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(),he(this)};var ZF=rD;function RF(e){e=e??z.EMPTY_OBJECT;let t=e.textureUrl;c(t)||(t=on("Assets/Textures/moonSmall.jpg")),this.show=e.show??!0,this.textureUrl=t,this._ellipsoid=e.ellipsoid??re.MOON,this.onlySunLighting=e.onlySunLighting??!0,this._ellipsoidPrimitive=new ZF({radii:this.ellipsoid.radii,material:zi.fromType(zi.ImageType),depthTestEnabled:!1,_owner:this}),this._ellipsoidPrimitive.material.translucent=!1,this._axes=new LF}Object.defineProperties(RF.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var sD=new te,Tlt=new te,Slt=new m,aD=[];RF.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;c(wt.computeIcrfToFixedMatrix(n,sD))||wt.computeTemeToPseudoFixedMatrix(n,sD);let i=this._axes.evaluate(n,Tlt);te.transpose(i,i),te.multiply(sD,i,i);let o=Y0.computeMoonPositionInEarthInertialFrame(n,Slt);te.multiplyByVector(sD,o,o),M.fromRotationTranslation(i,o,t.modelMatrix);let r=e.commandList;return e.commandList=aD,aD.length=0,t.update(e),e.commandList=r,aD.length===1?aD[0]:void 0};RF.prototype.isDestroyed=function(){return!1};RF.prototype.destroy=function(){return this._ellipsoidPrimitive=this._ellipsoidPrimitive&&this._ellipsoidPrimitive.destroy(),he(this)};var GF=RF;var c6i=_(T(),1);var I9i=_(T(),1);var g4=[],x4=[];function Clt(e,t,n,i,o,r){let s=o-i+1,a=r-o,l=g4,d=x4,u,f;for(u=0;u<s;++u)l[u]=e[i+u];for(f=0;f<a;++f)d[f]=e[o+f+1];u=0,f=0;for(let p=i;p<=r;++p){let y=l[u],h=d[f];u<s&&(f>=a||t(y,h,n)<=0)?(e[p]=y,++u):f<a&&(e[p]=h,++f)}}function _4(e,t,n,i,o){if(i>=o)return;let r=Math.floor((i+o)*.5);_4(e,t,n,i,r),_4(e,t,n,r+1,o),Clt(e,t,n,i,r,o)}function Vlt(e,t,n){if(!c(e))throw new L("array is required.");if(!c(t))throw new L("comparator is required.");let i=e.length,o=Math.ceil(i*.5);g4.length=o,x4.length=o,_4(e,t,n,0,i-1),g4.length=0,x4.length=0}var h0=Vlt;var U9i=_(T(),1);function Gc(e,t){if(!c(e))throw new L("occluderBoundingSphere is required.");if(!c(t))throw new L("camera position is required.");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 cD=new m;Object.defineProperties(Gc.prototype,{position:{get:function(){return this._occluderPosition}},radius:{get:function(){return this._occluderRadius}},cameraPosition:{set:function(e){if(!c(e))throw new L("cameraPosition is required.");e=m.clone(e,this._cameraPosition);let t=m.subtract(this._occluderPosition,e,cD),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,cD);let a=o*o*n;s=m.add(e,m.multiplyByScalar(r,a,cD),cD)}else o=Number.MAX_VALUE;this._horizonDistance=o,this._horizonPlaneNormal=r,this._horizonPlanePosition=s,this._cameraPosition=e}}});Gc.fromBoundingSphere=function(e,t,n){if(!c(e))throw new L("occluderBoundingSphere is required.");if(!c(t))throw new L("camera position is required.");return c(n)?(m.clone(e.center,n._occluderPosition),n._occluderRadius=e.radius,n.cameraPosition=t,n):new Gc(e,t)};var Pge=new m;Gc.prototype.isPointVisible=function(e){if(this._horizonDistance!==Number.MAX_VALUE){let t=m.subtract(e,this._occluderPosition,Pge),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 Llt=new m;Gc.prototype.isBoundingSphereVisible=function(e){let t=m.clone(e.center,Llt),n=e.radius;if(this._horizonDistance!==Number.MAX_VALUE){let i=m.subtract(t,this._occluderPosition,Pge),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 Zlt=new m;Gc.prototype.computeVisibility=function(e){if(!c(e))throw new L("occludeeBS is required.");let t=m.clone(e.center),n=e.radius;if(n>this._occluderRadius)return yr.FULL;if(this._horizonDistance!==Number.MAX_VALUE){let i=m.subtract(t,this._occluderPosition,Zlt),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?yr.NONE:(o=this._occluderRadius+n,o=r-o*o,o>0?(o=Math.sqrt(o)+this._horizonDistance,s<o*o+n*n?yr.FULL:yr.PARTIAL):(i=m.subtract(t,this._horizonPlanePosition,i),m.dot(i,this._horizonPlaneNormal)>-n?yr.PARTIAL:yr.FULL))}}return yr.NONE};var lD=new m;Gc.computeOccludeePoint=function(e,t,n){if(!c(e))throw new L("occluderBoundingSphere is required.");if(!c(n))throw new L("positions is required.");if(n.length===0)throw new L("positions must contain at least one element");let i=m.clone(t),o=m.clone(e.center),r=e.radius,s=n.length;if(m.equals(o,t))throw new L("occludeePosition must be different than occluderBoundingSphere.center");let a=m.normalize(m.subtract(i,o,lD),lD),l=-m.dot(a,o),d=Gc._anyRotationVector(o,a,l),u=Gc._horizonToPlaneNormalDotProduct(e,a,l,d,n[0]);if(!u)return;let f;for(let y=1;y<s;++y){if(f=Gc._horizonToPlaneNormalDotProduct(e,a,l,d,n[y]),!f)return;f<u&&(u=f)}if(u<.0017453283658983088)return;let p=r/u;return m.add(o,m.multiplyByScalar(a,p,lD),lD)};var Rlt=[];Gc.computeOccludeePointFromRectangle=function(e,t){if(!c(e))throw new L("rectangle is required.");t=t??re.default;let n=de.subsample(e,t,0,Rlt),i=ue.fromPoints(n),o=m.ZERO;if(!m.equals(o,i.center))return Gc.computeOccludeePoint(new ue(o,t.minimumRadius),i.center,n)};var Glt=new m;Gc._anyRotationVector=function(e,t,n){let i=m.abs(t,Glt),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 Elt=new m;Gc._rotationVector=function(e,t,n,i,o){let r=m.subtract(i,e,Elt);if(r=m.normalize(r,r),m.dot(t,r)<.9999999847691291){let s=m.cross(t,r,r);if(m.magnitude(s)>w.EPSILON13)return m.normalize(s,new m)}return o};var T4=new m,Xlt=new m,dD=new m,wge=new m;Gc._horizonToPlaneNormalDotProduct=function(e,t,n,i,o){let r=m.clone(o,T4),s=m.clone(e.center,Xlt),a=e.radius,l=m.subtract(s,r,dD),d=m.magnitudeSquared(l),u=a*a;if(d<u)return!1;let f=d-u,p=Math.sqrt(f),h=1/Math.sqrt(d),x=p*h*p;l=m.normalize(l,l);let S=m.add(r,m.multiplyByScalar(l,x,wge),wge),V=Math.sqrt(f-x*x),Z=this._rotationVector(s,t,n,r,i),R=m.fromElements(Z.x*Z.x*l.x+(Z.x*Z.y-Z.z)*l.y+(Z.x*Z.z+Z.y)*l.z,(Z.x*Z.y+Z.z)*l.x+Z.y*Z.y*l.y+(Z.y*Z.z-Z.x)*l.z,(Z.x*Z.z-Z.y)*l.x+(Z.y*Z.z+Z.x)*l.y+Z.z*Z.z*l.z,T4);R=m.normalize(R,R);let E=m.multiplyByScalar(R,V,T4);Z=m.normalize(m.subtract(m.add(S,E,dD),s,dD),dD);let I=m.dot(t,Z);Z=m.normalize(m.subtract(m.subtract(S,E,Z),s,Z),Z);let v=m.dot(t,Z);return I<v?I:v};var EF=Gc;var rMi=_(T(),1);var j9i=_(T(),1);function ip(e){e=e??z.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 fs,this._perspectiveMatrix=new M,this._infinitePerspective=new M}function S4(e){if(!c(e.right)||!c(e.left)||!c(e.top)||!c(e.bottom)||!c(e.near)||!c(e.far))throw new L("right, left, top, bottom, near, or far parameters are not set.");let{top:t,bottom:n,right:i,left:o,near:r,far:s}=e;if(t!==e._top||n!==e._bottom||o!==e._left||i!==e._right||r!==e._near||s!==e._far){if(e.near<=0||e.near>e.far)throw new L("near must be greater than zero and less than far.");e._left=o,e._right=i,e._top=t,e._bottom=n,e._near=r,e._far=s,e._perspectiveMatrix=M.computePerspectiveOffCenter(o,i,n,t,r,s,e._perspectiveMatrix),e._infinitePerspective=M.computeInfinitePerspectiveOffCenter(o,i,n,t,r,e._infinitePerspective)}}Object.defineProperties(ip.prototype,{projectionMatrix:{get:function(){return S4(this),this._perspectiveMatrix}},infiniteProjectionMatrix:{get:function(){return S4(this),this._infinitePerspective}}});var Ilt=new m,Wlt=new m,wlt=new m,Plt=new m;ip.prototype.computeCullingVolume=function(e,t,n){if(!c(e))throw new L("position is required.");if(!c(t))throw new L("direction is required.");if(!c(n))throw new L("up is required.");let i=this._cullingVolume.planes,o=this.top,r=this.bottom,s=this.right,a=this.left,l=this.near,d=this.far,u=m.cross(t,n,Ilt),f=Wlt;m.multiplyByScalar(t,l,f),m.add(e,f,f);let p=wlt;m.multiplyByScalar(t,d,p),m.add(e,p,p);let y=Plt;m.multiplyByScalar(u,a,y),m.add(f,y,y),m.subtract(y,e,y),m.normalize(y,y),m.cross(y,n,y),m.normalize(y,y);let h=i[0];return c(h)||(h=i[0]=new ce),h.x=y.x,h.y=y.y,h.z=y.z,h.w=-m.dot(y,e),m.multiplyByScalar(u,s,y),m.add(f,y,y),m.subtract(y,e,y),m.cross(n,y,y),m.normalize(y,y),h=i[1],c(h)||(h=i[1]=new ce),h.x=y.x,h.y=y.y,h.z=y.z,h.w=-m.dot(y,e),m.multiplyByScalar(n,r,y),m.add(f,y,y),m.subtract(y,e,y),m.cross(u,y,y),m.normalize(y,y),h=i[2],c(h)||(h=i[2]=new ce),h.x=y.x,h.y=y.y,h.z=y.z,h.w=-m.dot(y,e),m.multiplyByScalar(n,o,y),m.add(f,y,y),m.subtract(y,e,y),m.cross(y,u,y),m.normalize(y,y),h=i[3],c(h)||(h=i[3]=new ce),h.x=y.x,h.y=y.y,h.z=y.z,h.w=-m.dot(y,e),h=i[4],c(h)||(h=i[4]=new ce),h.x=t.x,h.y=t.y,h.z=t.z,h.w=-m.dot(t,f),m.negate(t,y),h=i[5],c(h)||(h=i[5]=new ce),h.x=y.x,h.y=y.y,h.z=y.z,h.w=-m.dot(y,p),this._cullingVolume};ip.prototype.getPixelDimensions=function(e,t,n,i,o){if(S4(this),!c(e)||!c(t))throw new L("Both drawingBufferWidth and drawingBufferHeight are required.");if(e<=0)throw new L("drawingBufferWidth must be greater than zero.");if(t<=0)throw new L("drawingBufferHeight must be greater than zero.");if(!c(n))throw new L("distance is required.");if(!c(i))throw new L("pixelRatio is required");if(i<=0)throw new L("pixelRatio must be greater than zero.");if(!c(o))throw new L("A result object is required.");let r=1/this.near,s=this.top*r,a=2*i*n*s/t;s=this.right*r;let l=2*i*n*s/e;return o.x=l,o.y=a,o};ip.prototype.clone=function(e){return c(e)||(e=new ip),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};ip.prototype.equals=function(e){return c(e)&&e instanceof ip&&this.right===e.right&&this.left===e.left&&this.top===e.top&&this.bottom===e.bottom&&this.near===e.near&&this.far===e.far};ip.prototype.equalsEpsilon=function(e,t,n){return e===this||c(e)&&e instanceof ip&&w.equalsEpsilon(this.right,e.right,t,n)&&w.equalsEpsilon(this.left,e.left,t,n)&&w.equalsEpsilon(this.top,e.top,t,n)&&w.equalsEpsilon(this.bottom,e.bottom,t,n)&&w.equalsEpsilon(this.near,e.near,t,n)&&w.equalsEpsilon(this.far,e.far,t,n)};var hl=ip;function $l(e){e=e??z.EMPTY_OBJECT,this._offCenterFrustum=new hl,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}$l.packedLength=6;$l.pack=function(e,t,n){return C.typeOf.object("value",e),C.defined("array",t),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};$l.unpack=function(e,t,n){return C.defined("array",e),t=t??0,c(n)||(n=new $l),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 Uf(e){if(!c(e.fov)||!c(e.aspectRatio)||!c(e.near)||!c(e.far))throw new L("fov, aspectRatio, near, or far parameters are not set.");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;if(C.typeOf.number.greaterThanOrEquals("fov",e.fov,0),C.typeOf.number.lessThan("fov",e.fov,Math.PI),C.typeOf.number.greaterThanOrEquals("aspectRatio",e.aspectRatio,0),C.typeOf.number.greaterThanOrEquals("near",e.near,0),e.near>e.far)throw new L("near must be less than far.");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($l.prototype,{projectionMatrix:{get:function(){return Uf(this),this._offCenterFrustum.projectionMatrix}},infiniteProjectionMatrix:{get:function(){return Uf(this),this._offCenterFrustum.infiniteProjectionMatrix}},fovy:{get:function(){return Uf(this),this._fovy}},sseDenominator:{get:function(){return Uf(this),this._sseDenominator}},offCenterFrustum:{get:function(){return Uf(this),this._offCenterFrustum}}});$l.prototype.computeCullingVolume=function(e,t,n){return Uf(this),this._offCenterFrustum.computeCullingVolume(e,t,n)};$l.prototype.getPixelDimensions=function(e,t,n,i,o){return Uf(this),this._offCenterFrustum.getPixelDimensions(e,t,n,i,o)};$l.prototype.clone=function(e){return c(e)||(e=new $l),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};$l.prototype.equals=function(e){return!c(e)||!(e instanceof $l)?!1:(Uf(this),Uf(e),this.fov===e.fov&&this.aspectRatio===e.aspectRatio&&this._offCenterFrustum.equals(e._offCenterFrustum))};$l.prototype.equalsEpsilon=function(e,t,n){return!c(e)||!(e instanceof $l)?!1:(Uf(this),Uf(e),w.equalsEpsilon(this.fov,e.fov,t,n)&&w.equalsEpsilon(this.aspectRatio,e.aspectRatio,t,n)&&this._offCenterFrustum.equalsEpsilon(e._offCenterFrustum,t,n))};var Ci=$l;var yMi=_(T(),1);function XF(){this._colorTexture=void 0,this._drawCommand=void 0}Object.defineProperties(XF.prototype,{colorTexture:{get:function(){return this._colorTexture}}});function vlt(e,t,n){let i=t.createViewportQuadCommand(Ev,{framebuffer:n,renderState:Oe.fromCache({viewport:new je(0,0,256,256)})});e._drawCommand=i}XF.prototype.update=function(e){if(!c(this._colorTexture)){let t=e.context,n=new Pt({context:t,width:256,height:256,pixelFormat:ke.RGBA,pixelDatatype:Ue.UNSIGNED_BYTE,sampler:en.NEAREST});this._colorTexture=n;let i=new Fr({context:t,colorTextures:[n],destroyAttachments:!1});vlt(this,t,i),this._drawCommand.execute(t),i.destroy(),this._drawCommand.shaderProgram=this._drawCommand.shaderProgram&&this._drawCommand.shaderProgram.destroy()}};XF.prototype.isDestroyed=function(){return!1};XF.prototype.destroy=function(){return this._colorTexture=this._colorTexture&&this._colorTexture.destroy(),he(this)};var IF=XF;var dNi=_(T(),1);var XMi=_(T(),1);var Mge={};function Flt(e,t,n){let i,o,r;if(e instanceof Ci){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 hl)return i=e.near,o=e.top,r=e.right,Math.max(t*i/r,n*i/o);return Math.max(t,n)}var Alt=new m,vge=new m;function Nge(e,t,n,i){if(c(i)&&n(.5)>i){let o=n(0),r=n(1),s=n(.5),a=s-o,l=s-r;return function(d){let u=n(d);if(d<=.5){let p=(u-o)/a;return w.lerp(e,-w.PI_OVER_TWO,p)}let f=(u-r)/l;return w.lerp(-w.PI_OVER_TWO,t,1-f)}}return function(o){return w.lerp(e,t,o)}}function V4(e,t,n,i,o){let r=o,s=Math.max(n,i);if(!c(r)){let a=e.position,l=t,d=e.up,u=e.right,f=e.frustum,p=m.subtract(a,l,Alt),y=m.magnitude(m.multiplyByScalar(d,m.dot(p,d),vge)),h=m.magnitude(m.multiplyByScalar(u,m.dot(p,u),vge));r=Math.min(Flt(f,y,h)*.2,1e9)}if(s<r){let d=-Math.pow((r-n)*1e6,.125),u=Math.pow((r-i)*1e6,1/8);return function(f){let p=f*(u-d)+d;return-Math.pow(p,8)/1e6+r}}return function(a){return w.lerp(n,i,a)}}function WF(e,t){return w.equalsEpsilon(e,w.TWO_PI,w.EPSILON11)&&(e=0),t>e+Math.PI?e+=w.TWO_PI:t<e-Math.PI&&(e-=w.TWO_PI),e}var kge=new m;function Mlt(e,t,n,i,o,r,s,a){let l=e.camera,d=m.clone(l.position,kge),u=l.pitch,f=WF(l.heading,i),p=WF(l.roll,r),y=V4(l,n,d.z,n.z,s),h=Nge(u,o,y,a);function g(x){let S=x.time/t;l.setView({orientation:{heading:w.lerp(f,i,S),pitch:h(S),roll:w.lerp(p,r,S)}}),D.lerp(d,n,S,l.position),l.position.z=y(S)}return g}function Nlt(e,t){e.longitude<t.longitude?e.longitude+=w.TWO_PI:t.longitude+=w.TWO_PI}function klt(e,t){let n=e.longitude-t.longitude;n<-w.PI?e.longitude+=w.TWO_PI:n>w.PI&&(t.longitude+=w.TWO_PI)}var Ult=new pe,Olt=new pe;function Dlt(e,t,n,i,o,r,s,a,l,d){let u=e.camera,p=e.mapProjection.ellipsoid,y=pe.clone(u.positionCartographic,Ult),h=u.pitch,g=WF(u.heading,i),x=WF(u.roll,r),S=p.cartesianToCartographic(n,Olt);y.longitude=w.zeroToTwoPi(y.longitude),S.longitude=w.zeroToTwoPi(S.longitude);let V=!1;if(c(a)){let I=w.zeroToTwoPi(a),v=Math.min(y.longitude,S.longitude),P=Math.max(y.longitude,S.longitude),F=I>=v&&I<=P;if(c(l)){let N=Math.abs(y.longitude-S.longitude),b=w.TWO_PI-N;(F?N:b)<(F?b:N)*l&&!F&&(V=!0)}else F||(V=!0)}V?Nlt(y,S):klt(y,S);let Z=V4(u,n,y.height,S.height,s),R=Nge(h,o,Z,d);function E(){let I=y.longitude,v=S.longitude,P=y.latitude,F=S.latitude;return function(b){let G=b.time/t,X=m.fromRadians(w.lerp(I,v,G),w.lerp(P,F,G),Z(G),p);u.setView({destination:X,orientation:{heading:w.lerp(g,i,G),pitch:R(G),roll:w.lerp(x,r,G)}})}}return E()}function Blt(e,t,n,i,o,r,s){let a=e.camera,l=m.clone(a.position,kge),d=WF(a.heading,i),u=a.frustum.right-a.frustum.left,f=V4(a,n,u,n.z,s);function p(y){let h=y.time/t;a.setView({orientation:{heading:w.lerp(d,i,h)}}),D.lerp(l,n,h,a.position);let g=f(h),x=a.frustum,S=x.top/x.right,V=(g-(x.right-x.left))*.5;x.right+=V,x.left-=V,x.top=S*x.right,x.bottom=-x.top}return p}var Fge=new pe,Ylt=new m;function C4(e,t){return{startObject:{},stopObject:{},duration:0,complete:e,cancel:t}}function Age(e,t){function n(){typeof t=="function"&&t(),e.enableInputs=!0}return n}Mge.createTween=function(e,t){t=t??z.EMPTY_OBJECT;let n=t.destination;if(!c(e))throw new L("scene is required.");if(!c(n))throw new L("destination is required.");let i=e.mode;if(i===se.MORPHING)return C4();let o=t.convert??!0,r=e.mapProjection,s=r.ellipsoid,a=t.maximumHeight,l=t.flyOverLongitude,d=t.flyOverLongitudeWeight,u=t.pitchAdjustHeight,f=t.easingFunction;o&&i!==se.SCENE3D&&(s.cartesianToCartographic(n,Fge),n=r.project(Fge,Ylt));let p=e.camera,y=t.endTransform;c(y)&&p._setTransform(y);let h=t.duration;c(h)||(h=Math.ceil(m.distance(p.position,n)/1e6)+2,h=Math.min(h,3));let g=t.heading??0,x=t.pitch??-w.PI_OVER_TWO,S=t.roll??0,V=e.screenSpaceCameraController;V.enableInputs=!1;let Z=Age(V,t.complete),R=Age(V,t.cancel),E=p.frustum,I=e.mode===se.SCENE2D;if(I=I&&D.equalsEpsilon(p.position,n,w.EPSILON6),I=I&&w.equalsEpsilon(Math.max(E.right-E.left,E.top-E.bottom),n.z,w.EPSILON6),I=I||e.mode!==se.SCENE2D&&m.equalsEpsilon(n,p.position,w.EPSILON10),I=I&&w.equalsEpsilon(w.negativePiToPi(g),w.negativePiToPi(p.heading),w.EPSILON10)&&w.equalsEpsilon(w.negativePiToPi(x),w.negativePiToPi(p.pitch),w.EPSILON10)&&w.equalsEpsilon(w.negativePiToPi(S),w.negativePiToPi(p.roll),w.EPSILON10),I)return C4(Z,R);let v=new Array(4);if(v[se.SCENE2D]=Blt,v[se.SCENE3D]=Dlt,v[se.COLUMBUS_VIEW]=Mlt,h<=0)return C4(function(){v[i](e,1,n,g,x,S,a,l,d,u)({time:1}),typeof Z=="function"&&Z()},R);let P=v[i](e,h,n,g,x,S,a,l,d,u);if(!c(f)){let F=p.positionCartographic.height,N=i===se.SCENE3D?s.cartesianToCartographic(n).height:n.z;F>N&&F>11500?f=Jr.CUBIC_OUT:f=Jr.QUINTIC_IN_OUT}return{duration:h,easingFunction:f,startObject:{time:0},stopObject:{time:h},update:P,complete:Z,cancel:R}};var wF=Mge;var WMi=_(T(),1),Hlt={ROTATE:0,INFINITE_SCROLL:1},ed=Object.freeze(Hlt);function nn(e){if(!c(e))throw new L("scene is required.");this._scene=e,this._transform=M.clone(M.IDENTITY),this._invTransform=M.clone(M.IDENTITY),this._actualTransform=M.clone(M.IDENTITY),this._actualInvTransform=M.clone(M.IDENTITY),this._transformChanged=!1,this.position=new m,this._position=new m,this._positionWC=new m,this._positionCartographic=new pe,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 Ci,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=w.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 ye,this._moveEnd=new ye,this._changed=new ye,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 M,this._invViewMatrix=new M,Kge(this),this._mode=se.SCENE3D,this._modeChanged=!0;let t=e.mapProjection;this._projection=t,this._maxCoord=t.project(new pe(Math.PI,w.PI_OVER_TWO)),this._max2Dfrustum=void 0,sxe(this,nn.DEFAULT_VIEW_RECTANGLE,this.position,!0);let n=m.magnitude(this.position);n+=n*nn.DEFAULT_VIEW_FACTOR,m.normalize(this.position,this.position),m.multiplyByScalar(this.position,n,this.position)}nn.TRANSFORM_2D=new M(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);nn.TRANSFORM_2D_INVERSE=M.inverseTransformation(nn.TRANSFORM_2D,new M);nn.DEFAULT_VIEW_RECTANGLE=de.fromDegrees(-95,-20,-70,90);nn.DEFAULT_VIEW_FACTOR=.5;nn.DEFAULT_OFFSET=new rm(0,-w.PI_OVER_FOUR,0);function Kge(e){M.computeView(e._position,e._direction,e._up,e._right,e._viewMatrix),M.multiply(e._viewMatrix,e._actualInvTransform,e._viewMatrix),M.inverseTransformation(e._viewMatrix,e._invViewMatrix)}function zlt(e){if(!c(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=Ti()):e.timeSinceMoved=Math.max(Ti()-e._lastMovedTimestamp,0)/1e3}}nn.prototype.canPreloadFlight=function(){return c(this._currentFlight)&&this._mode!==se.SCENE2D};nn.prototype._updateCameraChanged=function(){let e=this;if(zlt(e),e._changed.numberOfListeners===0)return;let t=e.percentageChanged,n=e.heading;c(e._changedHeading)||(e._changedHeading=n);let i=Math.abs(e._changedHeading-n)%w.TWO_PI;i=i>w.PI?w.TWO_PI-i:i;let o=i/Math.PI;o>t&&(e._changedHeading=n);let r=e.roll;c(e._changedRoll)||(e._changedRoll=r);let s=Math.abs(e._changedRoll-r)%w.TWO_PI;s=s>w.PI?w.TWO_PI-s:s;let a=s/Math.PI;if(a>t&&(e._changedRoll=r),(a>t||o>t)&&e._changed.raiseEvent(Math.max(a,o)),e._mode===se.SCENE2D){if(!c(e._changedFrustum)){e._changedPosition=m.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone();return}let p=e.position,y=e._changedPosition,h=e.frustum,g=e._changedFrustum,x=p.x+h.left,S=p.x+h.right,V=y.x+g.left,Z=y.x+g.right,R=p.y+h.bottom,E=p.y+h.top,I=y.y+g.bottom,v=y.y+g.top,P=Math.max(x,V),F=Math.min(S,Z),N=Math.max(R,I),b=Math.min(E,v),G;if(P>=F||N>=E)G=1;else{let X=g;x<V&&S>Z&&R<I&&E>v&&(X=h),G=1-(F-P)*(b-N)/((X.right-X.left)*(X.top-X.bottom))}G>t&&(e._changed.raiseEvent(G),e._changedPosition=m.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone(e._changedFrustum));return}if(!c(e._changedDirection)){e._changedPosition=m.clone(e.positionWC,e._changedPosition),e._changedDirection=m.clone(e.directionWC,e._changedDirection);return}let l=w.acosClamped(m.dot(e.directionWC,e._changedDirection)),d;c(e.frustum.fovy)?d=l/(e.frustum.fovy*.5):d=l;let f=m.distance(e.positionWC,e._changedPosition)/e.positionCartographic.height;(d>t||f>t)&&(e._changed.raiseEvent(Math.max(d,f)),e._changedPosition=m.clone(e.positionWC,e._changedPosition),e._changedDirection=m.clone(e.directionWC,e._changedDirection))};function Klt(e){wt.basisTo2D(e._projection,e._transform,e._actualTransform)}var Jlt=new pe,Qlt=new m,uD=new m,jlt=new ce,qlt=new ce,$lt=new ce,edt=new ce,tdt=new ce;function ndt(e){let t=e._projection,n=t.ellipsoid,i=M.getColumn(e._transform,3,jlt),o=n.cartesianToCartographic(i,Jlt),r=t.project(o,Qlt),s=qlt;s.x=r.z,s.y=r.x,s.z=r.y,s.w=1;let a=ce.clone(ce.UNIT_X,tdt),l=ce.add(M.getColumn(e._transform,0,uD),i,uD);n.cartesianToCartographic(l,o),t.project(o,r);let d=$lt;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=edt;if(m.magnitudeSquared(d)>w.EPSILON10)m.cross(a,d,u);else{let f=ce.add(M.getColumn(e._transform,1,uD),i,uD);n.cartesianToCartographic(f,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)<w.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),M.setColumn(e._actualTransform,0,d,e._actualTransform),M.setColumn(e._actualTransform,1,u,e._actualTransform),M.setColumn(e._actualTransform,2,a,e._actualTransform),M.setColumn(e._actualTransform,3,s,e._actualTransform)}var L4=new m;function Xc(e){let t=e._mode,n=!1,i=0;t===se.SCENE2D&&(i=e.frustum.right-e.frustum.left,n=i!==e._positionCartographic.height);let o=e._position,r=!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 l=e._up,d=!m.equals(l,e.up);d&&(m.normalize(e.up,e.up),l=m.clone(e.up,e._up));let u=e._right,f=!m.equals(u,e.right);f&&(m.normalize(e.right,e.right),u=m.clone(e.right,e._right));let p=e._transformChanged||e._modeChanged;e._transformChanged=!1,p&&(M.inverseTransformation(e._transform,e._invTransform),e._mode===se.COLUMBUS_VIEW||e._mode===se.SCENE2D?M.equals(M.IDENTITY,e._transform)?M.clone(nn.TRANSFORM_2D,e._actualTransform):e._mode===se.COLUMBUS_VIEW?Klt(e):ndt(e):M.clone(e._transform,e._actualTransform),M.inverseTransformation(e._actualTransform,e._actualInvTransform),e._modeChanged=!1);let y=e._actualTransform;if(r||p)if(e._positionWC=M.multiplyByPoint(y,o,e._positionWC),t===se.SCENE3D||t===se.MORPHING)e._positionCartographic=e._projection.ellipsoid.cartesianToCartographic(e._positionWC,e._positionCartographic);else{let h=L4;h.x=e._positionWC.y,h.y=e._positionWC.z,h.z=e._positionWC.x,t===se.SCENE2D&&(h.z=i),e._projection.unproject(h,e._positionCartographic)}if(a||d||f){let h=m.dot(s,m.cross(l,u,L4));if(Math.abs(1-h)>w.EPSILON2){let g=1/m.magnitudeSquared(l),x=m.dot(l,s)*g,S=m.multiplyByScalar(s,x,L4);l=m.normalize(m.subtract(l,S,e._up),e._up),m.clone(l,e.up),u=m.cross(s,l,e._right),m.clone(u,e.right)}}(a||p)&&(e._directionWC=M.multiplyByPointAsVector(y,s,e._directionWC),m.normalize(e._directionWC,e._directionWC)),(d||p)&&(e._upWC=M.multiplyByPointAsVector(y,l,e._upWC),m.normalize(e._upWC,e._upWC)),(f||p)&&(e._rightWC=M.multiplyByPointAsVector(y,u,e._rightWC),m.normalize(e._rightWC,e._rightWC)),(r||a||d||f||p)&&Kge(e)}function Jge(e,t){let n;return w.equalsEpsilon(Math.abs(e.z),1,w.EPSILON3)?n=Math.atan2(t.y,t.x)-w.PI_OVER_TWO:n=Math.atan2(e.y,e.x)-w.PI_OVER_TWO,w.TWO_PI-w.zeroToTwoPi(n)}function Qge(e){return w.PI_OVER_TWO-w.acosClamped(e.z)}function jge(e,t,n){let i=0;return w.equalsEpsilon(Math.abs(e.z),1,w.EPSILON3)||(i=Math.atan2(-n.z,t.z),i=w.zeroToTwoPi(i+w.TWO_PI)),i}var hD=new M,pD=new M;Object.defineProperties(nn.prototype,{transform:{get:function(){return this._transform}},inverseTransform:{get:function(){return Xc(this),this._invTransform}},viewMatrix:{get:function(){return Xc(this),this._viewMatrix}},inverseViewMatrix:{get:function(){return Xc(this),this._invViewMatrix}},positionCartographic:{get:function(){return Xc(this),this._positionCartographic}},positionWC:{get:function(){return Xc(this),this._positionWC}},directionWC:{get:function(){return Xc(this),this._directionWC}},upWC:{get:function(){return Xc(this),this._upWC}},rightWC:{get:function(){return Xc(this),this._rightWC}},heading:{get:function(){if(this._mode!==se.MORPHING){let e=this._projection.ellipsoid,t=M.clone(this._transform,hD),n=wt.eastNorthUpToFixedFrame(this.positionWC,e,pD);this._setTransform(n);let i=Jge(this.direction,this.up);return this._setTransform(t),i}}},pitch:{get:function(){if(this._mode!==se.MORPHING){let e=this._projection.ellipsoid,t=M.clone(this._transform,hD),n=wt.eastNorthUpToFixedFrame(this.positionWC,e,pD);this._setTransform(n);let i=Qge(this.direction);return this._setTransform(t),i}}},roll:{get:function(){if(this._mode!==se.MORPHING){let e=this._projection.ellipsoid,t=M.clone(this._transform,hD),n=wt.eastNorthUpToFixedFrame(this.positionWC,e,pD);this._setTransform(n);let i=jge(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}}});nn.prototype.update=function(e){if(!c(e))throw new L("mode is required.");if(e===se.SCENE2D&&!(this.frustum instanceof Oo))throw new L("An OrthographicOffCenterFrustum is required in 2D.");if((e===se.SCENE3D||e===se.COLUMBUS_VIEW)&&!(this.frustum instanceof Ci)&&!(this.frustum instanceof sn))throw new L("A PerspectiveFrustum or OrthographicFrustum is required in 3D and Columbus view");let t=!1;if(e!==this._mode&&(this._mode=e,this._modeChanged=e!==se.MORPHING,t=this._mode===se.SCENE2D),t){let n=this._max2Dfrustum=this.frustum.clone();if(!(n instanceof Oo))throw new L("The camera frustum is expected to be orthographic for 2D camera control.");let i=2,o=n.top/n.right;n.right=this._maxCoord.x*i,n.left=-n.right,n.top=o*n.right,n.bottom=-n.top}this._mode===se.SCENE2D&&txe(this,this.position)};var idt=new m,odt=new m,rdt=new m;nn.prototype._setTransform=function(e){let t=m.clone(this.positionWC,idt),n=m.clone(this.upWC,odt),i=m.clone(this.directionWC,rdt);M.clone(e,this._transform),this._transformChanged=!0,Xc(this);let o=this._actualInvTransform;M.multiplyByPoint(o,t,this.position),M.multiplyByPointAsVector(o,i,this.direction),M.multiplyByPointAsVector(o,n,this.up),m.cross(this.direction,this.up,this.right),Xc(this)};var sdt=new D,adt=new bn,cdt=new m,ldt=new m;function qge(e){if(!M.equals(M.IDENTITY,e.transform))return m.magnitude(e.position);let t=e._scene,n=t.globe,i=sdt;i.x=t.drawingBufferWidth/t.pixelRatio/2,i.y=t.drawingBufferHeight/t.pixelRatio/2;let o;if(c(n)){let a=e.getPickRay(i,adt);o=n.pickWorldCoordinates(a,t,!0,cdt)}let r;t.pickPositionSupported&&(r=t.pickPositionWorldCoordinates(i,ldt));let s;if(c(o)||c(r)){let a=c(r)?m.distance(r,e.positionWC):Number.POSITIVE_INFINITY,l=c(o)?m.distance(o,e.positionWC):Number.POSITIVE_INFINITY;s=Math.min(a,l)}else s=Math.max(e.positionCartographic.height,0);return s}nn.prototype._adjustOrthographicFrustum=function(e){this.frustum instanceof sn&&(!e&&this._positionCartographic.height<15e4||(this.frustum.width=qge(this)))};var bD=new m,X4=new M,ddt=new M,I4=new Fe,W4=new te,$ge=new pe;function udt(e,t,n){if(isNaN(t.x)||isNaN(t.y)||isNaN(t.z))throw new L("position has a NaN component");let i=M.clone(e.transform,X4),o=wt.eastNorthUpToFixedFrame(t,e._projection.ellipsoid,ddt);e._setTransform(o),m.clone(m.ZERO,e.position),n.heading=n.heading-w.PI_OVER_TWO;let r=Fe.fromHeadingPitchRoll(n,I4),s=te.fromQuaternion(r,W4);te.getColumn(s,0,e.direction),te.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right),e._setTransform(i),e._adjustOrthographicFrustum(!0)}function mdt(e,t,n,i){let o=M.clone(e.transform,X4);if(e._setTransform(M.IDENTITY),!m.equals(t,e.positionWC)){if(i){let a=e._projection,l=a.ellipsoid.cartesianToCartographic(t,$ge);t=a.project(l,bD)}m.clone(t,e.position)}n.heading=n.heading-w.PI_OVER_TWO;let r=Fe.fromHeadingPitchRoll(n,I4),s=te.fromQuaternion(r,W4);te.getColumn(s,0,e.direction),te.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right),e._setTransform(o),e._adjustOrthographicFrustum(!0)}function fdt(e,t,n,i){let o=M.clone(e.transform,X4);if(e._setTransform(M.IDENTITY),!m.equals(t,e.positionWC)){if(i){let l=e._projection,d=l.ellipsoid.cartesianToCartographic(t,$ge);t=l.project(d,bD)}D.clone(t,e.position);let r=-t.z*.5,s=-r,a=e.frustum;if(s>r){let l=a.top/a.right;a.right=s,a.left=r,a.top=a.right*l,a.bottom=-a.top}}if(e._scene.mapMode2D===ed.ROTATE){n.heading=n.heading-w.PI_OVER_TWO,n.pitch=-w.PI_OVER_TWO,n.roll=0;let r=Fe.fromHeadingPitchRoll(n,I4),s=te.fromQuaternion(r,W4);te.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right)}e._setTransform(o)}var hdt=new m,pdt=new m,bdt=new m;function exe(e,t,n,i){let o=m.clone(n.direction,hdt),r=m.clone(n.up,pdt);if(e._scene.mode===se.SCENE3D){let a=e._projection.ellipsoid,l=wt.eastNorthUpToFixedFrame(t,a,hD),d=M.inverseTransformation(l,pD);M.multiplyByPointAsVector(d,o,o),M.multiplyByPointAsVector(d,r,r)}let s=m.cross(o,r,bdt);return i.heading=Jge(o,r),i.pitch=Qge(o),i.roll=jge(o,r,s),i}var E4={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},cL=new Ea;nn.prototype.setView=function(e){e=e??z.EMPTY_OBJECT;let t=e.orientation??z.EMPTY_OBJECT,n=this._mode;if(n===se.MORPHING)return;c(e.endTransform)&&this._setTransform(e.endTransform);let i=e.convert??!0,o=e.destination??m.clone(this.positionWC,bD);if(c(o)&&c(o.west)){if(o=this.getRectangleCameraCoordinates(o,bD),isNaN(o.x)||isNaN(o.y))throw new L("destination has a NaN component");i=!1}c(t.direction)&&(t=exe(this,o,t,E4.orientation)),cL.heading=t.heading??0,cL.pitch=t.pitch??-w.PI_OVER_TWO,cL.roll=t.roll??0,n===se.SCENE3D?udt(this,o,cL):n===se.SCENE2D?fdt(this,o,cL,i):mdt(this,o,cL,i)};var ydt=new m;nn.prototype.flyHome=function(e){let t=this._mode;if(t===se.MORPHING&&this._scene.completeMorph(),t===se.SCENE2D)this.flyTo({destination:nn.DEFAULT_VIEW_RECTANGLE,duration:e,endTransform:M.IDENTITY});else if(t===se.SCENE3D){let n=this.getRectangleCameraCoordinates(nn.DEFAULT_VIEW_RECTANGLE),i=m.magnitude(n);i+=i*nn.DEFAULT_VIEW_FACTOR,m.normalize(n,n),m.multiplyByScalar(n,i,n),this.flyTo({destination:n,duration:e,endTransform:M.IDENTITY})}else if(t===se.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,ydt).z),roll:0},endTransform:M.IDENTITY,convert:!1})}};nn.prototype.worldToCameraCoordinates=function(e,t){if(!c(e))throw new L("cartesian is required.");return c(t)||(t=new ce),Xc(this),M.multiplyByVector(this._actualInvTransform,e,t)};nn.prototype.worldToCameraCoordinatesPoint=function(e,t){if(!c(e))throw new L("cartesian is required.");return c(t)||(t=new m),Xc(this),M.multiplyByPoint(this._actualInvTransform,e,t)};nn.prototype.worldToCameraCoordinatesVector=function(e,t){if(!c(e))throw new L("cartesian is required.");return c(t)||(t=new m),Xc(this),M.multiplyByPointAsVector(this._actualInvTransform,e,t)};nn.prototype.cameraToWorldCoordinates=function(e,t){if(!c(e))throw new L("cartesian is required.");return c(t)||(t=new ce),Xc(this),M.multiplyByVector(this._actualTransform,e,t)};nn.prototype.cameraToWorldCoordinatesPoint=function(e,t){if(!c(e))throw new L("cartesian is required.");return c(t)||(t=new m),Xc(this),M.multiplyByPoint(this._actualTransform,e,t)};nn.prototype.cameraToWorldCoordinatesVector=function(e,t){if(!c(e))throw new L("cartesian is required.");return c(t)||(t=new m),Xc(this),M.multiplyByPointAsVector(this._actualTransform,e,t)};function txe(e,t){let n=e._scene.mapMode2D===ed.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 Uge=new m;nn.prototype.move=function(e,t){if(!c(e))throw new L("direction is required.");let n=this.position;m.multiplyByScalar(e,t,Uge),m.add(n,Uge,n),this._mode===se.SCENE2D&&txe(this,n),this._adjustOrthographicFrustum(!0)};nn.prototype.moveForward=function(e){e=e??this.defaultMoveAmount,this._mode===se.SCENE2D?yD(this,e):this.move(this.direction,e)};nn.prototype.moveBackward=function(e){e=e??this.defaultMoveAmount,this._mode===se.SCENE2D?yD(this,-e):this.move(this.direction,-e)};nn.prototype.moveUp=function(e){e=e??this.defaultMoveAmount,this.move(this.up,e)};nn.prototype.moveDown=function(e){e=e??this.defaultMoveAmount,this.move(this.up,-e)};nn.prototype.moveRight=function(e){e=e??this.defaultMoveAmount,this.move(this.right,e)};nn.prototype.moveLeft=function(e){e=e??this.defaultMoveAmount,this.move(this.right,-e)};nn.prototype.lookLeft=function(e){e=e??this.defaultLookAmount,this._mode!==se.SCENE2D&&this.look(this.up,-e)};nn.prototype.lookRight=function(e){e=e??this.defaultLookAmount,this._mode!==se.SCENE2D&&this.look(this.up,e)};nn.prototype.lookUp=function(e){e=e??this.defaultLookAmount,this._mode!==se.SCENE2D&&this.look(this.right,-e)};nn.prototype.lookDown=function(e){e=e??this.defaultLookAmount,this._mode!==se.SCENE2D&&this.look(this.right,e)};var gdt=new Fe,xdt=new te;nn.prototype.look=function(e,t){if(!c(e))throw new L("axis is required.");let n=t??this.defaultLookAmount,i=Fe.fromAxisAngle(e,-n,gdt),o=te.fromQuaternion(i,xdt),r=this.direction,s=this.up,a=this.right;te.multiplyByVector(o,r,r),te.multiplyByVector(o,s,s),te.multiplyByVector(o,a,a)};nn.prototype.twistLeft=function(e){e=e??this.defaultLookAmount,this.look(this.direction,e)};nn.prototype.twistRight=function(e){e=e??this.defaultLookAmount,this.look(this.direction,-e)};var _dt=new Fe,Tdt=new te;nn.prototype.rotate=function(e,t){if(!c(e))throw new L("axis is required.");let n=t??this.defaultRotateAmount,i=Fe.fromAxisAngle(e,-n,_dt),o=te.fromQuaternion(i,Tdt);te.multiplyByVector(o,this.position,this.position),te.multiplyByVector(o,this.direction,this.direction),te.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)};nn.prototype.rotateDown=function(e){e=e??this.defaultRotateAmount,nxe(this,e)};nn.prototype.rotateUp=function(e){e=e??this.defaultRotateAmount,nxe(this,-e)};var Sdt=new m,Cdt=new m,Vdt=new m,Oge=new m;function nxe(e,t){let n=e.position;if(c(e.constrainedAxis)&&!m.equalsEpsilon(e.position,m.ZERO,w.EPSILON2)){let i=m.normalize(n,Sdt),o=m.equalsEpsilon(i,e.constrainedAxis,w.EPSILON2),r=m.equalsEpsilon(i,m.negate(e.constrainedAxis,Oge),w.EPSILON2);if(!o&&!r){let s=m.normalize(e.constrainedAxis,Cdt),a=m.dot(i,s),l=w.acosClamped(a);t>0&&t>l&&(t=l-w.EPSILON4),a=m.dot(i,m.negate(s,Oge)),l=w.acosClamped(a),t<0&&-t>l&&(t=-l+w.EPSILON4);let d=m.cross(s,i,Vdt);e.rotate(d,t)}else(o&&t<0||r&&t>0)&&e.rotate(e.right,t)}else e.rotate(e.right,t)}nn.prototype.rotateRight=function(e){e=e??this.defaultRotateAmount,ixe(this,-e)};nn.prototype.rotateLeft=function(e){e=e??this.defaultRotateAmount,ixe(this,e)};function ixe(e,t){c(e.constrainedAxis)?e.rotate(e.constrainedAxis,t):e.rotate(e.up,t)}function yD(e,t){let n=e.frustum;if(!(n instanceof Oo)||!c(n.left)||!c(n.right)||!c(n.bottom)||!c(n.top))throw new L("The camera frustum is expected to be orthographic for 2D camera control.");let 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===ed.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===ed.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 oxe(e,t){e.move(e.direction,t)}nn.prototype.zoomIn=function(e){e=e??this.defaultZoomAmount,this._mode===se.SCENE2D?yD(this,e):oxe(this,e)};nn.prototype.zoomOut=function(e){e=e??this.defaultZoomAmount,this._mode===se.SCENE2D?yD(this,-e):oxe(this,-e)};nn.prototype.getMagnitude=function(){if(this._mode===se.SCENE3D)return m.magnitude(this.position);if(this._mode===se.COLUMBUS_VIEW)return Math.abs(this.position.z);if(this._mode===se.SCENE2D)return Math.max(this.frustum.right-this.frustum.left,this.frustum.top-this.frustum.bottom)};var Ldt=new M;nn.prototype.lookAt=function(e,t){if(!c(e))throw new L("target is required");if(!c(t))throw new L("offset is required");if(this._mode===se.MORPHING)throw new L("lookAt is not supported while morphing.");let i=this._scene.ellipsoid??re.default,o=wt.eastNorthUpToFixedFrame(e,i,Ldt);this.lookAtTransform(o,t)};var Zdt=new m,Rdt=new Fe,Gdt=new Fe,Edt=new te;function rxe(e,t,n){t=w.clamp(t,-w.PI_OVER_TWO,w.PI_OVER_TWO),e=w.zeroToTwoPi(e)-w.PI_OVER_TWO;let i=Fe.fromAxisAngle(m.UNIT_Y,-t,Rdt),o=Fe.fromAxisAngle(m.UNIT_Z,-e,Gdt),r=Fe.multiply(o,i,o),s=te.fromQuaternion(r,Edt),a=m.clone(m.UNIT_X,Zdt);return te.multiplyByVector(s,a,a),m.negate(a,a),m.multiplyByScalar(a,n,a),a}nn.prototype.lookAtTransform=function(e,t){if(!c(e))throw new L("transform is required");if(this._mode===se.MORPHING)throw new L("lookAtTransform is not supported while morphing.");if(this._setTransform(e),!c(t))return;let n;if(c(t.heading)?n=rxe(t.heading,t.pitch,t.range):n=t,this._mode===se.SCENE2D){D.clone(D.ZERO,this.position),m.negate(n,this.up),this.up.z=0,m.magnitudeSquared(this.up)<w.EPSILON10&&m.clone(m.UNIT_Y,this.up),m.normalize(this.up,this.up),this._setTransform(M.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)<w.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 PF=new pe,Xdt=new pe,Idt=new m,Wdt=new m,wdt=new m,Pdt=new m,vdt=new m,Fdt=new m,Adt=new m,Z4=new m,Mdt={direction:new m,right:new m,up:new m},Dge;function Ec(e,t,n,i){return Math.abs(m.dot(t,n))/i-m.dot(e,n)}function sxe(e,t,n,i){let o=e._projection.ellipsoid,r=i?e:Mdt,{north:s,south:a,west:l}=t,{east:d}=t;l>d&&(d+=w.TWO_PI);let u=(l+d)*.5,f;if(a<-w.PI_OVER_TWO+w.RADIANS_PER_DEGREE&&s>w.PI_OVER_TWO-w.RADIANS_PER_DEGREE)f=0;else{let F=PF;F.longitude=u,F.latitude=s,F.height=0;let N=Xdt;N.longitude=u,N.latitude=a,N.height=0;let b=Dge;(!c(b)||b.ellipsoid!==o)&&(Dge=b=new Fp(void 0,void 0,o)),b.setEndPoints(F,N),f=b.interpolateUsingFraction(.5,PF).latitude}let p=PF;p.longitude=u,p.latitude=f,p.height=0;let y=o.cartographicToCartesian(p,Adt),h=PF;h.longitude=d,h.latitude=s;let g=o.cartographicToCartesian(h,Idt);h.longitude=l;let x=o.cartographicToCartesian(h,wdt);h.longitude=u;let S=o.cartographicToCartesian(h,vdt);h.latitude=a;let V=o.cartographicToCartesian(h,Fdt);h.longitude=d;let Z=o.cartographicToCartesian(h,Pdt);h.longitude=l;let R=o.cartographicToCartesian(h,Wdt);m.subtract(x,y,x),m.subtract(Z,y,Z),m.subtract(g,y,g),m.subtract(R,y,R),m.subtract(S,y,S),m.subtract(V,y,V);let E=o.geodeticSurfaceNormal(y,r.direction);m.negate(E,E);let I=m.cross(E,m.UNIT_Z,r.right);m.normalize(I,I);let v=m.cross(I,E,r.up),P;if(e.frustum instanceof sn){let F=Math.max(m.distance(g,x),m.distance(Z,R)),N=Math.max(m.distance(g,Z),m.distance(x,R)),b,G,X=e.frustum._offCenterFrustum,W=X.right/X.top,A=N*W;F>A?(b=F,G=b/W):(G=N,b=A),P=Math.max(b,G)}else{let F=Math.tan(e.frustum.fovy*.5),N=e.frustum.aspectRatio*F;if(P=Math.max(Ec(E,v,x,F),Ec(E,v,Z,F),Ec(E,v,g,F),Ec(E,v,R,F),Ec(E,v,S,F),Ec(E,v,V,F),Ec(E,I,x,N),Ec(E,I,Z,N),Ec(E,I,g,N),Ec(E,I,R,N),Ec(E,I,S,N),Ec(E,I,V,N)),a<0&&s>0){let b=PF;b.longitude=l,b.latitude=0,b.height=0;let G=o.cartographicToCartesian(b,Z4);m.subtract(G,y,G),P=Math.max(P,Ec(E,v,G,F),Ec(E,I,G,N)),b.longitude=d,G=o.cartographicToCartesian(b,Z4),m.subtract(G,y,G),P=Math.max(P,Ec(E,v,G,F),Ec(E,I,G,N))}}return m.add(y,m.multiplyByScalar(E,-P,Z4),n)}var Ndt=new pe,kdt=new m,Udt=new m;function Odt(e,t,n){let i=e._projection;t.west>t.east&&(t=de.MAX_VALUE);let o=e._actualTransform,r=e._actualInvTransform,s=Ndt;s.longitude=t.east,s.latitude=t.north;let a=i.project(s,kdt);M.multiplyByPoint(o,a,a),M.multiplyByPoint(r,a,a),s.longitude=t.west,s.latitude=t.south;let l=i.project(s,Udt);if(M.multiplyByPoint(o,l,l),M.multiplyByPoint(r,l,l),n.x=(a.x-l.x)*.5+l.x,n.y=(a.y-l.y)*.5+l.y,c(e.frustum.fovy)){let d=Math.tan(e.frustum.fovy*.5),u=e.frustum.aspectRatio*d;n.z=Math.max((a.x-l.x)/u,(a.y-l.y)/d)*.5}else{let d=a.x-l.x,u=a.y-l.y;n.z=Math.max(d,u)}return n}var Ddt=new pe,Bdt=new m,Ydt=new m;function Hdt(e,t,n){let i=e._projection,o=t.east;t.west>t.east&&(e._scene.mapMode2D===ed.INFINITE_SCROLL?o+=w.TWO_PI:(t=de.MAX_VALUE,o=t.east));let r=Ddt;r.longitude=o,r.latitude=t.north;let s=i.project(r,Bdt);r.longitude=t.west,r.latitude=t.south;let a=i.project(r,Ydt),l=Math.abs(s.x-a.x)*.5,d=Math.abs(s.y-a.y)*.5,u,f,p=e.frustum.right/e.frustum.top,y=d*p;return l>y?(u=l,f=u/p):(f=d,u=y),d=Math.max(2*u,2*f),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}nn.prototype.getRectangleCameraCoordinates=function(e,t){if(!c(e))throw new L("rectangle is required");let n=this._mode;if(c(t)||(t=new m),n===se.SCENE3D)return sxe(this,e,t);if(n===se.COLUMBUS_VIEW)return Odt(this,e,t);if(n===se.SCENE2D)return Hdt(this,e,t)};var zdt=new bn;function Kdt(e,t,n,i){n=n??re.default;let o=e.getPickRay(t,zdt),r=qn.rayEllipsoid(o,n);if(!r)return;let s=r.start>0?r.start:r.stop;return bn.getPoint(o,s,i)}var Jdt=new bn;function Qdt(e,t,n,i){let r=e.getPickRay(t,Jdt).origin;r=m.fromElements(r.y,r.z,0,r);let s=n.unproject(r);if(!(s.latitude<-w.PI_OVER_TWO||s.latitude>w.PI_OVER_TWO))return n.ellipsoid.cartographicToCartesian(s,i)}var jdt=new bn;function qdt(e,t,n,i){let o=e.getPickRay(t,jdt),r=-o.origin.x/o.direction.x;bn.getPoint(o,r,i);let s=n.unproject(new m(i.y,i.z,0));if(!(s.latitude<-w.PI_OVER_TWO||s.latitude>w.PI_OVER_TWO||s.longitude<-Math.PI||s.longitude>Math.PI))return n.ellipsoid.cartographicToCartesian(s,i)}nn.prototype.pickEllipsoid=function(e,t,n){if(!c(e))throw new L("windowPosition is required.");let i=this._scene.canvas;if(!(i.clientWidth===0||i.clientHeight===0)){if(c(n)||(n=new m),t=t??re.default,this._mode===se.SCENE3D)n=Kdt(this,e,t,n);else if(this._mode===se.SCENE2D)n=Qdt(this,e,this._projection,n);else if(this._mode===se.COLUMBUS_VIEW)n=qdt(this,e,this._projection,n);else return;return n}};var $dt=new m,eut=new m,tut=new m;function nut(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,l=e.frustum.near,d=2/o*t.x-1,u=2/r*(r-t.y)-1,f=e.positionWC;m.clone(f,n.origin);let p=m.multiplyByScalar(e.directionWC,l,$dt);m.add(f,p,p);let y=m.multiplyByScalar(e.rightWC,d*l*a,eut),h=m.multiplyByScalar(e.upWC,u*l*s,tut),g=m.add(p,y,n.direction);return m.add(g,h,g),m.subtract(g,f,g),m.normalize(g,g),n}var mD=new m;function iut(e,t,n){let i=e._scene.canvas,o=i.clientWidth,r=i.clientHeight,s=e.frustum,a=s.offCenterFrustum;c(a)&&(s=a);let l=2/o*t.x-1;l*=(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,l,mD),m.add(mD,u,u),m.multiplyByScalar(e.upWC,d,mD),m.add(mD,u,u),m.clone(e.directionWC,n.direction),n}nn.prototype.getPickRay=function(e,t){if(!c(e))throw new L("windowPosition is required.");c(t)||(t=new bn);let n=this._scene.canvas;if(n.clientWidth<=0||n.clientHeight<=0)return;let i=this.frustum;return c(i.aspectRatio)&&c(i.fov)&&c(i.near)?nut(this,e,t):iut(this,e,t)};var out=new m,rut=new m;nn.prototype.distanceToBoundingSphere=function(e){if(!c(e))throw new L("boundingSphere is required.");let t=m.subtract(this.positionWC,e.center,out),n=m.multiplyByScalar(this.directionWC,m.dot(t,this.directionWC),rut);return Math.max(0,m.magnitude(n)-e.radius)};var sut=new D;nn.prototype.getPixelSize=function(e,t,n){if(!c(e))throw new L("boundingSphere is required.");if(!c(t))throw new L("drawingBufferWidth is required.");if(!c(n))throw new L("drawingBufferHeight is required.");let i=this.distanceToBoundingSphere(e),o=this.frustum.getPixelDimensions(t,n,i,this._scene.pixelRatio,sut);return Math.max(o.x,o.y)};function aut(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(l){let d=m.lerp(t,s,l.time,new m);e.worldToCameraCoordinatesPoint(d,e.position)}return{easingFunction:Jr.EXPONENTIAL_OUT,startObject:{time:0},stopObject:{time:1},duration:r,update:a}}var cut=new m,Bge=new m,lut=new m,dut=new m;function uut(e,t){let n=e.position,i=e.direction,o=e.worldToCameraCoordinatesVector(m.UNIT_X,cut),r=-m.dot(o,n)/m.dot(o,i),s=m.add(n,m.multiplyByScalar(i,r,Bge),Bge);e.cameraToWorldCoordinatesPoint(s,s),n=e.cameraToWorldCoordinatesPoint(e.position,lut);let a=Math.tan(e.frustum.fovy*.5),l=e.frustum.aspectRatio*a,d=m.magnitude(m.subtract(n,s,dut)),u=l*d,f=a*d,p=e._maxCoord.x,y=e._maxCoord.y,h=Math.max(u-p,p),g=Math.max(f-y,y);if(n.z<-h||n.z>h||n.y<-g||n.y>g){let x=s.y<-h||s.y>h,S=s.z<-g||s.z>g;if(x||S)return aut(e,n,s,h,g,t)}}nn.prototype.createCorrectPositionTween=function(e){if(!c(e))throw new L("duration is required.");if(this._mode===se.COLUMBUS_VIEW)return uut(this,e)};var mut=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};nn.prototype.cancelFlight=function(){c(this._currentFlight)&&(this._currentFlight.cancelTween(),this._currentFlight=void 0)};nn.prototype.completeFlight=function(){if(c(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),c(this._currentFlight.complete)&&this._currentFlight.complete(),this._currentFlight=void 0}};nn.prototype.flyTo=function(e){e=e??z.EMPTY_OBJECT;let t=e.destination;if(!c(t))throw new L("destination is required.");if(this._mode===se.MORPHING)return;this.cancelFlight();let i=t instanceof de;i&&(t=this.getRectangleCameraCoordinates(t,mut));let o=e.orientation??z.EMPTY_OBJECT;if(c(o.direction)&&(o=exe(this,t,o,E4.orientation)),c(e.duration)&&e.duration<=0){let u=E4;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),c(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,l=wF.createTween(a,ta);if(l.duration===0){typeof l.complete=="function"&&l.complete();return}s=a.tweens.add(l),this._currentFlight=s;let d=this._scene.preloadFlightCamera;this._mode!==se.SCENE2D&&(c(d)||(d=nn.clone(this)),d.setView({destination:t,orientation:o}),this._scene.preloadFlightCullingVolume=d.frustum.computeCullingVolume(d.positionWC,d.directionWC,d.upWC))};function fut(e,t){let n=e.frustum,i=Math.tan(n.fovy*.5),o=n.aspectRatio*i;return Math.max(t/o,t/i)}function hut(e,t){let n=e.frustum,i=n.offCenterFrustum;c(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 put=100;function axe(e,t,n){n=rm.clone(c(n)?n:nn.DEFAULT_OFFSET);let i=e._scene.screenSpaceCameraController.minimumZoomDistance,o=e._scene.screenSpaceCameraController.maximumZoomDistance,r=n.range;if(!c(r)||r===0){let s=t.radius;s===0?n.range=put:e.frustum instanceof sn||e._mode===se.SCENE2D?n.range=hut(e,s):n.range=fut(e,s),n.range=w.clamp(n.range,i,o)}return n}nn.prototype.viewBoundingSphere=function(e,t){if(!c(e))throw new L("boundingSphere is required.");if(this._mode===se.MORPHING)throw new L("viewBoundingSphere is not supported while morphing.");t=axe(this,e,t),this.lookAt(e.center,t)};var but=new M,yut=new m,gut=new m,xut=new m,_ut=new m,Tut=new ce,Sut=new Fe,Cut=new te;nn.prototype.flyToBoundingSphere=function(e,t){if(!c(e))throw new L("boundingSphere is required.");t=t??z.EMPTY_OBJECT;let n=this._mode===se.SCENE2D||this._mode===se.COLUMBUS_VIEW;this._setTransform(M.IDENTITY);let i=axe(this,e,t.offset),o;n?o=m.multiplyByScalar(m.UNIT_Z,i.range,yut):o=rxe(i.heading,i.pitch,i.range);let s=this._scene.ellipsoid??re.default,a=wt.eastNorthUpToFixedFrame(e.center,s,but);M.multiplyByPoint(a,o,o);let l,d;if(!n){if(l=m.subtract(e.center,o,gut),m.normalize(l,l),d=M.multiplyByPointAsVector(a,m.UNIT_Z,xut),1-Math.abs(m.dot(l,d))<w.EPSILON6){let f=Fe.fromAxisAngle(l,i.heading,Sut),p=te.fromQuaternion(f,Cut);m.fromCartesian4(M.getColumn(a,1,Tut),d),te.multiplyByVector(p,d,d)}let u=m.cross(l,d,_ut);m.cross(u,l,d),m.normalize(d,d)}this.flyTo({destination:o,orientation:{direction:l,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 Yge=new m,Hge=new m,R4=new m,zge=new m,vF=[new m,new m,new m,new m];function Vut(e,t){let n=t.radii,i=e.positionWC,o=m.multiplyComponents(t.oneOverRadii,i,Yge),r=m.magnitude(o),s=m.normalize(o,Hge),a,l;m.equalsEpsilon(s,m.UNIT_Z,w.EPSILON10)?(a=new m(0,1,0),l=new m(0,0,1)):(a=m.normalize(m.cross(m.UNIT_Z,s,R4),R4),l=m.normalize(m.cross(s,a,zge),zge));let d=Math.sqrt(m.magnitudeSquared(o)-1),u=m.multiplyByScalar(s,1/r,Yge),f=d/r,p=m.multiplyByScalar(a,f,Hge),y=m.multiplyByScalar(l,f,R4),h=m.add(u,y,vF[0]);m.subtract(h,p,h),m.multiplyComponents(n,h,h);let g=m.subtract(u,y,vF[1]);m.subtract(g,p,g),m.multiplyComponents(n,g,g);let x=m.subtract(u,y,vF[2]);m.add(x,p,x),m.multiplyComponents(n,x,x);let S=m.add(u,y,vF[3]);return m.add(S,p,S),m.multiplyComponents(n,S,S),vF}var G4=new D,Lut=new m,Eg=[new pe,new pe,new pe,new pe];function fD(e,t,n,i,o,r){G4.x=e,G4.y=t;let s=i.pickEllipsoid(G4,o,Lut);return c(s)?(Eg[n]=o.cartesianToCartographic(s,Eg[n]),1):(Eg[n]=o.cartesianToCartographic(r[n],Eg[n]),0)}nn.prototype.computeViewRectangle=function(e,t){e=e??re.default;let n=this.frustum.computeCullingVolume(this.positionWC,this.directionWC,this.upWC),i=new ue(m.ZERO,e.maximumRadius);if(n.computeVisibility(i)===zt.OUTSIDE)return;let r=this._scene.canvas,s=r.clientWidth,a=r.clientHeight,l=0,d=Vut(this,e);if(l+=fD(0,0,0,this,e,d),l+=fD(0,a,1,this,e,d),l+=fD(s,a,2,this,e,d),l+=fD(s,0,3,this,e,d),l<2)return de.MAX_VALUE;t=de.fromCartographicArray(Eg,t);let u=0,f=Eg[3].longitude;for(let p=0;p<4;++p){let y=Eg[p].longitude,h=Math.abs(y-f);h>w.PI?u+=w.TWO_PI-h:u+=h,f=y}return w.equalsEpsilon(Math.abs(u),w.TWO_PI,w.EPSILON9)&&(t.west=-w.PI,t.east=w.PI,Eg[0].latitude>=0?t.north=w.PI_OVER_TWO:t.south=-w.PI_OVER_TWO),t};nn.prototype.switchToPerspectiveFrustum=function(){if(this._mode===se.SCENE2D||this.frustum instanceof Ci)return;let e=this._scene;this.frustum=new Ci,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=w.toRadians(60)};nn.prototype.switchToOrthographicFrustum=function(){if(this._mode===se.SCENE2D||this.frustum instanceof sn)return;let e=qge(this),t=this._scene;this.frustum=new sn,this.frustum.aspectRatio=t.drawingBufferWidth/t.drawingBufferHeight,this.frustum.width=e};nn.clone=function(e,t){return c(t)||(t=new nn(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),M.clone(e._transform,t.transform),t._transformChanged=!0,t.frustum=e.frustum.clone(),t};var oo=nn;var fNi=_(T(),1);function Zut(e){C.typeOf.object("options",e),C.typeOf.number("options.pass",e.pass),this.pass=e.pass,this.commandList=e.commandList,this.camera=e.camera,this.cullingVolume=e.cullingVolume,this.ready=!1}var hm=Zut;var TNi=_(T(),1);var mxe=_(cd(),1),cxe=576,Rut=100,FF="#ffffff",gD="#48b";function fxe(e,t){this.credit=e,this.count=t??1}function Gut(e,t){let n=e.length;for(let i=0;i<n;i++){let o=e[i];if(Ct.equals(o,t))return!0}return!1}function Eut(e){let t=e._previousCesiumCredit,n=e._currentCesiumCredit;Ct.equals(n,t)||(c(t)&&e._cesiumCreditContainer.removeChild(t.element),c(n)&&e._cesiumCreditContainer.appendChild(n.element),e._previousCesiumCredit=n)}var hxe="cesium-credit-delimiter";function lxe(e){let t=document.createElement("span");return t.textContent=e,t.className=hxe,t}function dxe(e,t){if(c(t)){let n=document.createElement(t);n._creditId=e._creditId,n.appendChild(e),e=n}return e}function uxe(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(c(a)){if(r=s,c(n)&&(r*=2,s>0)){let d=r-1;if(o.length<=d)e.appendChild(lxe(n));else{let u=o[d];u.className!==hxe&&e.replaceChild(lxe(n),u)}}let l=a.element;if(o.length<=r)e.appendChild(dxe(l,i));else{let d=o[r];d._creditId!==a._id&&e.replaceChild(dxe(l,i),d)}}}for(++r;r<o.length;)e.removeChild(o[r])}function Xut(e){let t=e._lightboxCredits,n=e.viewport.clientWidth,i=e.viewport.clientHeight;n!==e._lastViewportWidth&&(n<cxe?(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>=cxe&&i!==e._lastViewportHeight&&(t.style.marginTop=`${Math.floor((i-t.clientHeight)*.5)}px`,e._lastViewportHeight=i)}function Iut(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: ${FF}; position: relative; min-height: ${Rut}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: ${FF}; } .cesium-credit-lightbox > ul > li a:hover { color: ${gD}; } .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: ${FF}; } .cesium-credit-lightbox-close:hover { color: ${gD}; } .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: ${FF}; } .cesium-credit-expand-link:hover { color: ${gD}; } .cesium-credit-text { color: ${FF}; } .cesium-credit-delimiter { padding: 0 5px; } .cesium-credit-textContainer *, .cesium-credit-logoContainer * { display: inline; } .cesium-credit-textContainer a:hover { color: ${gD} } .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 gr(e,t,n){C.defined("container",e);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(h){r.contains(h.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 l=document.createElement("a");l.onclick=this.hideLightbox.bind(this),l.innerHTML="×",l.className="cesium-credit-lightbox-close",r.appendChild(l);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 f=document.createElement("div");f.className="cesium-credit-textContainer",f.style.display="inline",e.appendChild(f);let p=document.createElement("a");p.className="cesium-credit-expand-link",p.onclick=this.showLightbox.bind(this),p.textContent="Data attribution",e.appendChild(p),Iut(e);let y=Ct.clone(gr.cesiumCredit);this._delimiter=t??"\u2022",this._screenContainer=f,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=y,this._previousCesiumCredit=void 0,this._currentCesiumCredit=y,this._creditDisplayElementPool=[],this._creditDisplayElementIndex=0,this._currentFrameCredits={screenCredits:new Zt,lightboxCredits:new Zt},this._defaultCredit=void 0,this.viewport=n,this.container=e}function pxe(e,t,n,i){i=i??1;let o=t.get(n.id);if(c(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 fxe(n,i),r.push(o)),++e._creditDisplayElementPoolIndex,t.set(n.id,o)}}gr.prototype.addCreditToNextFrame=function(e){if(C.defined("credit",e),e.isIon()){c(this._defaultCredit)||(this._defaultCredit=Ct.clone(bxe())),this._currentCesiumCredit=this._defaultCredit;return}let t;e.showOnScreen?t=this._currentFrameCredits.screenCredits:t=this._currentFrameCredits.lightboxCredits,pxe(this,t,e)};gr.prototype.addStaticCredit=function(e){C.defined("credit",e);let t=this._staticCredits;Gut(t,e)||t.push(e)};gr.prototype.removeStaticCredit=function(e){C.defined("credit",e);let t=this._staticCredits,n=t.indexOf(e);n!==-1&&t.splice(n,1)};gr.prototype.showLightbox=function(){this._lightbox.style.display="block",this._expanded=!0};gr.prototype.hideLightbox=function(){this._lightbox.style.display="none",this._expanded=!1};gr.prototype.update=function(){this._expanded&&Xut(this)};gr.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()&&Ct.equals(gr.cesiumCredit,this._cesiumCredit)||pxe(this,s,r,Number.MAX_VALUE)}Ct.equals(gr.cesiumCredit,this._cesiumCredit)||(this._cesiumCredit=Ct.clone(gr.cesiumCredit)),this._currentCesiumCredit=this._cesiumCredit};gr.prototype.endFrame=function(){let e=this._currentFrameCredits.screenCredits.values;uxe(this._screenContainer,e,this._delimiter,void 0);let t=this._currentFrameCredits.lightboxCredits.values;this._expandLink.style.display=t.length>0?"inline":"none",uxe(this._creditList,t,void 0,"li"),Eut(this)};gr.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),he(this)};gr.prototype.isDestroyed=function(){return!1};gr._cesiumCredit=void 0;gr._cesiumCreditInitialized=!1;var xD;function bxe(){if(!c(xD)){let e=on("Assets/Images/ion-credit.png");e.indexOf("http://")!==0&&e.indexOf("https://")!==0&&e.indexOf("data:")!==0&&(e=new mxe.default(e).path()),xD=new Ct(`<a href="https://cesium.com/" target="_blank"><img src="${e}" style="vertical-align: -7px" title="Cesium ion"/></a>`,!0)}return gr._cesiumCreditInitialized||(gr._cesiumCredit=xD,gr._cesiumCreditInitialized=!0),xD}Object.defineProperties(gr,{cesiumCredit:{get:function(){return bxe(),gr._cesiumCredit},set:function(e){gr._cesiumCredit=e,gr._cesiumCreditInitialized=!0}}});gr.CreditDisplayElement=fxe;var AF=gr;var _5i=_(T(),1);var NNi=_(T(),1);var _D=0,Wut=1;function MT(e){C.typeOf.object("options",e),C.typeOf.object("options.frustum",e.frustum),C.typeOf.object("options.origin",e.origin),C.typeOf.object("options.orientation",e.orientation);let t=e.frustum,n=e.orientation,i=e.origin,o=e.vertexFormat??We.DEFAULT,r=e._drawNearPlane??!0,s,a;t instanceof Ci?(s=_D,a=Ci.packedLength):t instanceof sn&&(s=Wut,a=sn.packedLength),this._frustumType=s,this._frustum=t.clone(),this._origin=m.clone(i),this._orientation=Fe.clone(n),this._drawNearPlane=r,this._vertexFormat=o,this._workerName="createFrustumGeometry",this.packedLength=2+a+m.packedLength+Fe.packedLength+We.packedLength}MT.pack=function(e,t,n){C.typeOf.object("value",e),C.defined("array",t),n=n??0;let i=e._frustumType,o=e._frustum;return t[n++]=i,i===_D?(Ci.pack(o,t,n),n+=Ci.packedLength):(sn.pack(o,t,n),n+=sn.packedLength),m.pack(e._origin,t,n),n+=m.packedLength,Fe.pack(e._orientation,t,n),n+=Fe.packedLength,We.pack(e._vertexFormat,t,n),n+=We.packedLength,t[n]=e._drawNearPlane?1:0,t};var wut=new Ci,Put=new sn,vut=new Fe,Fut=new m,Aut=new We;MT.unpack=function(e,t,n){C.defined("array",e),t=t??0;let i=e[t++],o;i===_D?(o=Ci.unpack(e,t,wut),t+=Ci.packedLength):(o=sn.unpack(e,t,Put),t+=sn.packedLength);let r=m.unpack(e,t,Fut);t+=m.packedLength;let s=Fe.unpack(e,t,vut);t+=Fe.packedLength;let a=We.unpack(e,t,Aut);t+=We.packedLength;let l=e[t]===1;if(!c(n))return new MT({frustum:o,origin:r,orientation:s,vertexFormat:a,_drawNearPlane:l});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=Fe.clone(s,n._orientation),n._vertexFormat=We.clone(a,n._vertexFormat),n._drawNearPlane=l,n};function lL(e,t,n,i,o,r,s,a){let l=e/3*2;for(let d=0;d<4;++d)c(t)&&(t[e]=r.x,t[e+1]=r.y,t[e+2]=r.z),c(n)&&(n[e]=s.x,n[e+1]=s.y,n[e+2]=s.z),c(i)&&(i[e]=a.x,i[e+1]=a.y,i[e+2]=a.z),e+=3;o[l]=0,o[l+1]=0,o[l+2]=1,o[l+3]=0,o[l+4]=1,o[l+5]=1,o[l+6]=0,o[l+7]=1}var Mut=new te,Nut=new M,w4=new M,yxe=new m,gxe=new m,xxe=new m,kut=new m,Uut=new m,Out=new m,Xg=new Array(3),MF=new Array(4);MF[0]=new ce(-1,-1,1,1);MF[1]=new ce(1,-1,1,1);MF[2]=new ce(1,1,1,1);MF[3]=new ce(-1,1,1,1);var _xe=new Array(4);for(let e=0;e<4;++e)_xe[e]=new ce;MT._computeNearFarPlanes=function(e,t,n,i,o,r,s,a){let l=te.fromQuaternion(t,Mut),d=r??yxe,u=s??gxe,f=a??xxe;d=te.getColumn(l,0,d),u=te.getColumn(l,1,u),f=te.getColumn(l,2,f),m.normalize(d,d),m.normalize(u,u),m.normalize(f,f),m.negate(d,d);let p=M.computeView(e,f,u,d,Nut),y,h,g=i.projectionMatrix;if(n===_D){let x=M.multiply(g,p,w4);h=M.inverse(x,w4)}else y=M.inverseTransformation(p,w4);c(h)?(Xg[0]=i.near,Xg[1]=i.far):(Xg[0]=0,Xg[1]=i.near,Xg[2]=i.far);for(let x=0;x<2;++x)for(let S=0;S<4;++S){let V=ce.clone(MF[S],_xe[S]);if(c(h)){V=M.multiplyByVector(h,V,V);let Z=1/V.w;m.multiplyByScalar(V,Z,V),m.subtract(V,e,V),m.normalize(V,V);let R=m.dot(f,V);m.multiplyByScalar(V,Xg[x]/R,V),m.add(V,e,V)}else{let Z=i.offCenterFrustum;c(Z)&&(i=Z);let R=Xg[x],E=Xg[x+1];V.x=(V.x*(i.right-i.left)+i.left+i.right)*.5,V.y=(V.y*(i.top-i.bottom)+i.bottom+i.top)*.5,V.z=(V.z*(R-E)-R-E)*.5,V.w=1,M.multiplyByVector(y,V,V)}o[12*x+S*3]=V.x,o[12*x+S*3+1]=V.y,o[12*x+S*3+2]=V.z}};MT.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,l=new Float64Array(3*4*6);MT._computeNearFarPlanes(i,o,t,n,l);let d=3*4*2;l[d]=l[3*4],l[d+1]=l[3*4+1],l[d+2]=l[3*4+2],l[d+3]=l[0],l[d+4]=l[1],l[d+5]=l[2],l[d+6]=l[3*3],l[d+7]=l[3*3+1],l[d+8]=l[3*3+2],l[d+9]=l[3*7],l[d+10]=l[3*7+1],l[d+11]=l[3*7+2],d+=3*4,l[d]=l[3*5],l[d+1]=l[3*5+1],l[d+2]=l[3*5+2],l[d+3]=l[3],l[d+4]=l[4],l[d+5]=l[5],l[d+6]=l[0],l[d+7]=l[1],l[d+8]=l[2],l[d+9]=l[3*4],l[d+10]=l[3*4+1],l[d+11]=l[3*4+2],d+=3*4,l[d]=l[3],l[d+1]=l[4],l[d+2]=l[5],l[d+3]=l[3*5],l[d+4]=l[3*5+1],l[d+5]=l[3*5+2],l[d+6]=l[3*6],l[d+7]=l[3*6+1],l[d+8]=l[3*6+2],l[d+9]=l[3*2],l[d+10]=l[3*2+1],l[d+11]=l[3*2+2],d+=3*4,l[d]=l[3*2],l[d+1]=l[3*2+1],l[d+2]=l[3*2+2],l[d+3]=l[3*6],l[d+4]=l[3*6+1],l[d+5]=l[3*6+2],l[d+6]=l[3*7],l[d+7]=l[3*7+1],l[d+8]=l[3*7+2],l[d+9]=l[3*3],l[d+10]=l[3*3+1],l[d+11]=l[3*3+2],r||(l=l.subarray(3*4));let u=new fn({position:new Ee({componentDatatype:q.DOUBLE,componentsPerAttribute:3,values:l})});if(c(s.normal)||c(s.tangent)||c(s.bitangent)||c(s.st)){let p=c(s.normal)?new Float32Array(12*a):void 0,y=c(s.tangent)?new Float32Array(3*4*a):void 0,h=c(s.bitangent)?new Float32Array(3*4*a):void 0,g=c(s.st)?new Float32Array(2*4*a):void 0,x=yxe,S=gxe,V=xxe,Z=m.negate(x,kut),R=m.negate(S,Uut),E=m.negate(V,Out);d=0,r&&(lL(d,p,y,h,g,E,x,S),d+=3*4),lL(d,p,y,h,g,V,Z,S),d+=3*4,lL(d,p,y,h,g,Z,E,S),d+=3*4,lL(d,p,y,h,g,R,E,Z),d+=3*4,lL(d,p,y,h,g,x,V,S),d+=3*4,lL(d,p,y,h,g,S,V,Z),c(p)&&(u.normal=new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:3,values:p})),c(y)&&(u.tangent=new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:3,values:y})),c(h)&&(u.bitangent=new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:3,values:h})),c(g)&&(u.st=new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:2,values:g}))}let f=new Uint16Array(6*a);for(let p=0;p<a;++p){let y=p*6,h=p*4;f[y]=h,f[y+1]=h+1,f[y+2]=h+2,f[y+3]=h,f[y+4]=h+2,f[y+5]=h+3}return new dt({attributes:u,indices:f,primitiveType:ve.TRIANGLES,boundingSphere:ue.fromVertices(l)})};var NT=MT;var e5i=_(T(),1);var P4=0,Dut=1;function NF(e){C.typeOf.object("options",e),C.typeOf.object("options.frustum",e.frustum),C.typeOf.object("options.origin",e.origin),C.typeOf.object("options.orientation",e.orientation);let t=e.frustum,n=e.orientation,i=e.origin,o=e._drawNearPlane??!0,r,s;t instanceof Ci?(r=P4,s=Ci.packedLength):t instanceof sn&&(r=Dut,s=sn.packedLength),this._frustumType=r,this._frustum=t.clone(),this._origin=m.clone(i),this._orientation=Fe.clone(n),this._drawNearPlane=o,this._workerName="createFrustumOutlineGeometry",this.packedLength=2+s+m.packedLength+Fe.packedLength}NF.pack=function(e,t,n){C.typeOf.object("value",e),C.defined("array",t),n=n??0;let i=e._frustumType,o=e._frustum;return t[n++]=i,i===P4?(Ci.pack(o,t,n),n+=Ci.packedLength):(sn.pack(o,t,n),n+=sn.packedLength),m.pack(e._origin,t,n),n+=m.packedLength,Fe.pack(e._orientation,t,n),n+=Fe.packedLength,t[n]=e._drawNearPlane?1:0,t};var But=new Ci,Yut=new sn,Hut=new Fe,zut=new m;NF.unpack=function(e,t,n){C.defined("array",e),t=t??0;let i=e[t++],o;i===P4?(o=Ci.unpack(e,t,But),t+=Ci.packedLength):(o=sn.unpack(e,t,Yut),t+=sn.packedLength);let r=m.unpack(e,t,zut);t+=m.packedLength;let s=Fe.unpack(e,t,Hut);t+=Fe.packedLength;let a=e[t]===1;if(!c(n))return new NF({frustum:o,origin:r,orientation:s,_drawNearPlane:a});let l=i===n._frustumType?n._frustum:void 0;return n._frustum=o.clone(l),n._frustumType=i,n._origin=m.clone(r,n._origin),n._orientation=Fe.clone(s,n._orientation),n._drawNearPlane=a,n};NF.createGeometry=function(e){let t=e._frustumType,n=e._frustum,i=e._origin,o=e._orientation,r=e._drawNearPlane,s=new Float64Array(3*4*2);NT._computeNearFarPlanes(i,o,t,n,s);let a=new fn({position:new Ee({componentDatatype:q.DOUBLE,componentsPerAttribute:3,values:s})}),l,d,u=r?2:1,f=new Uint16Array(8*(u+1)),p=r?0:1;for(;p<2;++p)l=r?p*8:0,d=p*4,f[l]=d,f[l+1]=d+1,f[l+2]=d+1,f[l+3]=d+2,f[l+4]=d+2,f[l+5]=d+3,f[l+6]=d+3,f[l+7]=d;for(p=0;p<2;++p)l=(u+p)*8,d=p*4,f[l]=d,f[l+1]=d+4,f[l+2]=d+1,f[l+3]=d+5,f[l+4]=d+2,f[l+5]=d+6,f[l+6]=d+3,f[l+7]=d+7;return new dt({attributes:a,indices:f,primitiveType:ve.LINES,boundingSphere:ue.fromVertices(s)})};var kF=NF;function TD(e){if(e=e??z.EMPTY_OBJECT,!c(e.camera))throw new L("options.camera is required.");this._camera=e.camera,this._frustumSplits=e.frustumSplits,this._color=e.color??Y.CYAN,this._updateOnChange=e.updateOnChange??!0,this.show=e.show??!0,this.id=e.id,this._id=void 0,this._outlinePrimitives=[],this._planesPrimitives=[]}var Kut=new m,Jut=new te,Qut=new Fe,jut=new Ci,qut=new hl,$ut=new sn,emt=new Oo,tmt=new Y,nmt=[1,1e5];TD.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 Ci?a=jut:s instanceof hl?a=qut:s instanceof sn?a=$ut:a=emt,a=s.clone(a);let l,d=this._frustumSplits;!c(d)||d.length<=1?(d=nmt,d[0]=this._camera.frustum.near,d[1]=this._camera.frustum.far,l=1):l=d.length-1;let u=r.positionWC,f=r.directionWC,p=r.upWC,y=r.rightWC;y=m.negate(y,Kut);let h=Jut;te.setColumn(h,0,y,h),te.setColumn(h,1,p,h),te.setColumn(h,2,f,h);let g=Fe.fromRotationMatrix(h,Qut);for(t.length=n.length=l,i=0;i<l;++i)a.near=d[i],a.far=d[i+1],t[i]=new In({geometryInstances:new Rt({geometry:new NT({origin:u,orientation:g,frustum:a,_drawNearPlane:i===0}),attributes:{color:Yt.fromColor(Y.fromAlpha(this._color,.1,tmt))},id:this.id,pickPrimitive:this}),appearance:new an({translucent:!0,flat:!0}),asynchronous:!1}),n[i]=new In({geometryInstances:new Rt({geometry:new kF({origin:u,orientation:g,frustum:a,_drawNearPlane:i===0}),attributes:{color:Yt.fromColor(this._color)},id:this.id,pickPrimitive:this}),appearance:new an({translucent:!1,flat:!0}),asynchronous:!1})}for(o=t.length,i=0;i<o;++i)n[i].update(e),t[i].update(e)};TD.prototype.isDestroyed=function(){return!1};TD.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 he(this)};var op=TD;var O5i=_(T(),1);function OF(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 UF=Ot.supportsTypedArrays()?new Float32Array(12):[],Txe=new m,Sxe=new m,v4=new m,Cxe=new m,SD=new m;function imt(e,t){let n=e.radii,i=t.camera,o,r,s;if(i.frustum instanceof sn)o=m.ZERO,r=i.rightWC,s=i.upWC;else{let f=i.positionWC,p=m.multiplyComponents(e.oneOverRadii,f,Txe),y=m.normalize(p,Sxe),h=m.normalize(m.cross(m.UNIT_Z,p,v4),v4),g=m.normalize(m.cross(y,h,Cxe),Cxe),x=m.magnitude(p),S=Math.sqrt(x*x-1);o=m.multiplyByScalar(y,1/x,Txe);let V=S/x;r=m.multiplyByScalar(h,V,Sxe),s=m.multiplyByScalar(g,V,v4)}let a=m.add(o,s,SD);m.subtract(a,r,a),m.multiplyComponents(n,a,a),m.pack(a,UF,0);let l=m.subtract(o,s,SD);m.subtract(l,r,l),m.multiplyComponents(n,l,l),m.pack(l,UF,3);let d=m.add(o,s,SD);m.add(d,r,d),m.multiplyComponents(n,d,d),m.pack(d,UF,6);let u=m.subtract(o,s,SD);return m.add(u,r,u),m.multiplyComponents(n,u,u),m.pack(u,UF,9),UF}OF.prototype.update=function(e){if(this._mode=e.mode,e.mode!==se.SCENE3D)return;let t=e.context,n=e.mapProjection.ellipsoid.radii,i=new re(n.x+this._ellipsoidOffset,n.y+this._ellipsoidOffset,n.z+this._ellipsoidOffset),o=e.useLogDepth;if(c(this._command)||(this._rs=Oe.fromCache({cull:{enabled:!0},depthTest:{enabled:!0},colorMask:{red:!1,green:!1,blue:!1,alpha:!1}}),this._command=new et({renderState:this._rs,boundingVolume:new ue(m.ZERO,i.maximumRadius),pass:Xe.OPAQUE,owner:this})),!c(this._sp)||this._useLogDepth!==o){this._useLogDepth=o;let s=new Be({sources:[Av]}),a=new Be({sources:[Fv]});o&&(a.defines.push("LOG_DEPTH"),s.defines.push("LOG_DEPTH")),this._sp=tn.replaceCache({shaderProgram:this._sp,context:t,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:{position:0}}),this._command.shaderProgram=this._sp}let r=imt(i,e);if(c(this._va))this._va.getAttribute(0).vertexBuffer.copyFromArrayView(r);else{let s=new dt({attributes:{position:new Ee({componentDatatype:q.FLOAT,componentsPerAttribute:3,values:r})},indices:[0,1,2,2,1,3],primitiveType:ve.TRIANGLES});this._va=ni.fromGeometry({context:t,geometry:s,attributeLocations:{position:0},bufferUsage:Ne.DYNAMIC_DRAW}),this._command.vertexArray=this._va}};OF.prototype.execute=function(e,t){this._mode===se.SCENE3D&&this._command.execute(e,t)};OF.prototype.isDestroyed=function(){return!1};OF.prototype.destroy=function(){this._sp=this._sp&&this._sp.destroy(),this._va=this._va&&this._va.destroy()};var DF=OF;var j5i=_(T(),1);function uL(){}var omt=/\bgl_FragDepth\b/,rmt=/\bdiscard\b/;function smt(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"depthOnly");if(c(n))return n;let i=t.fragmentShaderSource,o=!1,r=i.sources;for(let a=0;a<r.length;++a)if(omt.test(r[a])||rmt.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 Be({sources:[a]})}else if(!o&&s){let a=`void main() { out_FragColor = vec4(1.0); czm_writeLogDepth(); } `;i=new Be({defines:["LOG_DEPTH"],sources:[a]})}return e.shaderCache.createDerivedShaderProgram(t,"depthOnly",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:i,attributeLocations:t._attributeLocations})}function amt(e,t){let n=e._depthOnlyRenderStateCache,i=n[t.id];if(c(i))return i;let o=Oe.getState(t);o.depthMask=!0,o.colorMask={red:!1,green:!1,blue:!1,alpha:!1};let r=Oe.fromCache(o);return n[t.id]=r,r}uL.createDepthOnlyDerivedCommand=function(e,t,n,i){c(i)||(i={});let o=i.depthOnlyCommand?.shaderProgram,r=i.depthOnlyCommand?.renderState;return i.depthOnlyCommand=et.shallowClone(t,i.depthOnlyCommand),!c(o)||i.shaderProgramId!==t.shaderProgram.id?(i.depthOnlyCommand.shaderProgram=smt(n,t.shaderProgram),i.depthOnlyCommand.renderState=amt(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.depthOnlyCommand.shaderProgram=o,i.depthOnlyCommand.renderState=r),i};var cmt=/\s+czm_writeLogDepth\(/,lmt=/\s+czm_vertexLogDepth\(/;function dmt(e,t){if(t.fragmentShaderSource.defines.indexOf("LOG_DEPTH_READ_ONLY")>=0)return t;let i=e.shaderCache.getDerivedShaderProgram(t,"logDepth");if(c(i))return i;let o=t._attributeLocations,r=t.vertexShaderSource.clone(),s=t.fragmentShaderSource.clone();r.defines=c(r.defines)?r.defines.slice(0):[],r.defines.push("LOG_DEPTH"),s.defines=c(s.defines)?s.defines.slice(0):[],s.defines.push("LOG_DEPTH");let a=!1,l=r.sources;for(let u=0;u<l.length;++u)if(lmt.test(l[u])){a=!0;break}if(!a){for(let f=0;f<l.length;++f)l[f]=Be.replaceMain(l[f],"czm_log_depth_main");l.push(` void main() { czm_log_depth_main(); czm_vertexLogDepth(); } `)}l=s.sources,a=!1;for(let u=0;u<l.length;++u)cmt.test(l[u])&&(a=!0);s.defines.indexOf("LOG_DEPTH_WRITE")!==-1&&(a=!0);let d="";if(!a){for(let u=0;u<l.length;u++)l[u]=Be.replaceMain(l[u],"czm_log_depth_main");d=` void main() { czm_log_depth_main(); czm_writeLogDepth(); } `}return l.push(d),e.shaderCache.createDerivedShaderProgram(t,"logDepth",{vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:o})}uL.createLogDepthCommand=function(e,t,n){c(n)||(n={});let i=n.command?.shaderProgram;return n.command=et.shallowClone(e,n.command),!c(i)||n.shaderProgramId!==e.shaderProgram.id?(n.command.shaderProgram=dmt(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};function umt(e,t,n){let i=e.shaderCache.getDerivedShaderProgram(t,"pick");if(c(i))return i;let o=t._attributeLocations,{sources:r,defines:s}=t.fragmentShaderSource,l=r.some(y=>y.includes("out_FragData"))?"out_FragData_0":"out_FragColor",d=`void main () { czm_non_pick_main(); if (${l}.a == 0.0) { discard; } ${l} = ${n}; } `,u=r.length,f=new Array(u+1);for(let y=0;y<u;++y)f[y]=Be.replaceMain(r[y],"czm_non_pick_main");f[u]=d;let p=new Be({sources:f,defines:s});return e.shaderCache.createDerivedShaderProgram(t,"pick",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:p,attributeLocations:o})}function Vxe(e,t){let n=e.picking.pickRenderStateCache,i=n[t.id];if(c(i))return i;let o=Oe.getState(t);o.blending.enabled=!1,o.depthMask=!0;let r=Oe.fromCache(o);return n[t.id]=r,r}uL.createPickDerivedCommand=function(e,t,n,i){c(i)||(i={});let o=i.pickCommand?.shaderProgram,r=i.pickCommand?.renderState;return i.pickCommand=et.shallowClone(t,i.pickCommand),!c(o)||i.shaderProgramId!==t.shaderProgram.id?(i.pickCommand.shaderProgram=umt(n,t.shaderProgram,t.pickId),i.pickCommand.renderState=Vxe(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.pickCommand.shaderProgram=o,i.pickCommand.renderState=r),i};function dL(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 Lxe(e){return e.isArray?e.arrayLength:lt.getComponentCount(e.type)}function mmt(e){let t=Lxe(e);return e.normalized?t===1?"float":`vec${t}`:t===1?"int":`ivec${t}`}function Zxe(e,t,n){return`((${e} - float(${t})) / float(${n}))`}function Rxe(e,t){let n=At.getMaximum(t);return`(${e}) / float(${n})`}function fmt(e,t){let n="float(value)";if(t.hasValueTransform){let i=t.offset,o=t.scale;n=Zxe(n,i,o)}return e.normalized||(n=Rxe(n,e.componentType)),n}function hmt(e,t,n){let o=`float(${`value.${n}`})`;if(t.hasValueTransform){let r=t.offset[n],s=t.scale[n];o=Zxe(o,r,s)}return e.normalized||(o=Rxe(o,e.componentType)),o}function pmt(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(c(a))return a;let l=n.metadataProperty,d=n.classProperty,u=mmt(d),f=["0.0","0.0","0.0","0.0"],p=Lxe(d);if(p===1)f[0]=fmt(d,l);else{let x=["x","y","z","w"];for(let S=0;S<p;S++)f[S]=hmt(d,l,x[S])}let y=t.fragmentShaderSource.defines.slice();y.push(Ld.METADATA_PICKING_ENABLED),dL(y,Ld.METADATA_PICKING_VALUE_TYPE,u),dL(y,Ld.METADATA_PICKING_VALUE_STRING,`metadata.${r}`),dL(y,Ld.METADATA_PICKING_VALUE_COMPONENT_X,f[0]),dL(y,Ld.METADATA_PICKING_VALUE_COMPONENT_Y,f[1]),dL(y,Ld.METADATA_PICKING_VALUE_COMPONENT_Z,f[2]),dL(y,Ld.METADATA_PICKING_VALUE_COMPONENT_W,f[3]);let h=new Be({sources:t.fragmentShaderSource.sources,defines:y});return e.shaderCache.createDerivedShaderProgram(t,s,{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:h,attributeLocations:t._attributeLocations})}uL.createPickMetadataDerivedCommand=function(e,t,n,i){return c(i)||(i={}),i.pickMetadataCommand=et.shallowClone(t,i.pickMetadataCommand),i.pickMetadataCommand.shaderProgram=pmt(n,t.shaderProgram,t.pickedMetadataInfo),i.pickMetadataCommand.renderState=Vxe(e,t.renderState),i.shaderProgramId=t.shaderProgram.id,i};function bmt(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"HDR");if(c(n))return n;let i=t._attributeLocations,o=t.vertexShaderSource.clone(),r=t.fragmentShaderSource.clone();return o.defines=c(o.defines)?o.defines.slice(0):[],o.defines.push("HDR"),r.defines=c(r.defines)?r.defines.slice(0):[],r.defines.push("HDR"),e.shaderCache.createDerivedShaderProgram(t,"HDR",{vertexShaderSource:o,fragmentShaderSource:r,attributeLocations:i})}uL.createHdrCommand=function(e,t,n){c(n)||(n={});let i=n.command?.shaderProgram;return n.command=et.shallowClone(e,n.command),!c(i)||n.shaderProgramId!==e.shaderProgram.id?(n.command.shaderProgram=bmt(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};var rp=uL;var rki=_(T(),1);function CD(e){if(!c(e))throw new L("scene is required.");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(!c(o)){t._alpha=void 0,t._beta=void 0,t._gamma=void 0;return}t._alpha=w.toRadians(o),t._beta=w.toRadians(i.beta),t._gamma=w.toRadians(i.gamma)}window.addEventListener("deviceorientation",n,!1),this._removeListener=function(){window.removeEventListener("deviceorientation",n,!1)}}var ymt=new Fe,Gxe=new Fe,gmt=new te;function xmt(e,t,n,i){let o=e.direction,r=e.right,s=e.up,a=Fe.fromAxisAngle(o,n,Gxe),l=Fe.fromAxisAngle(r,i,ymt),d=Fe.multiply(l,a,l),u=Fe.fromAxisAngle(s,t,Gxe);Fe.multiply(u,d,d);let f=te.fromQuaternion(d,gmt);te.multiplyByVector(f,r,r),te.multiplyByVector(f,s,s),te.multiplyByVector(f,o,o)}CD.prototype.update=function(){if(!c(this._alpha))return;c(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;xmt(this._scene.camera,-e,t,n),this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma};CD.prototype.isDestroyed=function(){return!1};CD.prototype.destroy=function(){return this._removeListener(),he(this)};var BF=CD;var mki=_(T(),1);function F4(){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(F4.prototype,{heightFalloff:{get:function(){return this._heightFalloff},set:function(e){if(c(e)&&e<0)throw new L("value must be positive.");this._heightFalloff=e}}});var _mt=new m;F4.prototype.update=function(e){if(!(e.fog.enabled=this.enabled))return;e.fog.renderable=this.renderable;let n=e.camera,i=n.positionCartographic;if(!c(i)||i.height>this.maxHeight||e.mode!==se.SCENE3D){e.fog.enabled=!1,e.fog.density=0;return}let o=i.height,r=this.density*this.heightScalar*Math.pow(Math.max(o/this.maxHeight,w.EPSILON4),-Math.max(this._heightFalloff,0)),s=m.normalize(n.positionWC,_mt),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 YF=F4;var pki=_(T(),1);function Tmt(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=se.SCENE3D,this.morphTime=se.getMorphTime(se.SCENE3D),this.frameNumber=0,this.newFrame=!1,this.time=void 0,this.jobScheduler=n,this.mapProjection=void 0,this.camera=void 0,this.cameraUnderground=!1,this.globeTranslucencyState=void 0,this.cullingVolume=void 0,this.occluder=void 0,this.maximumScreenSpaceError=void 0,this.pixelRatio=1,this.passes={render:!1,pick:!1,pickVoxel:!1,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 HF=Tmt;var Gki=_(T(),1);var Ca={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},kT=Ca.DERIVED_COMMANDS_MAXIMUM_LENGTH,Mxe=["opaqueFrontFaceCommand","opaqueBackFaceCommand","depthOnlyFrontFaceCommand","depthOnlyBackFaceCommand","depthOnlyFrontAndBackFaceCommand","translucentFrontFaceCommand","translucentBackFaceCommand","translucentFrontFaceManualDepthTestCommand","translucentBackFaceManualDepthTestCommand","pickFrontFaceCommand","pickBackFaceCommand"];function UT(){this._frontFaceAlphaByDistance=new Nt(0,1,0,1),this._backFaceAlphaByDistance=new Nt(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=de.clone(de.MAX_VALUE),this._derivedCommandKey=0,this._derivedCommandsDirty=!1,this._derivedCommandPacks=void 0,this._derivedCommandTypes=new Array(kT),this._derivedBlendCommandTypes=new Array(kT),this._derivedPickCommandTypes=new Array(kT),this._derivedCommandTypesToUpdate=new Array(kT),this._derivedCommandsLength=0,this._derivedBlendCommandsLength=0,this._derivedPickCommandsLength=0,this._derivedCommandsToUpdateLength=0}Object.defineProperties(UT.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}}});UT.prototype.update=function(e){let t=e.globe;if(!c(t)||!t.show){this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._sunVisibleThroughGlobe=!0,this._environmentVisible=!0,this._useDepthPlane=!1;return}this._frontFaceAlphaByDistance=Exe(t.translucency.enabled,t.translucency.frontFaceAlpha,t.translucency.frontFaceAlphaByDistance,this._frontFaceAlphaByDistance),this._backFaceAlphaByDistance=Exe(t.translucency.enabled,t.translucency.backFaceAlpha,t.translucency.backFaceAlphaByDistance,this._backFaceAlphaByDistance),this._frontFaceTranslucent=Xxe(t.translucency.enabled,this._frontFaceAlphaByDistance,t),this._backFaceTranslucent=Xxe(t.translucency.enabled,this._backFaceAlphaByDistance,t),this._requiresManualDepthTest=Lmt(this,e,t),this._sunVisibleThroughGlobe=Smt(this,e),this._environmentVisible=Cmt(this,e),this._useDepthPlane=Vmt(this,e),this._numberOfTextureUniforms=Zmt(this),this._rectangle=de.clone(t.translucency.rectangle,this._rectangle),Rmt(this,e)};function Exe(e,t,n,i){return e?c(n)?(Nt.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 Xxe(e,t,n){return e&&(n.baseColor.alpha<1||t.nearValue<1||t.farValue<1)}function Smt(e,t){let n=e._frontFaceTranslucent,i=e._backFaceTranslucent;return n&&(t.cameraUnderground||i)}function Cmt(e,t){return!t.cameraUnderground||e._frontFaceTranslucent}function Vmt(e,t){return!t.cameraUnderground&&!e._frontFaceTranslucent}function Lmt(e,t,n){return e._frontFaceTranslucent&&!e._backFaceTranslucent&&!n.depthTestAgainstTerrain&&t.mode!==se.SCENE2D&&t.context.depthTexture}function Zmt(e){let t=0;return e._frontFaceTranslucent&&++t,e._requiresManualDepthTest&&++t,t}function Rmt(e,t){e._derivedCommandsLength=A4(e,t,!1,!1,e._derivedCommandTypes),e._derivedBlendCommandsLength=A4(e,t,!0,!1,e._derivedBlendCommandTypes),e._derivedPickCommandsLength=A4(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<kT;++n)(i&1<<n)>0&&(e._derivedCommandTypesToUpdate[o++]=n);e._derivedCommandsToUpdateLength=o;let r=i!==e._derivedCommandKey;e._derivedCommandKey=i,e._derivedCommandsDirty=r,!c(e._derivedCommandPacks)&&e._frontFaceTranslucent&&(e._derivedCommandPacks=Omt())}function A4(e,t,n,i,o){let r=0,s=e._frontFaceTranslucent,a=e._backFaceTranslucent;if(!s)return r;let l=t.cameraUnderground,d=e._requiresManualDepthTest,u=i?Ca.PICK_FRONT_FACE:d?Ca.TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:Ca.TRANSLUCENT_FRONT_FACE,f=i?Ca.PICK_BACK_FACE:d?Ca.TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:Ca.TRANSLUCENT_BACK_FACE;return t.mode===se.SCENE2D?(o[r++]=Ca.DEPTH_ONLY_FRONT_FACE,o[r++]=u,r):(a?(n||(o[r++]=Ca.DEPTH_ONLY_FRONT_AND_BACK_FACE),l?(o[r++]=u,o[r++]=f):(o[r++]=f,o[r++]=u)):l?(n||(o[r++]=Ca.DEPTH_ONLY_BACK_FACE),o[r++]=Ca.OPAQUE_FRONT_FACE,o[r++]=f):(n||(o[r++]=Ca.DEPTH_ONLY_FRONT_FACE),o[r++]=Ca.OPAQUE_BACK_FACE,o[r++]=u),r)}function pm(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function Ixe(e,t){return e.indexOf(t)>-1}function Gmt(e,t){pm(e.defines,"TRANSLUCENT"),pm(t.defines,"TRANSLUCENT")}function Emt(e,t){pm(e.defines,"GROUND_ATMOSPHERE"),pm(t.defines,"GROUND_ATMOSPHERE"),pm(e.defines,"FOG"),pm(t.defines,"FOG"),pm(e.defines,"TRANSLUCENT"),pm(t.defines,"TRANSLUCENT")}function M4(e,t){if(Ixe(t.defines,"TILE_LIMIT_RECTANGLE")||Ixe(t.defines,"ENABLE_CLIPPING_PLANES"))return;let n=`void main() { out_FragColor = vec4(1.0); } `;t.sources=[n]}function N4(e,t){let n=t.sources,i=n.length;for(let r=0;r<i;++r)n[r]=Be.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 Nxe(e,t){N4(e,t),pm(e.defines,"GROUND_ATMOSPHERE"),pm(t.defines,"GROUND_ATMOSPHERE"),pm(e.defines,"FOG"),pm(t.defines,"FOG")}function Xmt(e,t){N4(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function Imt(e,t){Nxe(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function Wxe(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 Wmt(e,t,n,i,o,r){if(!c(o))return t;if(!i&&c(n))return n;let s=e.shaderCache.getDerivedShaderProgram(t,r);if(!c(s)){let a=t._attributeLocations,l=t.vertexShaderSource.clone(),d=t.fragmentShaderSource.clone();l.defines=c(l.defines)?l.defines.slice(0):[],d.defines=c(d.defines)?d.defines.slice(0):[],o(l,d),s=e.shaderCache.createDerivedShaderProgram(t,r,{vertexShaderSource:l,fragmentShaderSource:d,attributeLocations:a})}return s}function wmt(e){e.cull.face=_i.BACK,e.cull.enabled=!0}function Pmt(e){e.cull.face=_i.FRONT,e.cull.enabled=!0}function vmt(e){e.cull.face=_i.BACK,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function Fmt(e){e.cull.face=_i.FRONT,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function Amt(e){e.cull.enabled=!1,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function wxe(e){e.cull.face=_i.BACK,e.cull.enabled=!0,e.depthMask=!1,e.blending=un.ALPHA_BLEND}function Pxe(e){e.cull.face=_i.FRONT,e.cull.enabled=!0,e.depthMask=!1,e.blending=un.ALPHA_BLEND}function Mmt(e){e.cull.face=_i.BACK,e.cull.enabled=!0,e.blending.enabled=!1}function Nmt(e){e.cull.face=_i.FRONT,e.cull.enabled=!0,e.blending.enabled=!1}function kmt(e,t,n,i,o){if(!c(i))return e;if(!n&&c(t))return t;let r=o[e.id];if(!c(r)){let s=Oe.getState(e);i(s),r=Oe.fromCache(s),o[e.id]=r}return r}function mL(e){return{u_classificationTexture:function(){return e._globeTranslucencyFramebuffer.classificationTexture}}}function Umt(e,t,n,i,o){return c(o)?!i&&c(n)?n:St(t,o(e),!1):t}function Of(e){this.pass=e.pass,this.pickOnly=e.pickOnly,this.getShaderProgramFunction=e.getShaderProgramFunction,this.getRenderStateFunction=e.getRenderStateFunction,this.getUniformMapFunction=e.getUniformMapFunction,this.renderStateCache={}}function Omt(){return[new Of({pass:Xe.GLOBE,pickOnly:!1,getShaderProgramFunction:Gmt,getRenderStateFunction:wmt,getUniformMapFunction:void 0}),new Of({pass:Xe.GLOBE,pickOnly:!1,getShaderProgramFunction:Emt,getRenderStateFunction:Pmt,getUniformMapFunction:void 0}),new Of({pass:Xe.GLOBE,pickOnly:!1,getShaderProgramFunction:M4,getRenderStateFunction:vmt,getUniformMapFunction:void 0}),new Of({pass:Xe.GLOBE,pickOnly:!1,getShaderProgramFunction:M4,getRenderStateFunction:Fmt,getUniformMapFunction:void 0}),new Of({pass:Xe.GLOBE,pickOnly:!1,getShaderProgramFunction:M4,getRenderStateFunction:Amt,getUniformMapFunction:void 0}),new Of({pass:Xe.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:N4,getRenderStateFunction:wxe,getUniformMapFunction:mL}),new Of({pass:Xe.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:Nxe,getRenderStateFunction:Pxe,getUniformMapFunction:mL}),new Of({pass:Xe.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:Xmt,getRenderStateFunction:wxe,getUniformMapFunction:mL}),new Of({pass:Xe.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:Imt,getRenderStateFunction:Pxe,getUniformMapFunction:mL}),new Of({pass:Xe.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:Wxe,getRenderStateFunction:Mmt,getUniformMapFunction:mL}),new Of({pass:Xe.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:Wxe,getRenderStateFunction:Nmt,getUniformMapFunction:mL})]}var vxe=new Array(kT),Fxe=new Array(kT);UT.prototype.updateDerivedCommands=function(e,t){let n=this._derivedCommandTypesToUpdate,i=this._derivedCommandsToUpdateLength;if(i!==0){for(let o=0;o<i;++o)Fxe[o]=this._derivedCommandPacks[n[o]],vxe[o]=Mxe[n[o]];Dmt(this,e,i,n,vxe,Fxe,t)}};function Dmt(e,t,n,i,o,r,s){let a=t.derivedCommands.globeTranslucency,l=e._derivedCommandsDirty;if(t.dirty||!c(a)||l){t.dirty=!1,c(a)||(a={},t.derivedCommands.globeTranslucency=a);let d=s.frameNumber,u=a.uniformMapDirtyFrame??0,f=a.shaderProgramDirtyFrame??0,p=a.renderStateDirtyFrame??0,y=a.uniformMap!==t.uniformMap,h=a.shaderProgramId!==t.shaderProgram.id,g=a.renderStateId!==t.renderState.id;y&&(a.uniformMapDirtyFrame=d),h&&(a.shaderProgramDirtyFrame=d),g&&(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 S=r[x],V=i[x],Z=o[x],R=a[Z],E,I,v;c(R)?(E=R.uniformMap,I=R.shaderProgram,v=R.renderState):(E=void 0,I=void 0,v=void 0),R=et.shallowClone(t,R),a[Z]=R;let P=R.derivedCommands.uniformMapDirtyFrame??0,F=R.derivedCommands.shaderProgramDirtyFrame??0,N=R.derivedCommands.renderStateDirtyFrame??0,b=y||P<u,G=h||F<f,X=g||N<p;b&&(R.derivedCommands.uniformMapDirtyFrame=d),G&&(R.derivedCommands.shaderProgramDirtyFrame=d),X&&(R.derivedCommands.renderStateDirtyFrame=d),R.derivedCommands.type=V,R.pass=S.pass,R.pickOnly=S.pickOnly,R.uniformMap=Umt(e,t.uniformMap,E,b,S.getUniformMapFunction),R.shaderProgram=Wmt(s.context,t.shaderProgram,I,G,S.getShaderProgramFunction,Z),R.renderState=kmt(t.renderState,v,X,S.getRenderStateFunction,S.renderStateCache)}}}UT.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 l=Mxe[o[a]];n.commandList.push(s[l])}};function kxe(e,t,n,i,o,r){for(let s=0;s<t;++s){let a=e[s],l=a.derivedCommands.type;(!c(r)||r.indexOf(l)>-1)&&n(a,i,o)}}function Axe(e,t,n,i,o){for(let r=0;r<t;++r)n(e[r],i,o)}var Bmt=[Ca.OPAQUE_FRONT_FACE,Ca.OPAQUE_BACK_FACE],Ymt=[Ca.DEPTH_ONLY_FRONT_FACE,Ca.DEPTH_ONLY_BACK_FACE,Ca.DEPTH_ONLY_FRONT_AND_BACK_FACE];UT.prototype.executeGlobeCommands=function(e,t,n,i,o){let r=i.context,s=e.commands[Xe.GLOBE],a=e.indices[Xe.GLOBE];a!==0&&(this._globeTranslucencyFramebuffer=n,n.clearClassification(r,o),kxe(s,a,t,i,o,Bmt))};UT.prototype.executeGlobeClassificationCommands=function(e,t,n,i,o){let{context:r}=i,{uniformState:s}=r,a=e.commands[Xe.GLOBE],l=e.indices[Xe.GLOBE],d=e.commands[Xe.TERRAIN_CLASSIFICATION],u=e.indices[Xe.TERRAIN_CLASSIFICATION];if(l===0||u===0)return;let f=this._frontFaceTranslucent,p=this._backFaceTranslucent;if((!f||!p)&&Axe(d,u,t,i,o),!f&&!p)return;this._globeTranslucencyFramebuffer=n;let y=s.globeDepthTexture,h=o.framebuffer;if(o.framebuffer=n.classificationFramebuffer,kxe(a,l,t,i,o,Ymt),r.depthTexture){let g=n.packDepth(r,o);s.globeDepthTexture=g}Axe(d,u,t,i,o),s.globeDepthTexture=y,o.framebuffer=h};var zF=UT;var Jki=_(T(),1);var Xki=_(T(),1),td=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; void main() { out_FragColor = texture(colorTexture, v_textureCoordinates); } `;function sp(){this._numSamples=1,this.previousFramebuffer=void 0,this._previousFramebuffer=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this._fbo=new hi({depthStencil:!0,createDepthAttachments:!1}),this._fboClassified=new hi({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 ti({color:new Y(0,0,0,0),owner:this}),this._clearCommand=new ti({color:new Y(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(sp.prototype,{unclassifiedCommand:{get:function(){return this._unclassifiedCommand}}});sp.isTranslucencySupported=function(e){return e.depthTexture&&e.fragmentDepth};var Hmt={depthMask:!1,stencilTest:{enabled:!0,frontFunction:On.EQUAL,frontOperation:{fail:ft.KEEP,zFail:ft.KEEP,zPass:ft.KEEP},backFunction:On.NEVER,reference:0,mask:kt.CLASSIFICATION_MASK},blending:un.ALPHA_BLEND},zmt={depthMask:!1,stencilTest:{enabled:!0,frontFunction:On.NOT_EQUAL,frontOperation:{fail:ft.KEEP,zFail:ft.KEEP,zPass:ft.KEEP},backFunction:On.NEVER,reference:0,mask:kt.CLASSIFICATION_MASK},blending:un.ALPHA_BLEND},Kmt={depthMask:!0,depthTest:{enabled:!0},stencilTest:kt.setCesium3DTileBit(),stencilMask:kt.CESIUM_3D_TILE_MASK,blending:un.ALPHA_BLEND},Jmt=`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; } `,Qmt=`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 } `;sp.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,l=!c(i)||i.width!==s||i.height!==a;if((l||o||r)&&(this._numSamples=t,this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy(),c(this._previousFramebuffer)||(this._depthStencilTexture=new Pt({context:e,width:s,height:a,pixelFormat:ke.DEPTH_STENCIL,pixelDatatype:Ue.UNSIGNED_INT_24_8}),t>1&&(this._depthStencilRenderbuffer=new md({context:e,width:s,height:a,format:ac.DEPTH24_STENCIL8,numSamples:t})))),!c(this._fbo.framebuffer)||l||o||r){this._fbo.destroy(),this._fboClassified.destroy();let d,u;c(this._previousFramebuffer)?(d=n.getDepthStencilTexture(),u=n.getDepthStencilRenderbuffer()):(d=this._depthStencilTexture,u=this._depthStencilRenderbuffer),this._fbo.setDepthStencilTexture(d),c(u)&&this._fbo.setDepthStencilRenderbuffer(u),this._fbo.update(e,s,a,t),c(this._previousFramebuffer)||(this._fboClassified.setDepthStencilTexture(d),this._fboClassified.update(e,s,a))}if(c(this._rsUnclassified)||(this._rsUnclassified=Oe.fromCache(Hmt),this._rsClassified=Oe.fromCache(zmt),this._rsDefault=Oe.fromCache(Kmt)),!c(this._unclassifiedCommand)||o||r){c(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy());let d=c(this._previousFramebuffer)?Qmt:Jmt,u=new Be({defines:["UNCLASSIFIED"],sources:[d]}),f=new Be({sources:[d]});this._unclassifiedCommand=e.createViewportQuadCommand(u,{renderState:c(this._previousFramebuffer)?this._rsUnclassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),this._classifiedCommand=e.createViewportQuadCommand(f,{renderState:c(this._previousFramebuffer)?this._rsClassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),c(this._translucentCommand)&&(this._translucentCommand.shaderProgram=this._translucentCommand.shaderProgram&&this._translucentCommand.shaderProgram.destroy()),c(this._previousFramebuffer)||(this._translucentCommand=e.createViewportQuadCommand(td,{renderState:this._rsUnclassified,uniformMap:this._uniformMap,owner:this}))}};sp.prototype.prepareTextures=function(e,t){this._fbo._numSamples>1&&this._fbo.prepareTextures(e,t)};sp.prototype.clear=function(e,t){c(this._previousFramebuffer)?this._fbo.clear(e,this._clearColorCommand,t):(this._fbo.clear(e,this._clearCommand,t),this._fboClassified.clear(e,this._clearCommand,t))};sp.prototype.executeClassified=function(e,t){if(!c(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)};sp.prototype.executeUnclassified=function(e,t){this._unclassifiedCommand.execute(e,t)};sp.prototype.isDestroyed=function(){return!1};sp.prototype.destroy=function(){return this._fbo.destroy(),this._fboClassified.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy(),c(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy()),he(this)};var fL=sp;var tUi=_(T(),1);function VD(e){this._total=e,this.usedThisFrame=0,this.stolenFromMeThisFrame=0,this.starvedThisFrame=!1,this.starvedLastFrame=!1}Object.defineProperties(VD.prototype,{total:{get:function(){return this._total}}});function Ig(e){if(c(e)&&e.length!==fa.NUMBER_OF_JOB_TYPES)throw new L("A budget must be specified for each job type; budgets.length should equal JobType.NUMBER_OF_JOB_TYPES.");let t=new Array(fa.NUMBER_OF_JOB_TYPES);t[fa.TEXTURE]=new VD(c(e)?e[fa.TEXTURE]:10),t[fa.PROGRAM]=new VD(c(e)?e[fa.PROGRAM]:10),t[fa.BUFFER]=new VD(c(e)?e[fa.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}Ig.getTimestamp=Ti;Object.defineProperties(Ig.prototype,{totalBudget:{get:function(){return this._totalBudget}}});Ig.prototype.disableThisFrame=function(){this._totalUsedThisFrame=this._totalBudget};Ig.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};Ig.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 l=n.length,d;for(d=0;d<l&&(r=n[d],!(r.usedThisFrame+r.stolenFromMeThisFrame<r.total&&!r.starvedLastFrame));++d);if(d===l&&o)return!1;o&&(i.starvedThisFrame=!0)}let s=Ig.getTimestamp();e.execute();let a=Ig.getTimestamp()-s;return this._totalUsedThisFrame+=a,r?r.stolenFromMeThisFrame+=a:i.usedThisFrame+=a,this._executedThisFrame[t]=!0,!0};var KF=Ig;var lUi=_(T(),1);function LD(e){e=e??z.EMPTY_OBJECT;let t=Wn(e.container);if(!c(t))throw new L("container is required");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=Ti(),this._lastMsSampleTime=Ti(),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(LD.prototype,{throttled:{get:function(){return this._throttled},set:function(e){this._throttled!==e&&(e?this._throttledText.nodeValue="(throttled)":this._throttledText.nodeValue="",this._throttled=e)}}});LD.prototype.update=function(e){let t=Ti(),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}};LD.prototype.destroy=function(){return he(this)};var p0=LD;var m3i=_(T(),1);var SUi=_(T(),1);var Va={};Va.decodeRawMetadataValue=function(e,t,n){switch(e){case At.INT8:return t.getInt8(n);case At.UINT8:return t.getUint8(n);case At.INT16:return t.getInt16(n,!0);case At.UINT16:return t.getUint16(n,!0);case At.INT32:return t.getInt32(n,!0);case At.UINT32:return t.getUint32(n,!0);case At.INT64:return t.getBigInt64(n,!0);case At.UINT64:return t.getBigUint64(n,!0);case At.FLOAT32:return t.getFloat32(n,!0);case At.FLOAT64:return t.getFloat64(n,!0)}throw new le(`Invalid component type: ${e}`)};Va.decodeRawMetadataValueComponent=function(e,t,n){let i=e.componentType,o=Va.decodeRawMetadataValue(i,t,n);return e.normalized?At.normalize(o,i):o};Va.decodeRawMetadataValueElement=function(e,t,n){let i=e.componentType,o=At.getSizeInBytes(i),r=e.type,s=lt.getComponentCount(r),a=o*s;if(s>1){let u=Array(s);for(let f=0;f<s;f++){let p=n*a+f*o,y=Va.decodeRawMetadataValueComponent(e,t,p);u[f]=y}return u}let l=n*a;return Va.decodeRawMetadataValueComponent(e,t,l)};Va.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=Va.decodeRawMetadataValueElement(e,n,s);r[s]=a}return r}return Va.decodeRawMetadataValueElement(e,n,0)};Va.convertToObjectType=function(e,t){if(!c(t)||e===lt.SCALAR||e===lt.STRING||e===lt.BOOLEAN||e===lt.ENUM)return t;let n=t.map(i=>Number(i));switch(e){case lt.VEC2:return D.unpack(n,0,new D);case lt.VEC3:return m.unpack(n,0,new m);case lt.VEC4:return ce.unpack(n,0,new ce);case lt.MAT2:return Ii.unpack(n,0,new Ii);case lt.MAT3:return te.unpack(n,0,new te);case lt.MAT4:return M.unpack(n,0,new M)}throw new le(`Invalid metadata object type: ${e}`)};Va.convertFromObjectType=function(e,t){if(!c(t)||e===lt.SCALAR||e===lt.STRING||e===lt.BOOLEAN||e===lt.ENUM)return t;switch(e){case lt.VEC2:return D.pack(t,Array(2));case lt.VEC3:return m.pack(t,Array(3));case lt.VEC4:return ce.pack(t,Array(4));case lt.MAT2:return Ii.pack(t,Array(4));case lt.MAT3:return te.pack(t,Array(9));case lt.MAT4:return M.pack(t,Array(16))}throw new le(`Invalid metadata object type: ${e}`)};Va.decodeMetadataValues=function(e,t,n){let i=Va.decodeRawMetadataValues(e,n);if(t.hasValueTransform){let r=Va.convertFromObjectType(e.type,t.offset),s=Va.convertFromObjectType(e.type,t.scale);i=gh.valueTransformInPlace(i,r,s,At.applyValueTransform)}if(e.isArray){let r=e.arrayLength,s=Array(r);for(let a=0;a<r;a++){let l=i[a],d=Va.convertToObjectType(e.type,l);s[a]=d}return s}return Va.convertToObjectType(e.type,i)};var JF=Object.freeze(Va);var EUi=_(T(),1);function OT(){this._framebuffer=new hi,this._textureToCopy=void 0,this._copyDepthCommand=void 0}Object.defineProperties(OT.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function jmt(e,t,n){let{width:i,height:o}=n;e._framebuffer.update(t,i,o)}function qmt(e,t,n){c(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(`uniform highp sampler2D colorTexture; in vec2 v_textureCoordinates; void main() { vec4 globeDepthPacked = texture(czm_globeDepthTexture, v_textureCoordinates); float globeDepth = czm_unpackDepth(globeDepthPacked); float depth = texture(colorTexture, v_textureCoordinates).r; out_FragColor = czm_branchFreeTernary(globeDepth <= 0.0 || globeDepth >= 1.0 || depth < globeDepth && depth > 0.0 && depth < 1.0, czm_packDepth(depth), globeDepthPacked); } `,{renderState:Oe.fromCache(),uniformMap:{colorTexture:function(){return e._textureToCopy}},owner:e})),e._textureToCopy=n,e._copyDepthCommand.framebuffer=e.framebuffer}OT.prototype.update=function(e,t){jmt(this,e,t),qmt(this,e,t)};var $mt=new ce,eft=new ce(1,1/255,1/65025,1/16581375);OT.prototype.getDepth=function(e,t,n){if(!c(this.framebuffer))return;let i=e.readPixels({x:t,y:n,width:1,height:1,framebuffer:this.framebuffer}),o=ce.unpack(i,0,$mt);return ce.divideByScalar(o,255,o),ce.dot(o,eft)};OT.prototype.executeCopyDepth=function(e,t){this._copyDepthCommand.execute(e,t)};OT.prototype.isDestroyed=function(){return!1};OT.prototype.destroy=function(){return this._framebuffer.destroy(),c(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=c(this._copyDepthCommand.shaderProgram)&&this._copyDepthCommand.shaderProgram.destroy()),he(this)};var QF=OT;var MBi=_(T(),1);var WUi=_(T(),1);function tft(e,t){this.near=e??0,this.far=t??0;let n=Xe.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 jF=tft;var QUi=_(T(),1);var PUi=_(T(),1),Wg=`uniform highp sampler2D u_depthTexture; in vec2 v_textureCoordinates; void main() { out_FragColor = czm_packDepth(texture(u_depthTexture, v_textureCoordinates).r); } `;function ap(){this._picking=!1,this._numSamples=1,this._tempCopyDepthTexture=void 0,this._pickColorFramebuffer=new hi({depthStencil:!0,supportsDepthTexture:!0}),this._outputFramebuffer=new hi({depthStencil:!0,supportsDepthTexture:!0}),this._copyDepthFramebuffer=new hi,this._tempCopyDepthFramebuffer=new hi,this._updateDepthFramebuffer=new hi({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 je,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(ap.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 Uxe(e,t,n,i,o){let r=e._viewport;r.width=n,r.height=i;let s=!je.equals(r,o.viewport),a=s!==e._useScissorTest;e._useScissorTest=s,je.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=je.clone(o.viewport,e._scissorRectangle),a=!0),(!c(e._rs)||!je.equals(r,e._rs.viewport)||a)&&(e._rs=Oe.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}}),e._rsBlend=Oe.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:un.ALPHA_BLEND}),e._rsUpdate=Oe.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:On.EQUAL,frontOperation:{fail:ft.KEEP,zFail:ft.KEEP,zPass:ft.KEEP},backFunction:On.NEVER,reference:kt.CESIUM_3D_TILE_MASK,mask:kt.CESIUM_3D_TILE_MASK}})),c(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(Wg,{uniformMap:{u_depthTexture:function(){return e.colorFramebufferManager.getDepthStencilTexture()}},owner:e})),e._copyDepthCommand.framebuffer=e._copyDepthFramebuffer.framebuffer,e._copyDepthCommand.renderState=e._rs,c(e._copyColorCommand)||(e._copyColorCommand=t.createViewportQuadCommand(td,{uniformMap:{colorTexture:function(){return e.colorFramebufferManager.getColorTexture()}},owner:e})),e._copyColorCommand.renderState=e._rs,c(e._tempCopyDepthCommand)||(e._tempCopyDepthCommand=t.createViewportQuadCommand(Wg,{uniformMap:{u_depthTexture:function(){return e._tempCopyDepthTexture}},owner:e})),e._tempCopyDepthCommand.framebuffer=e._tempCopyDepthFramebuffer.framebuffer,e._tempCopyDepthCommand.renderState=e._rs,c(e._updateDepthCommand)||(e._updateDepthCommand=t.createViewportQuadCommand(td,{uniformMap:{colorTexture:function(){return e._tempCopyDepthFramebuffer.getColorTexture()}},owner:e})),e._updateDepthCommand.framebuffer=e._updateDepthFramebuffer.framebuffer,e._updateDepthCommand.renderState=e._rsUpdate,c(e._clearGlobeColorCommand)||(e._clearGlobeColorCommand=new ti({color:new Y(0,0,0,0),stencil:0,owner:e})),e._clearGlobeColorCommand.framebuffer=e.framebuffer}ap.prototype.update=function(e,t,n,i,o,r){let{width:s,height:a}=n,l=o?e.halfFloatingPointTexture?Ue.HALF_FLOAT:Ue.FLOAT:Ue.UNSIGNED_BYTE;this._numSamples=i,this.picking?this._pickColorFramebuffer.update(e,s,a):this._outputFramebuffer.update(e,s,a,i,l),this._copyDepthFramebuffer.update(e,s,a),Uxe(this,e,s,a,t),e.uniformState.globeDepthTexture=void 0,this._clearGlobeDepth=r};ap.prototype.prepareColorTextures=function(e,t){!this.picking&&this._numSamples>1&&this._outputFramebuffer.prepareTextures(e,t)};ap.prototype.executeCopyDepth=function(e,t){c(this._copyDepthCommand)&&(this.prepareColorTextures(e),this._copyDepthCommand.execute(e,t),e.uniformState.globeDepthTexture=this._copyDepthFramebuffer.getColorTexture())};ap.prototype.executeUpdateDepth=function(e,t,n){let i=c(n)?n:t.framebuffer.depthStencilTexture;if(!this._clearGlobeDepth&&i===this.colorFramebufferManager.getDepthStencilTexture()){c(this._copyDepthCommand)&&this._copyDepthCommand.execute(e,t);return}if(!c(this._updateDepthCommand))return;let o=this._updateDepthFramebuffer;if(!c(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),Uxe(this,e,s,a,t)}this._tempCopyDepthTexture=i,this._tempCopyDepthCommand.execute(e,t),this._updateDepthCommand.execute(e,t)};ap.prototype.executeCopyColor=function(e,t){c(this._copyColorCommand)&&this._copyColorCommand.execute(e,t)};ap.prototype.clear=function(e,t,n){let i=this._clearGlobeColorCommand;c(i)&&(Y.clone(n,i.color),this.colorFramebufferManager.clear(e,i,t))};ap.prototype.isDestroyed=function(){return!1};ap.prototype.destroy=function(){return this._pickColorFramebuffer.destroy(),this._outputFramebuffer.destroy(),this._copyDepthFramebuffer.destroy(),this._tempCopyDepthFramebuffer.destroy(),this._updateDepthFramebuffer.destroy(),c(this._copyColorCommand)&&(this._copyColorCommand.shaderProgram=this._copyColorCommand.shaderProgram.destroy()),c(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=this._copyDepthCommand.shaderProgram.destroy()),c(this._tempCopyDepthCommand)&&(this._tempCopyDepthCommand.shaderProgram=this._tempCopyDepthCommand.shaderProgram.destroy()),c(this._updateDepthCommand)&&(this._updateDepthCommand.shaderProgram=this._updateDepthCommand.shaderProgram.destroy()),he(this)};var qF=ap;var aOi=_(T(),1);function DT(){this._framebuffer=new hi({depthStencil:!0,supportsDepthTexture:!0}),this._packedDepthFramebuffer=new hi,this._renderState=void 0,this._packedDepthCommand=void 0,this._clearCommand=void 0,this._viewport=new je,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0}Object.defineProperties(DT.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 nft(e){e._framebuffer.destroy(),e._packedDepthFramebuffer.destroy()}function ift(e,t,n,i,o){let r=o?t.halfFloatingPointTexture?Ue.HALF_FLOAT:Ue.FLOAT:Ue.UNSIGNED_BYTE;e._framebuffer.update(t,n,i,1,r),e._packedDepthFramebuffer.update(t,n,i)}function oft(e,t,n,i,o){e._viewport.width=n,e._viewport.height=i;let r=!je.equals(e._viewport,o.viewport),s=r!==e._useScissorTest;e._useScissorTest=r,je.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=je.clone(o.viewport,e._scissorRectangle),s=!0),(!c(e._renderState)||!je.equals(e._viewport,e._renderState.viewport)||s)&&(e._renderState=Oe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),c(e._packedDepthCommand)||(e._packedDepthCommand=t.createViewportQuadCommand(Wg,{uniformMap:{u_depthTexture:function(){return e.depthStencilTexture}},owner:e})),c(e._clearCommand)||(e._clearCommand=new ti({color:new Y(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}DT.prototype.updateAndClear=function(e,t,n,i){let o=t.width,r=t.height;ift(this,n,o,r,e),oft(this,n,o,r,i),this._useHdr=e};DT.prototype.clearClassification=function(e,t){this._clearCommand.execute(e,t)};DT.prototype.packDepth=function(e,t){return this._packedDepthCommand.execute(e,t),this.packedDepthTexture};DT.prototype.isDestroyed=function(){return!1};DT.prototype.destroy=function(){return nft(this),he(this)};var $F=DT;var ZOi=_(T(),1);function b0(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 hi({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._alphaFBO=new hi({createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._adjustTranslucentFBO=new hi({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1}),this._adjustAlphaFBO=new hi({createColorAttachments:!1}),this._opaqueClearCommand=new ti({color:new Y(0,0,0,0),owner:this}),this._translucentMRTClearCommand=new ti({color:new Y(0,0,0,1),owner:this}),this._translucentMultipassClearCommand=new ti({color:new Y(0,0,0,0),owner:this}),this._alphaClearCommand=new ti({color:new Y(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 je,this._rs=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHDR=!1}function Oxe(e){e._accumulationTexture=e._accumulationTexture&&!e._accumulationTexture.isDestroyed()&&e._accumulationTexture.destroy(),e._revealageTexture=e._revealageTexture&&!e._revealageTexture.isDestroyed()&&e._revealageTexture.destroy()}function k4(e){e._translucentFBO.destroy(),e._alphaFBO.destroy(),e._adjustTranslucentFBO.destroy(),e._adjustAlphaFBO.destroy()}function Dxe(e){Oxe(e),k4(e)}function rft(e,t,n,i){Oxe(e),e._accumulationTexture=new Pt({context:t,width:n,height:i,pixelFormat:ke.RGBA,pixelDatatype:Ue.FLOAT}),e._revealageTexture=new Pt({context:t,pixelFormat:ke.RGBA,pixelDatatype:Ue.FLOAT,width:n,height:i,flipY:!1})}function sft(e,t){k4(e);let n=oe.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)&&(k4(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,l=e._adjustTranslucentFBO.status===n,d=e._adjustAlphaFBO.status===n;(!s||!a||!l||!d)&&(Dxe(e),e._translucentMultipassSupport=!1,i=!1)}return i}b0.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,l=!c(a)||a.width!==r||a.height!==s||i!==this._useHDR,d=this._numSamples!==o;if((l||d)&&(this._numSamples=o,rft(this,e,r,s)),(!c(this._translucentFBO.framebuffer)||l||d)&&!sft(this,e))return;this._useHDR=i;let u=this,f,p;c(this._compositeCommand)||(f=new Be({sources:[vv]}),this._translucentMRTSupport&&f.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(f,{uniformMap:p,owner:this})),c(this._adjustTranslucentCommand)||(this._translucentMRTSupport?(f=new Be({defines:["MRT"],sources:[kV]}),p={u_bgColor:function(){return u._translucentMRTClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(f,{uniformMap:p,owner:this})):this._translucentMultipassSupport&&(f=new Be({sources:[kV]}),p={u_bgColor:function(){return u._translucentMultipassClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(f,{uniformMap:p,owner:this}),p={u_bgColor:function(){return u._alphaClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustAlphaCommand=e.createViewportQuadCommand(f,{uniformMap:p,owner:this}))),this._viewport.width=r,this._viewport.height=s;let y=!je.equals(this._viewport,t.viewport),h=y!==this._useScissorTest;this._useScissorTest=y,je.equals(this._scissorRectangle,t.viewport)||(this._scissorRectangle=je.clone(t.viewport,this._scissorRectangle),h=!0),(!c(this._rs)||!je.equals(this._viewport,this._rs.viewport)||h)&&(this._rs=Oe.fromCache({viewport:this._viewport,scissorTest:{enabled:this._useScissorTest,rectangle:this._scissorRectangle}})),c(this._compositeCommand)&&(this._compositeCommand.renderState=this._rs),this._adjustTranslucentCommand&&(this._adjustTranslucentCommand.renderState=this._rs),c(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.renderState=this._rs)};var aft={enabled:!0,color:new Y(0,0,0,0),equationRgb:Pa.ADD,equationAlpha:Pa.ADD,functionSourceRgb:Co.ONE,functionDestinationRgb:Co.ONE,functionSourceAlpha:Co.ZERO,functionDestinationAlpha:Co.ONE_MINUS_SOURCE_ALPHA},cft={enabled:!0,color:new Y(0,0,0,0),equationRgb:Pa.ADD,equationAlpha:Pa.ADD,functionSourceRgb:Co.ONE,functionDestinationRgb:Co.ONE,functionSourceAlpha:Co.ONE,functionDestinationAlpha:Co.ONE},lft={enabled:!0,color:new Y(0,0,0,0),equationRgb:Pa.ADD,equationAlpha:Pa.ADD,functionSourceRgb:Co.ZERO,functionDestinationRgb:Co.ONE_MINUS_SOURCE_ALPHA,functionSourceAlpha:Co.ZERO,functionDestinationAlpha:Co.ONE_MINUS_SOURCE_ALPHA};function U4(e,t,n,i){let o=n[i.id];if(!c(o)){let r=Oe.getState(i);r.depthMask=!1,r.blending=t,o=Oe.fromCache(r),n[i.id]=o}return o}function dft(e,t,n){return U4(t,aft,e._translucentRenderStateCache,n)}function uft(e,t,n){return U4(t,cft,e._translucentRenderStateCache,n)}function mft(e,t,n){return U4(t,lft,e._alphaRenderStateCache,n)}var fft=` 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); `,hft=` 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; `,pft=` float ai = czm_out_FragColor.a; out_FragColor = vec4(ai); `;function O4(e,t,n,i){let{shaderCache:o}=e,r=o.getDerivedShaderProgram(t,n);if(c(r))return r;let s=t._attributeLocations,a=t.fragmentShaderSource.clone();a.sources=a.sources.map(function(u){return Be.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 l=[...i.matchAll(/out_FragData_(\d+)/g)],d="";for(let u=0;u<l.length;u++){let f=l[u];d=`layout (location = ${f[1]}) out vec4 ${f[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 bft(e,t){return O4(e,t,"translucentMRT",fft)}function yft(e,t){return O4(e,t,"translucentMultipass",hft)}function gft(e,t){return O4(e,t,"alphaMultipass",pft)}b0.prototype.createDerivedCommands=function(e,t,n){if(c(n)||(n={}),this._translucentMRTSupport){let a,l;return c(n.translucentCommand)&&(a=n.translucentCommand.shaderProgram,l=n.translucentCommand.renderState),n.translucentCommand=et.shallowClone(e,n.translucentCommand),!c(a)||n.shaderProgramId!==e.shaderProgram.id?(n.translucentCommand.shaderProgram=bft(t,e.shaderProgram),n.translucentCommand.renderState=dft(this,t,e.renderState),n.shaderProgramId=e.shaderProgram.id):(n.translucentCommand.shaderProgram=a,n.translucentCommand.renderState=l),n}let i,o,r,s;return c(n.translucentCommand)&&(i=n.translucentCommand.shaderProgram,o=n.translucentCommand.renderState,r=n.alphaCommand.shaderProgram,s=n.alphaCommand.renderState),n.translucentCommand=et.shallowClone(e,n.translucentCommand),n.alphaCommand=et.shallowClone(e,n.alphaCommand),!c(i)||n.shaderProgramId!==e.shaderProgram.id?(n.translucentCommand.shaderProgram=yft(t,e.shaderProgram),n.translucentCommand.renderState=uft(this,t,e.renderState),n.alphaCommand.shaderProgram=gft(t,e.shaderProgram),n.alphaCommand.renderState=mft(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 xft(e,t,n,i,o,r){let{context:s,frameState:a}=t,{useLogDepth:l,shadowState:d}=a,u=t._hdr,f=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 y=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;for(let h=0;h<o.length;++h){let g=o[h];g=l?g.derivedCommands.logDepth.command:g,g=u?g.derivedCommands.hdr.command:g;let x=p&&g.receiveShadows?g.derivedCommands.oit.shadows.translucentCommand:g.derivedCommands.oit.translucentCommand;n(x,t,i,y)}if(c(r)){let h=r.unclassifiedCommand,g=p&&h.receiveShadows?h.derivedCommands.oit.shadows.translucentCommand:h.derivedCommands.oit.translucentCommand;n(g,t,i,y)}i.framebuffer=e._alphaFBO.framebuffer;for(let h=0;h<o.length;++h){let g=o[h];g=l?g.derivedCommands.logDepth.command:g,g=u?g.derivedCommands.hdr.command:g;let x=p&&g.receiveShadows?g.derivedCommands.oit.shadows.alphaCommand:g.derivedCommands.oit.alphaCommand;n(x,t,i,y)}if(c(r)){let h=r.unclassifiedCommand,g=p&&h.receiveShadows?h.derivedCommands.oit.shadows.alphaCommand:h.derivedCommands.oit.alphaCommand;n(g,t,i,y)}i.framebuffer=f}function _ft(e,t,n,i,o,r){let{context:s,frameState:a}=t,{useLogDepth:l,shadowState:d}=a,u=t._hdr,f=i.framebuffer,p=d.lightShadowsEnabled;i.framebuffer=e._adjustTranslucentFBO.framebuffer,e._adjustTranslucentCommand.execute(s,i);let y=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;for(let h=0;h<o.length;++h){let g=o[h];g=l?g.derivedCommands.logDepth.command:g,g=u?g.derivedCommands.hdr.command:g;let x=p&&g.receiveShadows?g.derivedCommands.oit.shadows.translucentCommand:g.derivedCommands.oit.translucentCommand;n(x,t,i,y)}if(c(r)){let h=r.unclassifiedCommand,g=p&&h.receiveShadows?h.derivedCommands.oit.shadows.translucentCommand:h.derivedCommands.oit.translucentCommand;n(g,t,i,y)}i.framebuffer=f}b0.prototype.executeCommands=function(e,t,n,i,o){if(this._translucentMRTSupport){_ft(this,e,t,n,i,o);return}xft(this,e,t,n,i,o)};b0.prototype.execute=function(e,t){this._compositeCommand.execute(e,t)};b0.prototype.clear=function(e,t,n){let i=t.framebuffer;t.framebuffer=this._opaqueFBO.framebuffer,Y.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};b0.prototype.isSupported=function(){return this._translucentMRTSupport||this._translucentMultipassSupport};b0.prototype.isDestroyed=function(){return!1};b0.prototype.destroy=function(){return Dxe(this),c(this._compositeCommand)&&(this._compositeCommand.shaderProgram=this._compositeCommand.shaderProgram&&this._compositeCommand.shaderProgram.destroy()),c(this._adjustTranslucentCommand)&&(this._adjustTranslucentCommand.shaderProgram=this._adjustTranslucentCommand.shaderProgram&&this._adjustTranslucentCommand.shaderProgram.destroy()),c(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.shaderProgram=this._adjustAlphaCommand.shaderProgram&&this._adjustAlphaCommand.shaderProgram.destroy()),he(this)};var eA=b0;var WOi=_(T(),1);function tA(){this._framebuffer=new hi({color:!1,depthStencil:!0,supportsDepthTexture:!0}),this._passState=void 0}Object.defineProperties(tA.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function Tft(e){e._framebuffer.destroy()}function Sft(e,t){let n=t.drawingBufferWidth,i=t.drawingBufferHeight;e._framebuffer.update(t,n,i);let o=new sc(t);o.blendingEnabled=!1,o.scissorTest={enabled:!0,rectangle:new je},o.viewport=new je,e._passState=o}tA.prototype.update=function(e,t,n){let i=n.width,o=n.height;this._framebuffer.isDirty(i,o)&&Sft(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};tA.prototype.isDestroyed=function(){return!1};tA.prototype.destroy=function(){return Tft(this),he(this)};var nA=tA;var kOi=_(T(),1);function hL(e){let t=new sc(e);t.blendingEnabled=!1,t.scissorTest={enabled:!0,rectangle:new je},t.viewport=new je,this._context=e,this._fb=new hi({depthStencil:!0}),this._passState=t,this._width=0,this._height=0}hL.prototype.begin=function(e,t){let n=this._context,{width:i,height:o}=t;return je.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 iA=new Y;hL.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),l=Math.floor(n*.5),d=0,u=0,f=0,p=-1;for(let y=0;y<s;++y){if(-a<=d&&d<=a&&-l<=u&&u<=l){let h=4*((l-u)*t+d+a);iA.red=Y.byteToFloat(o[h]),iA.green=Y.byteToFloat(o[h+1]),iA.blue=Y.byteToFloat(o[h+2]),iA.alpha=Y.byteToFloat(o[h+3]);let g=i.getObjectByPickColor(iA);if(c(g))return g}if(d===u||d<0&&-d===u||d>0&&d===1-u){let h=f;f=-p,p=h}d+=f,u+=p}};hL.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)};hL.prototype.isDestroyed=function(){return!1};hL.prototype.destroy=function(){return this._fb.destroy(),he(this)};var oA=hL;var zOi=_(T(),1);function y0(){this._numSamples=1,this._colorFramebuffer=new hi({depthStencil:!0,supportsDepthTexture:!0}),this._idFramebuffer=new hi({depthStencil:!0,supportsDepthTexture:!0}),this._idClearColor=new Y(0,0,0,0),this._clearCommand=new ti({color:new Y(0,0,0,0),depth:1,owner:this})}function Cft(e){e._colorFramebuffer.destroy(),e._idFramebuffer.destroy()}Object.defineProperties(y0.prototype,{framebuffer:{get:function(){return this._colorFramebuffer.framebuffer}},idFramebuffer:{get:function(){return this._idFramebuffer.framebuffer}},depthStencilTexture:{get:function(){return this._colorFramebuffer.getDepthStencilTexture()}}});y0.prototype.update=function(e,t,n,i){let o=t.width,r=t.height,s=n?e.halfFloatingPointTexture?Ue.HALF_FLOAT:Ue.FLOAT:Ue.UNSIGNED_BYTE;this._numSamples=i,this._colorFramebuffer.update(e,o,r,i,s),this._idFramebuffer.update(e,o,r)};y0.prototype.clear=function(e,t,n){Y.clone(n,this._clearCommand.color),Y.clone(this._idClearColor,this._clearCommand.color),this._colorFramebuffer.clear(e,this._clearCommand,t),this._idFramebuffer.clear(e,this._clearCommand,t)};y0.prototype.getFramebuffer=function(){return this._colorFramebuffer.framebuffer};y0.prototype.getIdFramebuffer=function(){return this._idFramebuffer.framebuffer};y0.prototype.prepareColorTextures=function(e){this._numSamples>1&&this._colorFramebuffer.prepareTextures(e)};y0.prototype.isDestroyed=function(){return!1};y0.prototype.destroy=function(){return Cft(this),he(this)};var BT=y0;var YDi=_(T(),1);var jOi=_(T(),1);function YT(){}YT.getShadowCastShaderKeyword=function(e,t,n,i){return`castShadow ${e} ${t} ${n} ${i}`};YT.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=Be.findPositionVarying(e),s=c(r);if(t&&!s){let a=o.length;for(let d=0;d<a;++d)o[d]=Be.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 Be({defines:i,sources:o})};YT.createShadowCastFragmentShader=function(e,t,n,i){let o=e.defines.slice(0),r=e.sources.slice(0);o.push("SHADOW_MAP");let s=Be.findPositionVarying(e),a=c(s);a||(s="v_positionEC");let l=r.length;for(let u=0;u<l;++u)r[u]=Be.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 Be({defines:o,sources:r})};YT.getShadowReceiveShaderKeyword=function(e,t,n,i){let o=e._usesDepthTexture,r=e._polygonOffsetSupported,s=e._isPointLight,a=e._isSpotLight,l=e._numberOfCascades>1,d=e.debugCascadeColors,u=e.softShadows;return`receiveShadow ${o}${r}${s}${a}${l}${d}${u}${t}${n}${i}`};YT.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 Be({defines:i,sources:o})};YT.createShadowReceiveFragmentShader=function(e,t,n,i,o){let r=Be.findNormalVarying(e),s=!i&&c(r)||i&&o,a=Be.findPositionVarying(e),l=c(a),d=t._usesDepthTexture,u=t._polygonOffsetSupported,f=t._isPointLight,p=t._isSpotLight,y=t._numberOfCascades>1,h=t.debugCascadeColors,g=t.softShadows,x=f?t._pointBias:i?t._terrainBias:t._primitiveBias,S=e.defines.slice(0),V=e.sources.slice(0),Z=V.length;for(let I=0;I<Z;++I)V[I]=Be.replaceMain(V[I],"czm_shadow_receive_main");f?S.push("USE_CUBE_MAP_SHADOW"):d&&S.push("USE_SHADOW_DEPTH_TEXTURE"),g&&!f&&S.push("USE_SOFT_SHADOWS"),y&&n&&i&&(s?S.push("ENABLE_VERTEX_LIGHTING"):S.push("ENABLE_DAYNIGHT_SHADING")),n&&x.normalShading&&s&&(S.push("USE_NORMAL_SHADING"),x.normalShadingSmooth>0&&S.push("USE_NORMAL_SHADING_SMOOTH"));let R="";f?R+=`uniform samplerCube shadowMap_textureCube; `:R+=`uniform sampler2D shadowMap_texture; `;let E;return l?E=` return vec4(${a}, 1.0); `:E=`#ifndef LOG_DEPTH return czm_windowToEyeCoordinates(gl_FragCoord); #else return vec4(v_logPositionEC, 1.0); #endif `,R+=`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() { ${E}} 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; `:""}} `,R+=`void main() { czm_shadow_receive_main(); vec4 positionEC = getPositionEC(); vec3 normalEC = getNormalEC(); float depth = -positionEC.z; `,R+=` czm_shadowParameters shadowParameters; shadowParameters.texelStepSize = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy; shadowParameters.depthBias = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z; shadowParameters.normalShadingSmooth = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w; shadowParameters.darkness = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w; `,i?R+=` shadowParameters.depthBias *= max(depth * 0.01, 1.0); `:u||(R+=` shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015); `),f?R+=` 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?R+=` 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); `:y?R+=` 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); ${h?` // Draw cascade colors for debugging out_FragColor *= czm_cascadeColor(weights); `:""}`:R+=` 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); `,R+=` out_FragColor.rgb *= visibility; } `,V.push(R),new Be({defines:S,sources:V})};var cp=YT;function lp(e){e=e??z.EMPTY_OBJECT;let t=e.context;if(!c(t))throw new L("context is required.");if(!c(e.lightCamera))throw new L("lightCamera is required.");if(c(e.numberOfCascades)&&e.numberOfCascades!==1&&e.numberOfCascades!==4)throw new L("Only one or four cascades are supported.");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;(Ot.isInternetExplorer()||Ot.isEdge()||(Ot.isChrome()||Ot.isFirefox())&&Ot.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 M,this._shadowMapTexture=void 0,this._lightDirectionEC=new m,this._lightPositionEC=new ce,this._distance=0,this._lightCamera=e.lightCamera,this._shadowMapCamera=new ZD,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 Oo:c(this._lightCamera.frustum.fov)&&(this._isSpotLight=!0),this._cascadeSplits=[new ce,new ce],this._cascadeMatrices=[new M,new M,new M,new M],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 Vft(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,B4(this),this._clearCommand=new ti({depth:1,color:new Y}),this._clearPassState=new sc(t),this._size=e.size??2048,this.size=this._size}lp.MAXIMUM_DISTANCE=2e4;function Vft(e){this.camera=new ZD,this.passState=new sc(e),this.framebuffer=void 0,this.textureOffsets=void 0,this.commandList=[],this.cullingVolume=void 0}function D4(e,t){return Oe.fromCache({cull:{enabled:!0,face:_i.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 B4(e){let t=!e._usesDepthTexture;e._primitiveRenderState=D4(t,e._primitiveBias),e._terrainRenderState=D4(t,e._terrainBias),e._pointRenderState=D4(t,e._pointBias)}lp.prototype.debugCreateRenderStates=function(){B4(this)};Object.defineProperties(lp.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){Xft(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 Y4(e){let t=e._passes.length;for(let n=0;n<t;++n){let i=e._passes[n],o=i.framebuffer;c(o)&&!o.isDestroyed()&&o.destroy(),i.framebuffer=void 0}e._depthAttachment=e._depthAttachment&&e._depthAttachment.destroy(),e._colorAttachment=e._colorAttachment&&e._colorAttachment.destroy()}function Lft(e,t){let n=new md({context:t,width:e._textureSize.x,height:e._textureSize.y,format:ac.DEPTH_COMPONENT16}),i=new Pt({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:ke.RGBA,pixelDatatype:Ue.UNSIGNED_BYTE,sampler:en.NEAREST}),o=new Fr({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 Zft(e,t){let n=new Pt({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:ke.DEPTH_STENCIL,pixelDatatype:Ue.UNSIGNED_INT_24_8,sampler:en.NEAREST}),i=new Fr({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 Rft(e,t){let n=new md({context:t,width:e._textureSize.x,height:e._textureSize.y,format:ac.DEPTH_COMPONENT16}),i=new Uo({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:ke.RGBA,pixelDatatype:Ue.UNSIGNED_BYTE,sampler:en.NEAREST}),o=[i.negativeX,i.negativeY,i.negativeZ,i.positiveX,i.positiveY,i.positiveZ];for(let r=0;r<6;++r){let s=new Fr({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 Hxe(e,t){e._isPointLight?Rft(e,t):e._usesDepthTexture?Zft(e,t):Lft(e,t)}function Gft(e,t){e._usesDepthTexture&&e._passes[0].framebuffer.status!==oe.FRAMEBUFFER_COMPLETE&&(e._usesDepthTexture=!1,B4(e),Y4(e),Hxe(e,t))}function Eft(e,t){(!c(e._passes[0].framebuffer)||e._shadowMapTexture.width!==e._textureSize.x)&&(Y4(e),Hxe(e,t),Gft(e,t),zxe(e,t))}function zxe(e,t,n){n=n??0,(e._isPointLight||n===0)&&(e._clearCommand.framebuffer=e._passes[n].framebuffer,e._clearCommand.execute(t,e._clearPassState))}function Xft(e,t){e._size=t;let n=e._passes,i=n.length,o=e._textureSize;if(e._isPointLight){t=mt.maximumCubeMapSize>=t?t:mt.maximumCubeMapSize,o.x=t,o.y=t;let r=new je(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=mt.maximumTextureSize>=t?t:mt.maximumTextureSize,o.x=t,o.y=t,n[0].passState.viewport=new je(0,0,t,t)):i===4&&(t=mt.maximumTextureSize>=t*2?t:mt.maximumTextureSize/2,o.x=t*2,o.y=t*2,n[0].passState.viewport=new je(0,0,t,t),n[1].passState.viewport=new je(t,0,t,t),n[2].passState.viewport=new je(0,t,t,t),n[3].passState.viewport=new je(t,t,t,t));e._clearPassState.viewport=new je(0,0,o.x,o.y);for(let r=0;r<i;++r){let s=n[r],a=s.passState.viewport,l=a.x/o.x,d=a.y/o.y,u=a.width/o.x,f=a.height/o.y;s.textureOffsets=new M(u,0,0,l,0,f,0,d,0,0,1,0,0,0,0,1)}}var Ift=new je;function Wft(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=Xe.OVERLAY,i}function wft(e,t){let n=t.context,i=t.context.drawingBufferWidth,o=t.context.drawingBufferHeight,r=Math.min(i,o)*.3,s=Ift;s.x=i-r,s.y=0,s.width=r,s.height=r;let a=e._debugShadowViewCommand;c(a)||(a=Wft(e,n),e._debugShadowViewCommand=a),(!c(a.renderState)||!je.equals(a.renderState.viewport,s))&&(a.renderState=Oe.fromCache({viewport:je.clone(s)})),t.commandList.push(e._debugShadowViewCommand)}var dp=new Array(8);dp[0]=new ce(-1,-1,-1,1);dp[1]=new ce(1,-1,-1,1);dp[2]=new ce(1,1,-1,1);dp[3]=new ce(-1,1,-1,1);dp[4]=new ce(-1,-1,1,1);dp[5]=new ce(1,-1,1,1);dp[6]=new ce(1,1,1,1);dp[7]=new ce(-1,1,1,1);var wg=new M,H4=new Array(8);for(let e=0;e<8;++e)H4[e]=new ce;function Pft(e,t){let n=new Rt({geometry:new Fm({minimum:new m(-.5,-.5,-.5),maximum:new m(.5,.5,.5)}),attributes:{color:Yt.fromColor(t)}}),i=new Rt({geometry:new Ib({radius:.5}),attributes:{color:Yt.fromColor(t)}});return new In({geometryInstances:[n,i],appearance:new an({translucent:!1,flat:!0}),asynchronous:!1,modelMatrix:e})}var vft=[Y.RED,Y.GREEN,Y.BLUE,Y.MAGENTA],Fft=new m;function Aft(e,t){wft(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 op({camera:e._sceneCamera,color:Y.CYAN,updateOnChange:!1})),e._debugCameraFrustum.update(t)),e._cascadesEnabled){if(e.debugFreezeFrame){n&&(e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=new op({camera:e._shadowMapCamera,color:Y.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 op({camera:e._passes[i].camera,color:vft[i],updateOnChange:!1})),e._debugCascadeFrustums[i].update(t)}}else if(e._isPointLight){if(!c(e._debugLightFrustum)||e._needsUpdate){let i=e._shadowMapCamera.positionWC,o=Fe.IDENTITY,r=e._pointLightRadius*2,s=m.fromElements(r,r,r,Fft),a=M.fromTranslationQuaternionRotationScale(i,o,s,wg);e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=Pft(a,Y.YELLOW)}e._debugLightFrustum.update(t)}else(!c(e._debugLightFrustum)||e._needsUpdate)&&(e._debugLightFrustum=new op({camera:e._shadowMapCamera,color:Y.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t)}function ZD(){this.viewMatrix=new M,this.inverseViewMatrix=new M,this.frustum=void 0,this.positionCartographic=new pe,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 M}ZD.prototype.clone=function(e){M.clone(e.viewMatrix,this.viewMatrix),M.clone(e.inverseViewMatrix,this.inverseViewMatrix),this.frustum=e.frustum.clone(this.frustum),pe.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 Mft=new M(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);ZD.prototype.getViewProjection=function(){let e=this.viewMatrix,t=this.frustum.projectionMatrix;return M.multiply(t,e,this.viewProjectionMatrix),M.multiply(Mft,this.viewProjectionMatrix,this.viewProjectionMatrix),this.viewProjectionMatrix};var Nft=new Array(5),kft=new Ci,Uft=new Array(4),Kxe=new m,Jxe=new m;function Oft(e,t){let n=e._shadowMapCamera,i=e._sceneCamera,o=i.frustum.near,r=i.frustum.far,s=e._numberOfCascades,a,l=r-o,d=r/o,u=.9,f=!1;t.shadowState.closestObjectSize<200&&(f=!0,u=.9);let p=Uft,y=Nft;for(y[0]=o,y[s]=r,a=0;a<s;++a){let N=(a+1)/s,b=o*Math.pow(d,N),G=o+l*N,X=w.lerp(G,b,u);y[a+1]=X,p[a]=X-y[a]}if(f){for(a=0;a<s;++a)p[a]=Math.min(p[a],e._maximumCascadeDistances[a]);let N=y[0];for(a=0;a<s-1;++a)N+=p[a],y[a+1]=N}ce.unpack(y,0,e._cascadeSplits[0]),ce.unpack(y,1,e._cascadeSplits[1]),ce.unpack(p,0,e._cascadeDistances);let h=n.frustum,g=h.left,x=h.right,S=h.bottom,V=h.top,Z=h.near,R=h.far,E=n.positionWC,I=n.directionWC,v=n.upWC,P=i.frustum.clone(kft),F=n.getViewProjection();for(a=0;a<s;++a){P.near=y[a],P.far=y[a+1];let N=M.multiply(P.projectionMatrix,i.viewMatrix,wg),b=M.inverse(N,wg),G=M.multiply(F,b,wg),X=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,Kxe),W=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,Jxe);for(let H=0;H<8;++H){let U=ce.clone(dp[H],H4[H]);M.multiplyByVector(G,U,U),m.divideByScalar(U,U.w,U),m.minimumByComponent(U,X,X),m.maximumByComponent(U,W,W)}X.x=Math.max(X.x,0),X.y=Math.max(X.y,0),X.z=0,W.x=Math.min(W.x,1),W.y=Math.min(W.y,1),W.z=Math.min(W.z,1);let A=e._passes[a],k=A.camera;k.clone(n);let B=k.frustum;B.left=g+X.x*(x-g),B.right=g+W.x*(x-g),B.bottom=S+X.y*(V-S),B.top=S+W.y*(V-S),B.near=Z+X.z*(R-Z),B.far=Z+W.z*(R-Z),A.cullingVolume=k.frustum.computeCullingVolume(E,I,v);let O=e._cascadeMatrices[a];M.multiply(k.getViewProjection(),i.inverseViewMatrix,O),M.multiply(A.textureOffsets,O,O)}}var Dft=new M,Bft=new m,Yft=new m,Bxe=new m;function Hft(e,t){let n=e._shadowMapCamera,i=e._sceneCamera,o=M.multiply(i.frustum.projectionMatrix,i.viewMatrix,wg),r=M.inverse(o,wg),s=n.directionWC,a=i.directionWC;m.equalsEpsilon(s,a,w.EPSILON10)&&(a=i.upWC);let l=m.cross(s,a,Bft);a=m.cross(l,s,Yft),m.normalize(a,a),m.normalize(l,l);let d=m.fromElements(0,0,0,Bxe),u=M.computeView(d,s,a,l,Dft),f=M.multiply(u,r,wg),p=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,Kxe),y=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,Jxe);for(let R=0;R<8;++R){let E=ce.clone(dp[R],H4[R]);M.multiplyByVector(f,E,E),m.divideByScalar(E,E.w,E),m.minimumByComponent(E,p,p),m.maximumByComponent(E,y,y)}y.z+=1e3,p.z-=10;let h=Bxe;h.x=-(.5*(p.x+y.x)),h.y=-(.5*(p.y+y.y)),h.z=-y.z;let g=M.fromTranslation(h,wg);u=M.multiply(g,u,u);let x=.5*(y.x-p.x),S=.5*(y.y-p.y),V=y.z-p.z,Z=n.frustum;Z.left=-x,Z.right=x,Z.bottom=-S,Z.top=S,Z.near=.01,Z.far=V,M.clone(u,n.viewMatrix),M.inverse(u,n.inverseViewMatrix),M.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(l,n.rightWC)}var zft=[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)],Kft=[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)],Jft=[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 Qft(e,t){let n=new Ci;n.fov=w.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=zft[i],o.upWC=Kft[i],o.rightWC=Jft[i],M.computeView(o.positionWC,o.directionWC,o.upWC,o.rightWC,o.viewMatrix),M.inverse(o.viewMatrix,o.inverseViewMatrix),o.frustum=n}}var jft=new m,qft=new m,Qxe=new ue,Yxe=Qxe.center;function $ft(e,t){let n=e._sceneCamera,i=e._shadowMapCamera,o=Qxe;if(e._cascadesEnabled){if(n.frustum.near>=e.maximumDistance){e._outOfView=!0,e._needsUpdate=!1;return}let r=t.mapProjection.ellipsoid.geodeticSurfaceNormal(n.positionWC,jft),s=m.negate(i.directionWC,qft),a=m.dot(r,s);if(e.fadingEnabled){let l=w.clamp(a/.1,0,1);e._darkness=w.lerp(1,e.darkness,l)}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)===zt.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,Yxe),Yxe);o.center=s,o.radius=r,e._outOfView=t.cullingVolume.computeVisibility(o)===zt.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),ue.clone(o,e._boundingSphere)}}function eht(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;M.multiplyByPointAsVector(n.viewMatrix,r.directionWC,s),m.normalize(s,s),m.negate(s,s),M.multiplyByPoint(n.viewMatrix,r.positionWC,e._lightPositionEC),e._lightPositionEC.w=e._pointLightRadius;let a,l;e._fitNearFar?(a=Math.min(t.shadowState.nearPlane,e.maximumDistance),l=Math.min(t.shadowState.farPlane,e.maximumDistance),l=Math.max(l,a+1)):(a=n.frustum.near,l=e.maximumDistance),e._sceneCamera=oo.clone(n,o),n.frustum.clone(e._sceneCamera.frustum),e._sceneCamera.frustum.near=a,e._sceneCamera.frustum.far=l,e._distance=l-a,$ft(e,t),!e._outOfViewPrevious&&e._outOfView&&(e._needsUpdate=!0),e._outOfViewPrevious=e._outOfView}lp.prototype.update=function(e){if(eht(this,e),this._needsUpdate)if(Eft(this,e.context),this._isPointLight&&Qft(this,e),this._cascadesEnabled&&(Hft(this,e),this._numberOfCascades>1&&Oft(this,e)),this._isPointLight)this._shadowMapCullingVolume=fs.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;M.multiply(this._shadowMapCamera.getViewProjection(),t,this._shadowMapMatrix)}this.debugShow&&Aft(this,e)};lp.prototype.updatePass=function(e,t){zxe(this,e,t)};var tht=new D;function jxe(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=tht;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 St(t,o,!1)}function nht(e,t,n,i,o,r){let s,a,l;if(c(r)&&(s=r.shaderProgram,a=r.renderState,l=r.uniformMap),r=et.shallowClone(n,r),r.castShadows=!0,r.receiveShadows=!1,!c(s)||o!==n.shaderProgram.id||t){let d=n.shaderProgram,u=n.pass===Xe.GLOBE,f=n.pass!==Xe.TRANSLUCENT,p=e._isPointLight,y=e._usesDepthTexture,h=cp.getShadowCastShaderKeyword(p,u,y,f);if(s=i.shaderCache.getDerivedShaderProgram(d,h),!c(s)){let x=d.vertexShaderSource,S=d.fragmentShaderSource,V=cp.createShadowCastVertexShader(x,p,u),Z=cp.createShadowCastFragmentShader(S,p,y,f);s=i.shaderCache.createDerivedShaderProgram(d,h,{vertexShaderSource:V,fragmentShaderSource:Z,attributeLocations:d._attributeLocations})}a=e._primitiveRenderState,p?a=e._pointRenderState:u&&(a=e._terrainRenderState),n.renderState.cull.enabled||(a=He(a,!1),a.cull=He(a.cull,!1),a.cull.enabled=!1,a=Oe.fromCache(a)),l=jxe(e,n.uniformMap,u)}return r.shaderProgram=s,r.renderState=a,r.uniformMap=l,r}lp.createReceiveDerivedCommand=function(e,t,n,i,o){c(o)||(o={});let r=e.length>0,s=t.shaderProgram,a=s.vertexShaderSource,l=s.fragmentShaderSource,d=t.pass===Xe.GLOBE,u=!1;if(d&&(u=t.owner.data.renderedMesh.encoding.hasVertexNormals),t.receiveShadows&&r){let f,p;c(o.receiveCommand)&&(f=o.receiveCommand.shaderProgram,p=o.receiveCommand.uniformMap),o.receiveCommand=et.shallowClone(t,o.receiveCommand),o.castShadows=!1,o.receiveShadows=!0;let y=o.receiveShaderCastShadows!==t.castShadows,h=o.receiveShaderProgramId!==t.shaderProgram.id;if(!c(f)||h||n||y){let g=cp.getShadowReceiveShaderKeyword(e[0],t.castShadows,d,u);if(f=i.shaderCache.getDerivedShaderProgram(s,g),!c(f)){let x=cp.createShadowReceiveVertexShader(a,d,u),S=cp.createShadowReceiveFragmentShader(l,e[0],t.castShadows,d,u);f=i.shaderCache.createDerivedShaderProgram(s,g,{vertexShaderSource:x,fragmentShaderSource:S,attributeLocations:s._attributeLocations})}p=jxe(e[0],t.uniformMap,d)}o.receiveCommand.shaderProgram=f,o.receiveCommand.uniformMap=p,o.receiveShaderProgramId=t.shaderProgram.id,o.receiveShaderCastShadows=t.castShadows}return o};lp.createCastDerivedCommand=function(e,t,n,i,o){if(c(o)||(o={}),t.castShadows){let r=o.castCommands;c(r)||(r=o.castCommands=[]);let s=o.castShaderProgramId,a=e.length;r.length=a;for(let l=0;l<a;++l)r[l]=nht(e[l],n,t,i,s,r[l]);o.castShaderProgramId=t.shaderProgram.id}return o};lp.prototype.isDestroyed=function(){return!1};lp.prototype.destroy=function(){Y4(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 he(this)};var g0=lp;var hBi=_(T(),1);var zDi=_(T(),1),HT=`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 color.rgb /= color.a; #endif out_FragColor = color; #endif } `;var iht=!1;function Pg(e){this._drawClassificationFBO=new hi({createDepthAttachments:!1}),this._accumulationFBO=new hi({createDepthAttachments:!1}),this._packFBO=new hi,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 ti({color:new Y(0,0,0,0),owner:this}),this._clearDepthStencilCommand=new ti({depth:1,stencil:0,owner:this}),this._supported=e.depthTexture,this._viewport=new je,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(Pg.prototype,{hasTranslucentDepth:{get:function(){return this._hasTranslucentDepth}}});function qxe(e){e._textureToComposite=void 0,e._translucentDepthStencilTexture=e._translucentDepthStencilTexture&&!e._translucentDepthStencilTexture.isDestroyed()&&e._translucentDepthStencilTexture.destroy()}function $xe(e){e._drawClassificationFBO.destroy(),e._accumulationFBO.destroy(),e._packFBO.destroy()}function oht(e,t,n,i){qxe(e),e._translucentDepthStencilTexture=new Pt({context:t,width:n,height:i,pixelFormat:ke.DEPTH_STENCIL,pixelDatatype:Ue.UNSIGNED_INT_24_8,sampler:en.NEAREST})}function rht(e,t,n,i){$xe(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 sht(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)&&(oht(e,t,o,r),rht(e,t,o,r));let s,a;if(c(e._packDepthCommand)||(s=new Be({sources:[Pv]}),a={u_opaqueDepthTexture:function(){return e._opaqueDepthStencilTexture},u_translucentDepthTexture:function(){return e._translucentDepthStencilTexture}},e._packDepthCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),!c(e._compositeCommand)){s=new Be({sources:[HT]}),a={colorTexture:function(){return e._textureToComposite}},iht&&(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,f=u.shaderProgram,p=t.shaderCache.createDerivedShaderProgram(f,"pick",{vertexShaderSource:f.vertexShaderSource,fragmentShaderSource:new Be({sources:s.sources,defines:["PICK"]}),attributeLocations:f._attributeLocations}),y=et.shallowClone(u);y.shaderProgram=p,u.derivedCommands.pick=y}c(e._copyCommand)||(s=new Be({sources:[HT]}),a={colorTexture:function(){return e._drawClassificationFBO.getColorTexture()}},e._copyCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),c(e._accumulateCommand)||(s=new Be({sources:[HT]}),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 l=!je.equals(e._viewport,n.viewport),d=l!==e._useScissorTest;e._useScissorTest=l,je.equals(e._scissorRectangle,n.viewport)||(e._scissorRectangle=je.clone(n.viewport,e._scissorRectangle),d=!0),(!c(e._rsDepth)||!je.equals(e._viewport,e._rsDepth.viewport)||d)&&(e._rsDepth=Oe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),c(e._packDepthCommand)&&(e._packDepthCommand.renderState=e._rsDepth),(!c(e._rsAccumulate)||!je.equals(e._viewport,e._rsAccumulate.viewport)||d)&&(e._rsAccumulate=Oe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:On.EQUAL,reference:kt.CESIUM_3D_TILE_MASK}})),c(e._accumulateCommand)&&(e._accumulateCommand.renderState=e._rsAccumulate),(!c(e._rsComp)||!je.equals(e._viewport,e._rsComp.viewport)||d)&&(e._rsComp=Oe.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:un.ALPHA_BLEND})),c(e._compositeCommand)&&(e._compositeCommand.renderState=e._rsComp,e._compositeCommand.derivedCommands.pick.renderState=e._rsComp)}Pg.prototype.executeTranslucentCommands=function(e,t,n,i,o){let r=e.frameState.useLogDepth,s=e.context,a=n.framebuffer;for(let l=0;l<i.length;++l){let d=i[l];if(d=r?d.derivedCommands.logDepth.command:d,d.depthForTranslucentClassification){this._hasTranslucentDepth=!0;break}}if(this._hasTranslucentDepth){sht(this,s,n,o),n.framebuffer=this._drawClassificationFBO.framebuffer,this._clearDepthStencilCommand.execute(s,n);for(let l=0;l<i.length;++l){let d=i[l];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}};Pg.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(Xe.CESIUM_3D_TILE_CLASSIFICATION);let a=r.globeDepthTexture;r.globeDepthTexture=this._packFBO.getColorTexture();let l=i.commands[Xe.CESIUM_3D_TILE_CLASSIFICATION],d=i.indices[Xe.CESIUM_3D_TILE_CLASSIFICATION];for(let u=0;u<d;++u)t(l[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)};Pg.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),aht(this,e,t)};function aht(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}Pg.prototype.isSupported=function(){return this._supported};Pg.prototype.isDestroyed=function(){return!1};Pg.prototype.destroy=function(){return qxe(this),$xe(this),c(this._compositeCommand)&&(this._compositeCommand.shaderProgram=this._compositeCommand.shaderProgram&&this._compositeCommand.shaderProgram.destroy()),c(this._packDepthCommand)&&(this._packDepthCommand.shaderProgram=this._packDepthCommand.shaderProgram&&this._packDepthCommand.shaderProgram.destroy()),he(this)};var rA=Pg;function cht(){this.command=void 0,this.near=void 0,this.far=void 0}function RD(e,t,n){let i=e.context,o;i.depthTexture&&(o=new qF);let r;e._useOIT&&i.depthTexture&&(r=new eA(i));let s=new sc(i);s.viewport=je.clone(n),this.camera=t,this._cameraClone=oo.clone(t),this._cameraStartFired=!1,this._cameraMovedTime=void 0,this.viewport=n,this.passState=s,this.pickFramebuffer=new oA(i),this.pickDepthFramebuffer=new nA,this.sceneFramebuffer=new BT,this.globeDepth=o,this.globeTranslucencyFramebuffer=new $F,this.oit=r,this.translucentTileClassification=new rA(i),this.pickDepths=[],this.frustumCommandsList=[],this.debugFrustumStatistics=void 0,this._commandExtents=[]}var z4=new m,K4=new m;function lht(e,t,n){let i=Math.max(m.maximumComponent(m.abs(e.position,z4)),m.maximumComponent(m.abs(t.position,K4))),o=1/Math.max(1,i);return m.multiplyByScalar(e.position,o,z4),m.multiplyByScalar(t.position,o,K4),m.equalsEpsilon(z4,K4,n)&&m.equalsEpsilon(e.direction,t.direction,n)&&m.equalsEpsilon(e.up,t.up,n)&&m.equalsEpsilon(e.right,t.right,n)&&M.equalsEpsilon(e.transform,t.transform,n)&&e.frustum.equalsEpsilon(t.frustum,n)}RD.prototype.checkForCameraUpdates=function(e){let t=this.camera,n=this._cameraClone;return lht(t,n,w.EPSILON15)?(this._cameraStartFired&&Ti()-this._cameraMovedTime>e.cameraEventWaitTime&&(t.moveEnd.raiseEvent(),this._cameraStartFired=!1),!1):(this._cameraStartFired||(t.moveStart.raiseEvent(),this._cameraStartFired=!0),this._cameraMovedTime=Ti(),oo.clone(t,n),!0)};function dht(e,t,n,i){let{frameState:o}=t,{camera:r,useLogDepth:s}=o,a=s?t.logarithmicDepthFarToNearRatio:t.farToNearRatio,l=t.mode===se.SCENE2D,d=t.nearToFarDistance2D;i*=1+w.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;l?(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:f}=e;f.length=u;for(let p=0;p<u;++p){let y,h;l?(y=Math.min(i-d,n+p*d),h=Math.min(i,y+d)):(y=Math.max(n,Math.pow(a,p)*n),h=Math.min(i,a*y));let g=f[p];c(g)?(g.near=y,g.far=h):g=f[p]=new jF(y,h)}}function uht(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 l=s[a];if(o>l.far)continue;if(r<l.near)break;let d=i.pass,u=l.indices[d]++;if(l.commands[d][u]=i,t.debugShowFrustums&&(i.debugOverlappingFrustums|=1<<a),i.executeInClosestFrustum)break}if(t.debugShowFrustums){let{debugFrustumStatistics:a}=e,{debugOverlappingFrustums:l}=i,d=a.commandsInFrustums;d[l]=c(d[l])?d[l]+1:1,++a.totalCommands}t.updateDerivedCommands(i)}var e_e=new fs,mht=new Ia;RD.prototype.createPotentiallyVisibleSet=function(e){let{frameState:t}=e,{camera:n,commandList:i,shadowState:o}=t,{positionWC:r,directionWC:s,frustum:a}=n,l=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 N=0;N<Xe.NUMBER_OF_PASSES;++N)u[F].indices[N]=0;l.length=0,d.length=0;let f=this._commandExtents,p=f.length,y=0,h=+Number.MAX_VALUE,g=-Number.MAX_VALUE,{shadowsEnabled:x}=o,S=+Number.MAX_VALUE,V=-Number.MAX_VALUE,Z=Number.MAX_VALUE,R=t.mode===se.SCENE3D?t.occluder:void 0,{cullingVolume:E}=t,I=e_e.planes;for(let F=0;F<5;++F)I[F]=E.planes[F];E=e_e;for(let F=0;F<i.length;++F){let N=i[F],{pass:b,boundingVolume:G}=N;if(b===Xe.COMPUTE)l.push(N);else if(b===Xe.OVERLAY)d.push(N);else{let X,W;if(c(G)){if(!e.isVisible(E,N,R))continue;let k=G.computePlaneDistances(r,s,mht);if(X=k.start,W=k.stop,h=Math.min(h,X),g=Math.max(g,W),x&&N.receiveShadows&&X<g0.MAXIMUM_DISTANCE&&!(b===Xe.GLOBE&&X<-100&&W>100)){let B=W-X;b!==Xe.GLOBE&&X<100&&(Z=Math.min(Z,B)),S=Math.min(S,X),V=Math.max(V,W)}}else N instanceof ti?(X=a.near,W=a.far):(X=a.near,W=a.far,h=Math.min(h,X),g=Math.max(g,W));let A=f[y];c(A)||(A=f[y]=new cht),A.command=N,A.near=X,A.far=W,y++}}x&&(S=Math.min(Math.max(S,a.near),a.far),V=Math.max(Math.min(V,a.far),S),o.nearPlane=S,o.farPlane=V,o.closestObjectSize=Z),dht(this,e,h,g);for(let F=0;F<y;F++)uht(this,e,f[F]);if(y<p)for(let F=y;F<p;F++){let N=f[F];if(!c(N.command))break;N.command=void 0}let v=u.length,{frustumSplits:P}=t;P.length=v+1;for(let F=0;F<v;++F)P[F]=u[F].near,F===v-1&&(P[F+1]=u[F].far)};RD.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 zT=RD;var n_e=.1,fht=new hm({pass:Fo.MOST_DETAILED_PRELOAD}),hht=new hm({pass:Fo.MOST_DETAILED_PICK}),sA=new hm({pass:Fo.PICK});function na(e){this._mostDetailedRayPicks=[],this.pickRenderStateCache={},this._pickPositionCache={},this._pickPositionCacheDirty=!1;let t=new je(0,0,1,1),n=new oo(e);n.frustum=new sn({width:n_e,aspectRatio:1,near:.1}),this._pickOffscreenView=new zT(e,n,t)}na.prototype.update=function(){this._pickPositionCacheDirty=!0};na.prototype.getPickDepth=function(e,t){let n=e.view.pickDepths,i=n[t];return c(i)||(i=new QF,n[t]=i),i};var pht=new Oo,bht=new m,GD=new m,yht=new D,ght=new M;function xht(e,t,n,i,o){let r=e.camera,s=r.frustum,a=s.offCenterFrustum;c(a)&&(s=a);let l=2*(t.x-o.x)/o.width-1;l*=(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=M.clone(r.transform,ght);r._setTransform(M.IDENTITY);let f=m.clone(r.position,bht);m.multiplyByScalar(r.right,l,GD),m.add(GD,f,f),m.multiplyByScalar(r.up,d,GD),m.add(GD,f,f),r._setTransform(u),e.mode===se.SCENE2D&&m.fromElements(f.z,f.x,f.y,f);let p=s.getPixelDimensions(o.width,o.height,1,1,yht),y=pht;return y.right=p.x*.5,y.left=-y.right,y.top=p.y*.5,y.bottom=-y.top,y.near=s.near,y.far=s.far,y.computeCullingVolume(f,r.directionWC,r.upWC)}var _ht=new hl,Tht=new D;function Sht(e,t,n,i,o){let r=e.camera,s=r.frustum,a=s.near,l=Math.tan(s.fovy*.5),d=s.aspectRatio*l,u=2*(t.x-o.x)/o.width-1,f=2*(o.height-t.y-o.y)/o.height-1,p=u*a*d,y=f*a*l,h=s.getPixelDimensions(o.width,o.height,1,1,Tht),g=h.x*n*.5,x=h.y*i*.5,S=_ht;return S.top=y+x,S.bottom=y-x,S.right=p+g,S.left=p-g,S.near=a,S.far=s.far,S.computeCullingVolume(r.positionWC,r.directionWC,r.upWC)}function ED(e,t,n,i,o){let r=e.camera.frustum;return r instanceof sn||r instanceof Oo?xht(e,t,n,i,o):Sht(e,t,n,i,o)}var XD=new je(0,0,3,3),ID=new D,aA=new Y(0,0,0,0);function J4(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}na.prototype.pick=function(e,t,n,i){C.defined("windowPosition",t);let{context:o,frameState:r,defaultView:s}=e,{viewport:a,pickFramebuffer:l}=s;e.view=s,a.x=0,a.y=0,a.width=o.drawingBufferWidth,a.height=o.drawingBufferHeight;let d=s.passState;d.viewport=je.clone(a,d.viewport);let u=Oi.transformWindowToDrawingBuffer(e,t,ID),f=J4(o.drawingBufferHeight,u,n,i,XD);e.jobScheduler.disableThisFrame(),e.updateFrameState(),r.cullingVolume=ED(e,u,f.width,f.height,a),r.invertClassification=!1,r.passes.pick=!0,r.tilesetPassState=sA,o.uniformState.update(r),e.updateEnvironment(),d=l.begin(f,a),e.updateAndExecuteCommands(d,aA),e.resolveFramebuffers(d);let p=l.end(f);return o.endFrame(),p};na.prototype.pickVoxelCoordinate=function(e,t,n,i){C.defined("windowPosition",t);let{context:o,frameState:r,defaultView:s}=e,{viewport:a,pickFramebuffer:l}=s;e.view=s,a.x=0,a.y=0,a.width=o.drawingBufferWidth,a.height=o.drawingBufferHeight;let d=s.passState;d.viewport=je.clone(a,d.viewport);let u=Oi.transformWindowToDrawingBuffer(e,t,ID),f=J4(o.drawingBufferHeight,u,n,i,XD);e.jobScheduler.disableThisFrame(),e.updateFrameState(),r.cullingVolume=ED(e,u,f.width,f.height,a),r.invertClassification=!1,r.passes.pickVoxel=!0,r.tilesetPassState=sA,o.uniformState.update(r),e.updateEnvironment(),d=l.begin(f,a),e.updateAndExecuteCommands(d,aA),e.resolveFramebuffers(d);let p=l.readCenterPixel(f);return o.endFrame(),p};na.prototype.pickMetadata=function(e,t,n){C.typeOf.object("windowPosition",t),C.typeOf.object("pickedMetadataInfo",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 l=r.passState;l.viewport=je.clone(s,l.viewport);let d=Oi.transformWindowToDrawingBuffer(e,t,ID),u=J4(i.drawingBufferHeight,d,1,1,XD);e.jobScheduler.disableThisFrame(),e.updateFrameState(),o.cullingVolume=ED(e,d,u.width,u.height,s),o.invertClassification=!1,o.passes.pick=!0,o.tilesetPassState=sA,o.pickingMetadata=!0,o.pickedMetadataInfo=n,i.uniformState.update(o),e.updateEnvironment(),l=a.begin(u,s),e.updateAndExecuteCommands(l,aA);let f=e._environmentState.useOIT;e._environmentState.useOIT=!1,e.resolveFramebuffers(l),e._environmentState.useOIT=f;let p=a.readCenterPixel(u);return i.endFrame(),o.pickingMetadata=!1,JF.decodeMetadataValues(n.classProperty,n.metadataProperty,p)};function Cht(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 l=n.passState;l.viewport=je.clone(s,l.viewport),e.clearPasses(o.passes),o.passes.pick=!0,o.passes.depth=!0,o.cullingVolume=ED(e,t,1,1,s),o.tilesetPassState=sA,e.updateEnvironment(),r.renderTranslucentDepthForPick=!0,l=a.update(i,t,s),e.updateAndExecuteCommands(l,aA),e.resolveFramebuffers(l),i.endFrame()}var Vht=new Ci,Lht=new hl,Zht=new sn,Rht=new Oo;na.prototype.pickPositionWorldCoordinates=function(e,t,n){if(!e.useDepthPicking)return;if(C.defined("windowPosition",t),!e.context.depthTexture)throw new L("Picking from the depth buffer is not supported. Check pickPositionSupported.");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:l}=o;e.view=a;let d=Oi.transformWindowToDrawingBuffer(e,t,ID);e.pickTranslucentDepth?Cht(e,d):(e.updateFrameState(),l.update(r),e.updateEnvironment()),d.y=e.drawingBufferHeight-d.y;let u;c(s.frustum.fov)?u=s.frustum.clone(Vht):c(s.frustum.infiniteProjectionMatrix)?u=s.frustum.clone(Lht):c(s.frustum.width)?u=s.frustum.clone(Zht):u=s.frustum.clone(Rht);let{frustumCommandsList:f}=a,p=f.length;for(let y=0;y<p;++y){let g=this.getPickDepth(e,y).getDepth(o,d.x,d.y);if(c(g)&&g>0&&g<1){let x=f[y],S;return e.mode===se.SCENE2D?(S=s.position.z,s.position.z=S-x.near+1,u.far=Math.max(1,x.far-x.near),u.near=1,l.update(r),l.updateFrustum(u)):(u.near=x.near*(y!==0?e.opaqueFrustumNearOffset:1),u.far=x.far,l.updateFrustum(u)),n=Oi.drawingBufferToWorldCoordinates(e,d,g,n),e.mode===se.SCENE2D&&(s.position.z=S,l.update(r)),this._pickPositionCache[i]=m.clone(n),n}}this._pickPositionCache[i]=void 0};var Ght=new pe;na.prototype.pickPosition=function(e,t,n){if(n=this.pickPositionWorldCoordinates(e,t,n),c(n)&&e.mode!==se.SCENE3D){m.fromElements(n.y,n.z,n.x,n);let i=e.mapProjection,o=i.ellipsoid,r=i.unproject(n,Ght);o.cartographicToCartesian(r,n)}return n};function i_e(e,t){let n,i,o=[],r=[],s=[],a=[];c(e)||(e=Number.MAX_VALUE);let l=t();for(;c(l);){let d=l.object,u=l.position,f=l.exclude;if(c(u)&&!c(d)){o.push(l);break}if(!c(d)||!c(d.primitive)||!f&&(o.push(l),0>=--e))break;let p=d.primitive,y=!1;typeof p.getGeometryInstanceAttributes=="function"&&c(d.id)&&(i=p.getGeometryInstanceAttributes(d.id),c(i)&&c(i.show)&&(y=!0,i.show=Tn.toValue(!1,i.show),s.push(i))),d instanceof Us&&(y=!0,d.show=!1,a.push(d)),y||(p.show=!1,r.push(p)),l=t()}for(n=0;n<r.length;++n)r[n].show=!0;for(n=0;n<s.length;++n)i=s[n],i.show=Tn.toValue(!0,i.show);for(n=0;n<a.length;++n)a[n].show=!0;return o}na.prototype.drillPick=function(e,t,n,i,o){let r=this;return i_e(n,function(){let l=r.pick(e,t,i,o);if(c(l))return{object:l,position:void 0,exclude:!1}}).map(function(l){return l.object})};var t_e=new m,Eht=new m;function Xht(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 o_e(e,t,n,i){let o=t.direction,r=m.mostOrthogonalAxis(o,t_e),s=m.cross(o,r,t_e),a=m.cross(o,s,Eht);return i.position=t.origin,i.direction=o,i.up=a,i.right=s,i.frustum.width=n??n_e,i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC)}function Iht(e,t,n){let i=t.frameState,{ray:o,width:r,tilesets:s}=n,a=e._pickOffscreenView.camera,l=o_e(e,o,r,a),d=fht;d.camera=a,d.cullingVolume=l;let u=!0,f=s.length;for(let p=0;p<f;++p){let y=s[p];y.show&&t.primitives.contains(y)&&(y.updateForPass(i,d),u=u&&d.ready)}return u&&n._completePick(),u}na.prototype.updateMostDetailedRayPicks=function(e){let t=this._mostDetailedRayPicks;for(let n=0;n<t.length;++n)Iht(this,e,t[n])&&t.splice(n--,1)};function r_e(e,t,n){for(let i=0;i<e.length;++i){let o=e.get(i);o.show&&(c(o.isCesium3DTileset)?(!c(t)||t.indexOf(o)===-1)&&n.push(o):o instanceof al&&r_e(o,t,n))}}function WD(e,t,n,i,o,r){let s=[];if(r_e(t.primitives,i,s),s.length===0)return Promise.resolve(r());let a=new Xht(n,o,s);return e._mostDetailedRayPicks.push(a),a.promise.then(function(){return r()})}function Wht(e,t){return!c(e)||!c(t)||t.length===0?!1:t.indexOf(e)>-1||t.indexOf(e.primitive)>-1||t.indexOf(e.id)>-1}function wht(e,t,n,i,o,r,s){let{context:a,frameState:l}=t,d=a.uniformState,u=e._pickOffscreenView;t.view=u,o_e(e,n,o,u.camera);let f=je.clone(u.viewport,XD),p=u.pickFramebuffer.begin(f,u.viewport);t.jobScheduler.disableThisFrame(),t.updateFrameState(),l.invertClassification=!1,l.passes.pick=!0,l.passes.offscreen=!0,s?l.tilesetPassState=hht:l.tilesetPassState=sA,d.update(l),t.updateEnvironment(),t.updateAndExecuteCommands(p,aA),t.resolveFramebuffers(p);let y,h=u.pickFramebuffer.end(f);if(t.context.depthTexture){let{frustumCommandsList:g}=u,x=g.length;for(let S=0;S<x;++S){let Z=e.getPickDepth(t,S).getDepth(a,0,0);if(c(Z)&&Z>0&&Z<1){let R=g[S],E=R.near*(S!==0?t.opaqueFrustumNearOffset:1),I=R.far,v=E+Z*(I-E);y=bn.getPoint(n,v);break}}}if(t.view=t.defaultView,a.endFrame(),c(h)||c(y))return{object:h,position:y,exclude:!c(y)&&r||Wht(h,i)}}function s_e(e,t,n,i,o,r,s,a){return i_e(i,function(){return wht(e,t,n,o,r,s,a)})}function pL(e,t,n,i,o,r,s){let a=s_e(e,t,n,1,i,o,r,s);if(a.length>0)return a[0]}function a_e(e,t,n,i,o,r,s,a){return s_e(e,t,n,i,o,r,s,a)}function wD(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)})})}na.prototype.pickFromRay=function(e,t,n,i){if(C.defined("ray",t),e.mode!==se.SCENE3D)throw new L("Ray intersections are only supported in 3D mode.");return pL(this,e,t,n,i,!1,!1)};na.prototype.drillPickFromRay=function(e,t,n,i,o){if(C.defined("ray",t),e.mode!==se.SCENE3D)throw new L("Ray intersections are only supported in 3D mode.");return a_e(this,e,t,n,i,o,!1,!1)};na.prototype.pickFromRayMostDetailed=function(e,t,n,i){if(C.defined("ray",t),e.mode!==se.SCENE3D)throw new L("Ray intersections are only supported in 3D mode.");let o=this;return t=bn.clone(t),n=c(n)?n.slice():n,wD(e,WD(o,e,t,n,i,function(){return pL(o,e,t,n,i,!1,!0)}))};na.prototype.drillPickFromRayMostDetailed=function(e,t,n,i,o){if(C.defined("ray",t),e.mode!==se.SCENE3D)throw new L("Ray intersections are only supported in 3D mode.");let r=this;return t=bn.clone(t),i=c(i)?i.slice():i,wD(e,WD(r,e,t,i,o,function(){return a_e(r,e,t,n,i,o,!1,!0)}))};var Pht=new m,vht=new m,Fht=new bn,c_e=new pe;function Q4(e,t){let n=e.ellipsoid,i=ui._defaultMaxTerrainHeight,o=n.geodeticSurfaceNormalCartographic(t,vht),r=pe.toCartesian(t,n,Pht),s=Fht;s.origin=r,s.direction=o;let a=new bn;return bn.getPoint(s,i,a.origin),m.negate(o,a.direction),a}function l_e(e,t){let n=e.ellipsoid,i=pe.fromCartesian(t,n,c_e);return Q4(e,i)}function d_e(e,t){let n=e.ellipsoid;return pe.fromCartesian(t,n,c_e).height}function Aht(e,t,n,i,o){let r=Q4(t,n);return WD(e,t,r,i,o,function(){let s=pL(e,t,r,i,o,!0,!0);if(c(s))return d_e(t,s.position)})}function Mht(e,t,n,i,o,r){let s=l_e(t,n);return WD(e,t,s,i,o,function(){let a=pL(e,t,s,i,o,!0,!0);if(c(a))return m.clone(a.position,r)})}na.prototype.sampleHeight=function(e,t,n,i){if(C.defined("position",t),e.mode!==se.SCENE3D)throw new L("sampleHeight is only supported in 3D mode.");if(!e.sampleHeightSupported)throw new L("sampleHeight requires depth texture support. Check sampleHeightSupported.");let o=Q4(e,t),r=pL(this,e,o,n,i,!0,!1);if(c(r))return d_e(e,r.position)};na.prototype.clampToHeight=function(e,t,n,i,o){if(C.defined("cartesian",t),e.mode!==se.SCENE3D)throw new L("clampToHeight is only supported in 3D mode.");if(!e.clampToHeightSupported)throw new L("clampToHeight requires depth texture support. Check clampToHeightSupported.");let r=l_e(e,t),s=pL(this,e,r,n,i,!0,!1);if(c(s))return m.clone(s.position,o)};na.prototype.sampleHeightMostDetailed=function(e,t,n,i){if(C.defined("positions",t),e.mode!==se.SCENE3D)throw new L("sampleHeightMostDetailed is only supported in 3D mode.");if(!e.sampleHeightSupported)throw new L("sampleHeightMostDetailed requires depth texture support. Check sampleHeightSupported.");n=c(n)?n.slice():n;let o=t.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=Aht(this,e,t[s],n,i);return wD(e,Promise.all(r).then(function(s){let a=s.length;for(let l=0;l<a;++l)t[l].height=s[l];return t}))};na.prototype.clampToHeightMostDetailed=function(e,t,n,i){if(C.defined("cartesians",t),e.mode!==se.SCENE3D)throw new L("clampToHeightMostDetailed is only supported in 3D mode.");if(!e.clampToHeightSupported)throw new L("clampToHeightMostDetailed requires depth texture support. Check clampToHeightSupported.");n=c(n)?n.slice():n;let o=t.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=Mht(this,e,t[s],n,i,t[s]);return wD(e,Promise.all(r).then(function(s){let a=s.length;for(let l=0;l<a;++l)t[l]=s[l];return t}))};na.prototype.destroy=function(){this._pickOffscreenView=this._pickOffscreenView&&this._pickOffscreenView.destroy()};var cA=na;var UHi=_(T(),1);var hHi=_(T(),1);var h3i=_(T(),1),lA=`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 b3i=_(T(),1),dA=`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; if (depth >= 1.0) { posEC.z = czm_currentFrustum.y; } return posEC; } vec3 getNormalXEdge(vec3 positionEC) { 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; vec3 dx0 = positionEC - positionLeft; vec3 dx1 = positionRight - positionEC; vec3 dy0 = positionEC - positionDown; vec3 dy1 = positionUp - positionEC; 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); 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); float stepLength = 3.0 * gaussianVariance / (float(stepCount) + 1.0); float metersPerPixel = czm_metersPerPixel(positionEC, 1.0); 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); 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; #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 vec2 samplePixel = floor(gl_FragCoord.xy + float(j + 1) * radialStep) + vec2(0.5); if (clamp(samplePixel, vec2(0.0), czm_viewport.zw) != samplePixel) { break; } vec4 samplePositionEC = pixelToEye(samplePixel); vec3 stepVector = samplePositionEC.xyz - positionEC.xyz; 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); 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 g3i=_(T(),1),uA=`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 _3i=_(T(),1),mA=`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 S3i=_(T(),1),fA=`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 V3i=_(T(),1),hA=`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 Z3i=_(T(),1),pA=`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 G3i=_(T(),1),bA=`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 X3i=_(T(),1),yA=`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 W3i=_(T(),1),gA=`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 P3i=_(T(),1),xA=`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 float exposure = texture(autoExposure, vec2(0.5)).r; color /= exposure; #else color *= vec3(exposure); #endif const float A = 0.22; const float B = 0.30; const float C = 0.10; const float D = 0.20; const float E = 0.01; const float F = 0.30; const float white = 11.2; 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 F3i=_(T(),1),_A=`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 M3i=_(T(),1),TA=`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 k3i=_(T(),1),vg=`#define SAMPLES 8 uniform float delta; uniform float sigma; uniform float direction; uniform sampler2D colorTexture; #ifdef USE_STEP_SIZE uniform float stepSize; #else uniform vec2 step; #endif in vec2 v_textureCoordinates; 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 O3i=_(T(),1),SA=`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; #define DISTANCE_TO_SPACE 6500000.0 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); } 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)); } 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; 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(!isSpace || !((sunPos.x >= -1.1 && sunPos.x <= 1.1) && (sunPos.y >= -1.1 && sunPos.y <= 1.1))) { 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); vec2 ghostVec = (vec2(0.5) - texcoord) * ghostDispersal; vec3 direction = normalize(vec3(ghostVec, 0.0)); vec4 result = vec4(0.0); vec4 ghost = vec4(0.0); for (int i = 0; i < 4; ++i) { vec2 offset = fract(texcoord + ghostVec * float(i)); ghost += textureDistorted(colorTexture, offset, direction.xy, distortionVec, isSpace); } result += ghost; 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; 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); 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 B3i=_(T(),1),CA=`uniform sampler2D colorTexture; uniform vec3 white; 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 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 H3i=_(T(),1),VA=`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 K3i=_(T(),1),LA=`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 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 Q3i=_(T(),1),ZA=`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 rYi=_(T(),1);function KT(){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 hi,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(KT.prototype,{ready:{get:function(){return this._ready}},name:{get:function(){return this._name}},outputTexture:{get:function(){let e=this._framebuffers;if(c(e))return e[e.length-1].getColorTexture(0)}}});function u_e(e){let t=e._framebuffers;if(!c(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 Nht(e,t){u_e(e);let n=e._width,i=e._height,o=t.halfFloatingPointTexture?Ue.HALF_FLOAT:Ue.FLOAT,r=Math.ceil(Math.log(Math.max(n,i))/Math.log(3)),s=new Array(r);for(let l=0;l<r;++l)n=Math.max(Math.ceil(n/3),1),i=Math.max(Math.ceil(i/3),1),s[l]=new hi,s[l].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 m_e(e){let t=e._commands;if(!c(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].shaderProgram.destroy();e._commands=void 0}function kht(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 Uht(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 Oht(e,t){m_e(e);let n=e._framebuffers,i=n.length,o=new Array(i);for(let r=0;r<i;++r)o[r]=t.createViewportQuadCommand(Uht(r,i),{framebuffer:n[r].framebuffer,uniformMap:kht(e,r)});e._commands=o}KT.prototype.clear=function(e){let t=this._framebuffers;if(!c(t))return;let n=this._clearCommand;c(n)||(n=this._clearCommand=new ti({color:new Y(0,0,0,0),framebuffer:void 0}));let i=t.length;for(let o=0;o<i;++o)t[o].clear(e,n)};KT.prototype.update=function(e){let t=e.drawingBufferWidth,n=e.drawingBufferHeight;(t!==this._width||n!==this._height)&&(this._width=t,this._height=n,Nht(this,e),Oht(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};KT.prototype.execute=function(e,t){this._colorTexture=t;let n=this._commands;if(!c(n))return;let i=n.length;for(let o=0;o<i;++o)n[o].execute(e)};KT.prototype.isDestroyed=function(){return!1};KT.prototype.destroy=function(){return u_e(this),m_e(this),he(this)};var RA=KT;var XYi=_(T(),1);var aYi=_(T(),1),Dht={NEAREST:0,LINEAR:1},qd=Dht;function JT(e){e=e??z.EMPTY_OBJECT;let{name:t=Hn(),fragmentShader:n,uniforms:i,textureScale:o=1,forcePowerOfTwo:r=!1,sampleMode:s=qd.NEAREST,pixelFormat:a=ke.RGBA,pixelDatatype:l=Ue.UNSIGNED_BYTE,clearColor:d=Y.BLACK,scissorRectangle:u}=e;if(C.typeOf.string("options.fragmentShader",n),C.typeOf.number.greaterThan("options.textureScale",o,0),C.typeOf.number.lessThanOrEquals("options.textureScale",o,1),!ke.isColorFormat(a))throw new L("options.pixelFormat must be a color format.");this._fragmentShader=n,this._uniforms=i,this._textureScale=o,this._forcePowerOfTwo=r,this._sampleMode=s,this._pixelFormat=a,this._pixelDatatype=l,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 f=new sc;f.scissorTest={enabled:!0,rectangle:c(u)?je.clone(u):new je},this._passState=f,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(JT.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(c(this._textureCache)){let e=this._textureCache.getFramebuffer(this._name);if(c(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 Bht=/uniform\s+sampler2D\s+depthTexture/g;JT.prototype._isSupported=function(e){return!Bht.test(this._fragmentShader)||e.depthTexture};function Yht(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];c(a)&&a!==r&&a instanceof Pt&&!c(e._textureCache.getStageByName(n))&&(e._texturesToRelease.push(a),delete s[n],delete s[`${n}Dimensions`]),r instanceof Pt&&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 Hht(e,t){return function(){let n=e._actualUniforms[t];return typeof n=="function"?n():n}}function zht(e,t){return function(){let n=e[t]();if(c(n))return n.dimensions}}function Kht(e){if(c(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]=Hht(e,r),n[r]=Yht(e,i,r)):(t[r]=i[r],n[r]=i[r]),o[r]=i[r];let s=t[r]();(typeof s=="string"||s instanceof Pt||s instanceof HTMLImageElement||s instanceof HTMLCanvasElement||s instanceof HTMLVideoElement)&&(t[`${r}Dimensions`]=zht(t,r))}e._uniforms={},Object.defineProperties(e._uniforms,n),e._uniformMap=St(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 Jht(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 Qht(e,t){if(c(e._command)&&!e._logDepthChanged&&!e._selectedDirty)return;let n=e._fragmentShader;if(c(e._selectedIdTexture)){let o=e._selectedIdTexture.width;n=Jht(n,o)}let i=new Be({defines:[e._useLogDepth?"LOG_DEPTH":""],sources:[n]});e._command=t.createViewportQuadCommand(i,{uniformMap:e._uniformMap,owner:e})}function jht(e){let t=e._sampleMode,n,i;t===qd.LINEAR?(n=Jt.LINEAR,i=di.LINEAR):(n=Jt.NEAREST,i=di.NEAREST);let o=e._sampler;(!c(o)||o.minificationFilter!==n||o.magnificationFilter!==i)&&(e._sampler=new en({wrapS:xn.CLAMP_TO_EDGE,wrapT:xn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i}))}function qht(e,t){return function(n){e._texturesToCreate.push({name:t,source:n})}}function $ht(e,t){return function(){return e._textureCache.getOutputTexture(t)}}function ept(e,t){let n=e._texturesToRelease;for(let a=0;a<n.length;++a){let l=n[a];l=l&&l.destroy()}n.length=0;let i=e._texturesToCreate;for(let a=0;a<i.length;++a){let{name:l,source:d}=i[a];e._actualUniforms[l]=new Pt({context:t,source:d})}i.length=0;let o=e._dirtyUniforms;if(o.length===0&&!c(e._texturePromise)){e._ready=!0;return}if(o.length===0||c(e._texturePromise))return;let r=e._uniforms,s=[];for(let a=0;a<o.length;++a){let l=o[a],d=r[l],u=e._textureCache.getStageByName(d);if(c(u))e._actualUniforms[l]=$ht(e,d);else if(typeof d=="string"){let f=new Ge({url:d});s.push(f.fetchImage().then(qht(e,l)))}else e._texturesToCreate.push({name:l,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 f_e(e){c(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(!c(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 Pt&&(c(t.getStageByName(n[o]))||r.destroy(),e._dirtyUniforms.push(o))}}function tpt(e){let t=c(e._selected)?e._selected.length:0,n=c(e._parentSelected)?e._parentSelected:0,i=e._selected!==e._selectedShadow||t!==e._selectedLength||e._parentSelected!==e._parentSelectedShadow||n!==e._parentSelectedLength;if(c(e._selected)&&c(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):c(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!i&&c(e._combinedSelected)){if(!c(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 npt(e,t){if(!e._selectedDirty)return;e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy(),e._selectedIdTexture=void 0;let n=e._combinedSelected;if(!c(n))return;let i=0;for(let s=0;s<n.length;++s){let a=n[s];c(a.pickIds)?i+=a.pickIds.length:c(a.pickId)&&++i}if(n.length===0||i===0){let s=new Uint8Array([255,255,255,255]);e._selectedIdTexture=new Pt({context:t,pixelFormat:ke.RGBA,pixelDatatype:Ue.UNSIGNED_BYTE,source:{arrayBufferView:s,width:1,height:1},sampler:en.NEAREST});return}let o=0,r=new Uint8Array(i*4);for(let s=0;s<n.length;++s){let a=n[s];if(c(a.pickIds)){let l=a.pickIds,d=l.length;for(let u=0;u<d;++u){let f=l[u].color;r[o]=Y.floatToByte(f.red),r[o+1]=Y.floatToByte(f.green),r[o+2]=Y.floatToByte(f.blue),r[o+3]=Y.floatToByte(f.alpha),o+=4}}else if(c(a.pickId)){let l=a.pickId.color;r[o]=Y.floatToByte(l.red),r[o+1]=Y.floatToByte(l.green),r[o+2]=Y.floatToByte(l.blue),r[o+3]=Y.floatToByte(l.alpha),o+=4}}e._selectedIdTexture=new Pt({context:t,pixelFormat:ke.RGBA,pixelDatatype:Ue.UNSIGNED_BYTE,source:{arrayBufferView:r,width:i,height:1},sampler:en.NEAREST})}JT.prototype.update=function(e,t){if(this.enabled!==this._enabled&&!this.enabled&&f_e(this),this._enabled=this.enabled,!this._enabled||(this._logDepthChanged=t!==this._useLogDepth,this._useLogDepth=t,this._selectedDirty=tpt(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=c(this._selected)?this._selected.length:0,this._parentSelectedLength=c(this._parentSelected)?this._parentSelected.length:0,npt(this,e),Kht(this),ept(this,e),Qht(this,e),jht(this),this._selectedDirty=!1,!this._ready))return;let n=this._textureCache.getFramebuffer(this._name);if(this._command.framebuffer=n,!c(n))return;let i=n.getColorTexture(0),o;(i.width!==e.drawingBufferWidth||i.height!==e.drawingBufferHeight)&&(o=this._renderState,(!c(o)||i.width!==o.viewport.width||i.height!==o.viewport.height)&&(this._renderState=Oe.fromCache({viewport:new je(0,0,i.width,i.height)}))),this._command.renderState=o};JT.prototype.execute=function(e,t,n,i){if(!c(this._command)||!c(this._command.framebuffer)||!this._ready||!this._enabled)return;this._colorTexture=t,this._depthTexture=n,this._idTexture=i,en.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;c(o)&&(o.context=e),this._command.execute(e,o)};JT.prototype.isDestroyed=function(){return!1};JT.prototype.destroy=function(){return f_e(this),he(this)};var mo=JT;var AYi=_(T(),1);function QT(e){e=e??z.EMPTY_OBJECT,C.defined("options.stages",e.stages),C.typeOf.number.greaterThan("options.stages.length",e.stages.length,0),this._stages=e.stages,this._inputPreviousStageTexture=e.inputPreviousStageTexture??!0;let t=e.name;c(t)||(t=Hn()),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(QT.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}}});QT.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};QT.prototype.get=function(e){return C.typeOf.number.greaterThanOrEquals("index",e,0),C.typeOf.number.lessThan("index",e,this.length),this._stages[e]};function ipt(e){let t=c(e._selected)?e._selected.length:0,n=c(e._parentSelected)?e._parentSelected:0,i=e._selected!==e._selectedShadow||t!==e._selectedLength;if(i=i||e._parentSelected!==e._parentSelectedShadow||n!==e._parentSelectedLength,c(e._selected)&&c(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):c(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!i&&c(e._combinedSelected)){if(!c(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}QT.prototype.update=function(e,t){this._selectedDirty=ipt(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=c(this._selected)?this._selected.length:0,this._parentSelectedLength=c(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)}};QT.prototype.isDestroyed=function(){return!1};QT.prototype.destroy=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return he(this)};var nd=QT;var Ir={};function j4(e){let o=`#define USE_STEP_SIZE ${vg}`,r=new mo({name:`${e}_x_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:0},sampleMode:qd.LINEAR}),s=new mo({name:`${e}_y_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:1},sampleMode:qd.LINEAR}),a={};return Object.defineProperties(a,{delta:{get:function(){return r.uniforms.delta},set:function(l){let d=r.uniforms,u=s.uniforms;d.delta=u.delta=l}},sigma:{get:function(){return r.uniforms.sigma},set:function(l){let d=r.uniforms,u=s.uniforms;d.sigma=u.sigma=l}},stepSize:{get:function(){return r.uniforms.stepSize},set:function(l){let d=r.uniforms,u=s.uniforms;d.stepSize=u.stepSize=l}}}),new nd({name:e,stages:[r,s],uniforms:a})}Ir.createBlurStage=function(){return j4("czm_blur")};Ir.createDepthOfFieldStage=function(){let e=j4("czm_depth_of_field_blur"),t=new mo({name:"czm_depth_of_field_composite",fragmentShader:bA,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 nd({name:"czm_depth_of_field",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};Ir.isDepthOfFieldSupported=function(e){return e.context.depthTexture};Ir.createEdgeDetectionStage=function(){let e=Hn();return new mo({name:`czm_edge_detection_${e}`,fragmentShader:gA,uniforms:{length:.25,color:Y.clone(Y.BLACK)}})};Ir.isEdgeDetectionSupported=function(e){return e.context.depthTexture};function opt(e){if(!c(e))return Ir.createEdgeDetectionStage();let t=new nd({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 mo({name:"czm_edge_detection_combine",fragmentShader:r,uniforms:n});return new nd({name:"czm_edge_detection_composite",stages:[t,s]})}Ir.createSilhouetteStage=function(e){let t=opt(e),n=new mo({name:"czm_silhouette_color_edges",fragmentShader:ZA,uniforms:{silhouetteTexture:t.name}});return new nd({name:"czm_silhouette",stages:[t,n],inputPreviousStageTexture:!1,uniforms:t.uniforms})};Ir.isSilhouetteSupported=function(e){return e.context.depthTexture};Ir.createBloomStage=function(){let e=new mo({name:"czm_bloom_contrast_bias",fragmentShader:pA,uniforms:{contrast:128,brightness:-.3}}),t=j4("czm_bloom_blur"),n=new nd({name:"czm_bloom_contrast_bias_blur",stages:[e,t]}),i=new mo({name:"czm_bloom_generate_composite",fragmentShader:fA,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 nd({name:"czm_bloom",stages:[n,i],inputPreviousStageTexture:!1,uniforms:o})};Ir.createAmbientOcclusionStage=function(){let e=new mo({name:"czm_ambient_occlusion_generate",fragmentShader:dA,uniforms:{intensity:3,bias:.1,lengthCap:.26,directionCount:8,stepCount:32,randomTexture:void 0}}),t=new mo({name:"czm_ambient_occlusion_composite",fragmentShader:uA,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 nd({name:"czm_ambient_occlusion",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};Ir.isAmbientOcclusionSupported=function(e){return e.context.depthTexture};var rpt=`#define FXAA_QUALITY_PRESET 39 ${Mv} ${TA}`;Ir.createFXAAStage=function(){return new mo({name:"czm_FXAA",fragmentShader:rpt,sampleMode:qd.LINEAR})};Ir.createAcesTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=lA,new mo({name:"czm_aces",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};Ir.createFilmicTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=xA,new mo({name:"czm_filmic",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};Ir.createPbrNeutralTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=_A,new mo({name:"czm_pbr_neutral",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};Ir.createReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=LA,new mo({name:"czm_reinhard",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};Ir.createModifiedReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=CA,new mo({name:"czm_modified_reinhard",fragmentShader:t,uniforms:{white:Y.WHITE,autoExposure:void 0,exposure:1}})};Ir.createAutoExposureStage=function(){return new RA};Ir.createBlackAndWhiteStage=function(){return new mo({name:"czm_black_and_white",fragmentShader:mA,uniforms:{gradations:5}})};Ir.createBrightnessStage=function(){return new mo({name:"czm_brightness",fragmentShader:hA,uniforms:{brightness:.5}})};Ir.createNightVisionStage=function(){return new mo({name:"czm_night_vision",fragmentShader:VA})};Ir.createDepthViewStage=function(){return new mo({name:"czm_depth_view",fragmentShader:yA})};Ir.createLensFlareStage=function(){return new mo({name:"czm_lens_flare",fragmentShader:SA,uniforms:{dirtTexture:on("Assets/Textures/LensFlare/DirtMask.jpg"),starTexture:on("Assets/Textures/LensFlare/StarBurst.jpg"),intensity:2,distortion:10,ghostDispersal:.4,haloWidth:.4,dirtAmount:.4,earthRadius:re.WGS84.maximumRadius}})};var $d=Ir;var SHi=_(T(),1);function x0(e){this._collection=e,this._framebuffers=[],this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0,this._updateDependencies=!1}function EA(e){for(;c(e.length);)e=e.get(e.length-1);return e.name}function q4(e,t,n,i,o){if(!i.enabled||!i._isSupported(t))return o;let r=n[i.name]={};if(c(o)){let a=e.getStageByName(o);r[EA(a)]=!0}let s=i.uniforms;if(c(s)){let a=Object.getOwnPropertyNames(s),l=a.length;for(let d=0;d<l;++d){let u=s[a[d]];if(typeof u=="string"){let f=e.getStageByName(u);c(f)&&(r[EA(f)]=!0)}}}return i.name}function GA(e,t,n,i,o){if(c(i.enabled)&&!i.enabled||c(i._isSupported)&&!i._isSupported(t))return o;let r=o,s=!c(i.inputPreviousStageTexture)||i.inputPreviousStageTexture,a=o,l=i.length;for(let f=0;f<l;++f){let p=i.get(f);c(p.length)?a=GA(e,t,n,p,o):a=q4(e,t,n,p,o),s&&(o=a)}let d,u;if(s)for(d=1;d<l;++d)u=EA(i.get(d)),c(n[u])||(n[u]={}),n[u][r]=!0;else for(d=1;d<l;++d){u=EA(i.get(d));let f=n[u];for(let p=0;p<d;++p)f[EA(i.get(p))]=!0}return a}function spt(e,t){let n={};if(c(e.ambientOcclusion)){let i=e.ambientOcclusion,o=e.bloom,r=e._tonemapping,s=e.fxaa,a=GA(e,t,n,i,void 0);a=GA(e,t,n,o,a),a=q4(e,t,n,r,a),a=GA(e,t,n,e,a),q4(e,t,n,s,a)}else GA(e,t,n,e,void 0);return n}function apt(e,t,n){let o=e._collection.getStageByName(t),r=o._textureScale,s=o._forcePowerOfTwo,a=o._pixelFormat,l=o._pixelDatatype,d=o._clearColor,u,f,p=e._framebuffers,y=p.length;for(u=0;u<y;++u){if(f=p[u],r!==f.textureScale||s!==f.forcePowerOfTwo||a!==f.pixelFormat||l!==f.pixelDatatype||!Y.equals(d,f.clearColor))continue;let h=f.stages,g=h.length,x=!1;for(let S=0;S<g;++S)if(n[h[S]]){x=!0;break}if(!x)break}return c(f)&&u<y?(f.stages.push(t),f):(f={textureScale:r,forcePowerOfTwo:s,pixelFormat:a,pixelDatatype:l,clearColor:d,stages:[t],buffer:new hi({pixelFormat:a,pixelDatatype:l}),clear:void 0},p.push(f),f)}function cpt(e,t){let n=spt(e._collection,t);for(let i in n)n.hasOwnProperty(i)&&(e._stageNameToFramebuffer[i]=apt(e,i,n[i]))}function $4(e){let t=e._framebuffers,n=t.length;for(let i=0;i<n;++i)t[i].buffer.destroy()}function lpt(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],l=a.textureScale,d=Math.ceil(n*l),u=Math.ceil(i*l),f=Math.min(d,u);a.forcePowerOfTwo&&(w.isPowerOfTwo(f)||(f=w.nextPowerOfTwo(f)),d=f,u=f),a.buffer.update(t,d,u),a.clear=new ti({color:a.clearColor,framebuffer:a.buffer.framebuffer})}}x0.prototype.updateDependencies=function(){this._updateDependencies=!0};x0.prototype.update=function(e){let t=this._collection,n=this._updateDependencies,i=c(t.ambientOcclusion)&&t.ambientOcclusion.enabled&&t.ambientOcclusion._isSupported(e),o=c(t.bloom)&&t.bloom.enabled&&t.bloom._isSupported(e),r=c(t._tonemapping)&&t._tonemapping.enabled&&t._tonemapping._isSupported(e),s=c(t.fxaa)&&t.fxaa.enabled&&t.fxaa._isSupported(e),a=!c(t._activeStages)||t._activeStages.length>0||i||o||r||s;if((n||!a&&this._framebuffers.length>0)&&($4(this),this._framebuffers.length=0,this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0),!n&&!a)return;this._framebuffers.length===0&&cpt(this,e);let l=e.drawingBufferWidth,d=e.drawingBufferHeight,u=this._width!==l||this._height!==d;!n&&!u||(this._width=l,this._height=d,this._updateDependencies=!1,$4(this),lpt(this,e))};x0.prototype.clear=function(e){let t=this._framebuffers;for(let n=0;n<t.length;++n)t[n].clear.execute(e)};x0.prototype.getStageByName=function(e){return this._collection.getStageByName(e)};x0.prototype.getOutputTexture=function(e){return this._collection.getOutputTexture(e)};x0.prototype.getFramebuffer=function(e){let t=this._stageNameToFramebuffer[e];if(c(t))return t.buffer.framebuffer};x0.prototype.isDestroyed=function(){return!1};x0.prototype.destroy=function(){return $4(this),he(this)};var jT=x0;var VHi=_(T(),1),bL={REINHARD:"REINHARD",MODIFIED_REINHARD:"MODIFIED_REINHARD",FILMIC:"FILMIC",ACES:"ACES",PBR_NEUTRAL:"PBR_NEUTRAL"};function h_e(e){return e===bL.REINHARD||e===bL.MODIFIED_REINHARD||e===bL.FILMIC||e===bL.ACES||e===bL.PBR_NEUTRAL}var _0=Object.freeze(bL);var e8=[];function pl(){let e=$d.createFXAAStage(),t=$d.createAmbientOcclusionStage(),n=$d.createBloomStage();this._autoExposureEnabled=!1,this._autoExposure=$d.createAutoExposureStage(),this._exposure=1,this._tonemapping=void 0,this._tonemapper=void 0,this.tonemapper=_0.PBR_NEUTRAL;let i=this._tonemapping;e.enabled=!1,t.enabled=!1,n.enabled=!1,i.enabled=!1;let o=new jT(this),r={},s=e8;for(s.push(e,t,n,i);s.length>0;){let l=s.pop();r[l.name]=l,l._textureCache=o;let d=l.length;if(c(d))for(let u=0;u<d;++u)s.push(l.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(pl.prototype,{ready:{get:function(){let e=!1,t=this._stages,n=t.length;for(let a=n-1;a>=0;--a){let l=t[a];e=e||l.ready&&l.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 t8(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(c(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(!c(t))continue;if(c(t.selected))return!0;let n=t.length;if(c(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;if(!h_e(e))throw new L("tonemapper was set to an invalid value.");c(this._tonemapping)&&(delete this._stageNames[this._tonemapping.name],this._tonemapping.destroy());let t=this._autoExposureEnabled,n;switch(e){case _0.REINHARD:n=$d.createReinhardTonemappingStage(t);break;case _0.MODIFIED_REINHARD:n=$d.createModifiedReinhardTonemappingStage(t);break;case _0.FILMIC:n=$d.createFilmicTonemappingStage(t);break;case _0.PBR_NEUTRAL:n=$d.createPbrNeutralTonemappingStage(t);break;default:n=$d.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,c(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 t8(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}pl.prototype.add=function(e){C.typeOf.object("stage",e);let t=this._stageNames,n=e8;for(n.push(e);n.length>0;){let o=n.pop();if(c(t[o.name]))throw new L(`${o.name} has already been added to the collection or does not have a unique name.`);t[o.name]=o,o._textureCache=this._textureCache;let r=o.length;if(c(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};pl.prototype.remove=function(e){if(!this.contains(e))return!1;let t=this._stageNames,n=e8;for(n.push(e);n.length>0;){let i=n.pop();delete t[i.name];let o=i.length;if(c(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};pl.prototype.contains=function(e){return c(e)&&c(e._index)&&e._textureCache===this._textureCache};pl.prototype.get=function(e){t8(this);let t=this._stages,n=t.length;return C.typeOf.number.greaterThanOrEquals("stages length",n,0),C.typeOf.number.greaterThanOrEquals("index",e,0),C.typeOf.number.lessThan("index",e,n),t[e]};pl.prototype.removeAll=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)this.remove(e[n]);e.length=0};pl.prototype.getStageByName=function(e){return this._stageNames[e]};pl.prototype.update=function(e,t,n){t8(this);let i=this._activeStages,o=this._activeStages=this._previousActiveStages;this._previousActiveStages=i;let r=this._stages;o.length=r.length;let s=0;for(let S=0;S<r.length;++S){let V=r[S];V.ready&&V.enabled&&V._isSupported(e)&&(o[s++]=V)}o.length=s;let a=s!==i.length;if(!a){for(let S=0;S<s;++S)if(o[S]!==i[S]){a=!0;break}}let l=this._ao,d=this._bloom,u=this._autoExposure,f=this._tonemapping,p=this._fxaa;f.enabled=n;let y=l.enabled&&l._isSupported(e),h=d.enabled&&d._isSupported(e),g=f.enabled&&f._isSupported(e),x=p.enabled&&p._isSupported(e);if((a||this._textureCacheDirty||y!==this._aoEnabled||h!==this._bloomEnabled||g!==this._tonemappingEnabled||x!==this._fxaaEnabled)&&(this._textureCache.updateDependencies(),this._aoEnabled=y,this._bloomEnabled=h,this._tonemappingEnabled=g,this._fxaaEnabled=x,this._textureCacheDirty=!1),c(this._randomTexture)&&!y&&(this._randomTexture.destroy(),this._randomTexture=void 0),!c(this._randomTexture)&&y){let V=new Uint8Array(196608);for(let Z=0;Z<196608;Z+=3)V[Z]=Math.floor(Math.random()*255);this._randomTexture=new Pt({context:e,pixelFormat:ke.RGB,pixelDatatype:Ue.UNSIGNED_BYTE,source:{arrayBufferView:V,width:256,height:256},sampler:new en({wrapS:xn.REPEAT,wrapT:xn.REPEAT,minificationFilter:Jt.NEAREST,magnificationFilter:di.NEAREST})})}this._textureCache.update(e),p.update(e,t),l.update(e,t),d.update(e,t),f.update(e,t),this._autoExposureEnabled&&u.update(e,t);for(let S=0;S<r.length;++S)r[S].update(e,t);s=0;for(let S=0;S<r.length;++S){let V=r[S];V.ready&&V.enabled&&V._isSupported(e)&&s++}a=s!==o.length,a&&this.update(e,t,n)};pl.prototype.clear=function(e){this._textureCache.clear(e),this._autoExposureEnabled&&this._autoExposure.clear(e)};function qT(e){for(;c(e.length);)e=e.get(e.length-1);return e.outputTexture}pl.prototype.getOutputTexture=function(e){let t=this.getStageByName(e);if(c(t))return qT(t)};function up(e,t,n,i,o){if(c(e.execute)){e.execute(t,n,i,o);return}if(e.inputPreviousStageTexture){up(e.get(0),t,n,i,o);for(let r=1;r<e.length;++r)up(e.get(r),t,qT(e.get(r-1)),i,o)}else for(let r=0;r<e.length;++r)up(e.get(r),t,n,i,o)}pl.prototype.execute=function(e,t,n,i){let o=this._activeStages,r=o.length,s=this._fxaa,a=this._ao,l=this._bloom,d=this._autoExposure,u=this._tonemapping,f=a.enabled&&a._isSupported(e),p=l.enabled&&l._isSupported(e),y=this._autoExposureEnabled,h=u.enabled&&u._isSupported(e),g=s.enabled&&s._isSupported(e);if(!g&&!f&&!p&&!h&&r===0)return;let x=t;f&&a.ready&&(up(a,e,x,n,i),x=qT(a)),p&&l.ready&&(up(l,e,x,n,i),x=qT(l)),y&&d.ready&&up(d,e,x,n,i),h&&u.ready&&(up(u,e,x,n,i),x=qT(u));let S=x;if(r>0){up(o[0],e,x,n,i);for(let V=1;V<r;++V)up(o[V],e,qT(o[V-1]),n,i);S=qT(o[r-1])}g&&s.ready&&up(s,e,S,n,i)};pl.prototype.copy=function(e,t){if(!c(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(td,{uniformMap:{colorTexture:function(){return n.outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};pl.prototype.isDestroyed=function(){return!1};pl.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(),he(this)};var XA=pl;var Tzi=_(T(),1);var nzi=_(T(),1);var DHi=_(T(),1),dpt={SHIFT:0,CTRL:1,ALT:2},ia=Object.freeze(dpt);var YHi=_(T(),1),upt={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},Vn=Object.freeze(upt);function Fg(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 a8(e,t){let n=e;return c(t)&&(n+=`+${t}`),n}function $T(e){if(e.shiftKey)return ia.SHIFT;if(e.ctrlKey)return ia.CTRL;if(e.altKey)return ia.ALT}var vs={LEFT:0,MIDDLE:1,RIGHT:2};function eu(e,t,n,i){function o(r){i(e,r)}Ot.isInternetExplorer()?n.addEventListener(t,o,!1):n.addEventListener(t,o,{capture:!1,passive:!1}),e._removalFunctions.push(function(){n.removeEventListener(t,o,!1)})}function mpt(e){let t=e._element,n=c(t.disableRootEvents)?t:document;Ot.supportsPointerEvents()?(eu(e,"pointerdown",t,gpt),eu(e,"pointerup",t,V_e),eu(e,"pointermove",t,xpt),eu(e,"pointercancel",t,V_e)):(eu(e,"mousedown",t,L_e),eu(e,"mouseup",n,Z_e),eu(e,"mousemove",n,R_e),eu(e,"touchstart",t,bpt),eu(e,"touchend",n,x_e),eu(e,"touchmove",n,ypt),eu(e,"touchcancel",n,x_e)),eu(e,"dblclick",t,hpt);let i;"onwheel"in t?i="wheel":document.onmousewheel!==void 0?i="mousewheel":i="DOMMouseScroll",eu(e,i,t,ppt)}function fpt(e){let t=e._removalFunctions;for(let n=0;n<t.length;++n)t[n]()}var p_e={position:new D};function c8(e){e._lastSeenTouchEvent=Ti()}function l8(e){return Ti()-e._lastSeenTouchEvent>Df.mouseEmulationIgnoreMilliseconds}function s8(e,t,n){let i=e.x-t.x,o=e.y-t.y;return Math.sqrt(i*i+o*o)<n}function L_e(e,t){if(!l8(e))return;let n=t.button;e._buttonDown[n]=!0;let i;if(n===vs.LEFT)i=Vn.LEFT_DOWN;else if(n===vs.MIDDLE)i=Vn.MIDDLE_DOWN;else if(n===vs.RIGHT)i=Vn.RIGHT_DOWN;else return;let o=Fg(e,t,e._primaryPosition);D.clone(o,e._primaryStartPosition),D.clone(o,e._primaryPreviousPosition);let r=$T(t),s=e.getInputAction(i,r);c(s)&&(D.clone(o,p_e.position),s(p_e),t.preventDefault())}var b_e={position:new D},y_e={position:new D};function n8(e,t,n,i){let o=$T(i),r=e.getInputAction(t,o),s=e.getInputAction(n,o);if(c(r)||c(s)){let a=Fg(e,i,e._primaryPosition);if(c(r)&&(D.clone(a,b_e.position),r(b_e)),c(s)){let l=e._primaryStartPosition;s8(l,a,e._clickPixelTolerance)&&(D.clone(a,y_e.position),s(y_e))}}}function Z_e(e,t){if(!l8(e))return;let n=t.button;n!==vs.LEFT&&n!==vs.MIDDLE&&n!==vs.RIGHT||(e._buttonDown[vs.LEFT]&&(n8(e,Vn.LEFT_UP,Vn.LEFT_CLICK,t),e._buttonDown[vs.LEFT]=!1),e._buttonDown[vs.MIDDLE]&&(n8(e,Vn.MIDDLE_UP,Vn.MIDDLE_CLICK,t),e._buttonDown[vs.MIDDLE]=!1),e._buttonDown[vs.RIGHT]&&(n8(e,Vn.RIGHT_UP,Vn.RIGHT_CLICK,t),e._buttonDown[vs.RIGHT]=!1))}var i8={startPosition:new D,endPosition:new D};function R_e(e,t){if(!l8(e))return;let n=$T(t),i=Fg(e,t,e._primaryPosition),o=e._primaryPreviousPosition,r=e.getInputAction(Vn.MOUSE_MOVE,n);c(r)&&(D.clone(o,i8.startPosition),D.clone(i,i8.endPosition),r(i8)),D.clone(i,o),(e._buttonDown[vs.LEFT]||e._buttonDown[vs.MIDDLE]||e._buttonDown[vs.RIGHT])&&t.preventDefault()}var g_e={position:new D};function hpt(e,t){let n=t.button,i;if(n===vs.LEFT)i=Vn.LEFT_DOUBLE_CLICK;else return;let o=$T(t),r=e.getInputAction(i,o);c(r)&&(Fg(e,t,g_e.position),r(g_e))}function ppt(e,t){let n;if(c(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(!c(n))return;let i=$T(t),o=e.getInputAction(Vn.WHEEL,i);c(o)&&(o(n),t.preventDefault())}function bpt(e,t){c8(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,Fg(e,r,new D));PD(e,t);let l=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,l.set(s,D.clone(a.get(s)))}function x_e(e,t){c8(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);PD(e,t);let l=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,l.remove(s)}var __e={position:new D},o8={position1:new D,position2:new D},T_e={position:new D},S_e={position:new D},C_e={position:new D};function PD(e,t){let n=$T(t),i=e._positions,o=i.length,r,s,a=e._isPinching;if(o!==1&&e._buttonDown[vs.LEFT]){if(e._buttonDown[vs.LEFT]=!1,c(e._touchHoldTimer)&&(clearTimeout(e._touchHoldTimer),e._touchHoldTimer=void 0),r=e.getInputAction(Vn.LEFT_UP,n),c(r)&&(D.clone(e._primaryPosition,T_e.position),r(T_e)),o===0&&!e._isTouchHolding&&(s=e.getInputAction(Vn.LEFT_CLICK,n),c(s))){let l=e._primaryStartPosition,d=e._previousPositions.values[0];s8(l,d,e._clickPixelTolerance)&&(D.clone(e._primaryPosition,S_e.position),s(S_e))}e._isTouchHolding=!1}if(o===0&&a&&(e._isPinching=!1,r=e.getInputAction(Vn.PINCH_END,n),c(r)&&r()),o===1&&!a){let l=i.values[0];D.clone(l,e._primaryPosition),D.clone(l,e._primaryStartPosition),D.clone(l,e._primaryPreviousPosition),e._buttonDown[vs.LEFT]=!0,r=e.getInputAction(Vn.LEFT_DOWN,n),c(r)&&(D.clone(l,__e.position),r(__e)),e._touchHoldTimer=setTimeout(function(){if(!e.isDestroyed()&&(e._touchHoldTimer=void 0,e._isTouchHolding=!0,s=e.getInputAction(Vn.RIGHT_CLICK,n),c(s))){let d=e._primaryStartPosition,u=e._previousPositions.values[0];s8(d,u,e._holdPixelTolerance)&&(D.clone(e._primaryPosition,C_e.position),s(C_e))}},Df.touchHoldDelayMilliseconds),t.preventDefault()}o===2&&!a&&(e._isPinching=!0,r=e.getInputAction(Vn.PINCH_START,n),c(r)&&(D.clone(i.values[0],o8.position1),D.clone(i.values[1],o8.position2),r(o8),t.preventDefault()))}function ypt(e,t){c8(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);c(d)&&Fg(e,r,d)}G_e(e,t);let l=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,D.clone(a.get(s),l.get(s))}var r8={startPosition:new D,endPosition:new D},IA={distance:{startPosition:new D,endPosition:new D},angleAndHeight:{startPosition:new D,endPosition:new D}};function G_e(e,t){let n=$T(t),i=e._positions,o=e._previousPositions,r=i.length,s;if(r===1&&e._buttonDown[vs.LEFT]){let a=i.values[0];D.clone(a,e._primaryPosition);let l=e._primaryPreviousPosition;s=e.getInputAction(Vn.MOUSE_MOVE,n),c(s)&&(D.clone(l,r8.startPosition),D.clone(a,r8.endPosition),s(r8)),D.clone(a,l),t.preventDefault()}else if(r===2&&e._isPinching&&(s=e.getInputAction(Vn.PINCH_MOVE,n),c(s))){let a=i.values[0],l=i.values[1],d=o.values[0],u=o.values[1],f=l.x-a.x,p=l.y-a.y,y=Math.sqrt(f*f+p*p)*.25,h=u.x-d.x,g=u.y-d.y,x=Math.sqrt(h*h+g*g)*.25,S=(l.y+a.y)*.125,V=(u.y+d.y)*.125,Z=Math.atan2(p,f),R=Math.atan2(g,h);D.fromElements(0,x,IA.distance.startPosition),D.fromElements(0,y,IA.distance.endPosition),D.fromElements(R,V,IA.angleAndHeight.startPosition),D.fromElements(Z,S,IA.angleAndHeight.endPosition),s(IA)}}function gpt(e,t){if(t.target.setPointerCapture(t.pointerId),t.pointerType==="touch"){let n=e._positions,i=t.pointerId;n.set(i,Fg(e,t,new D)),PD(e,t),e._previousPositions.set(i,D.clone(n.get(i)))}else L_e(e,t)}function V_e(e,t){if(t.pointerType==="touch"){let n=e._positions,i=t.pointerId;n.remove(i),PD(e,t),e._previousPositions.remove(i)}else Z_e(e,t)}function xpt(e,t){if(t.pointerType==="touch"){let n=e._positions,i=t.pointerId,o=n.get(i);if(!c(o))return;Fg(e,t,o),G_e(e,t);let r=e._previousPositions;D.clone(n.get(i),r.get(i))}else R_e(e,t)}function Df(e){this._inputEvents={},this._buttonDown={LEFT:!1,MIDDLE:!1,RIGHT:!1},this._isPinching=!1,this._isTouchHolding=!1,this._lastSeenTouchEvent=-Df.mouseEmulationIgnoreMilliseconds,this._primaryStartPosition=new D,this._primaryPosition=new D,this._primaryPreviousPosition=new D,this._positions=new Zt,this._previousPositions=new Zt,this._removalFunctions=[],this._touchHoldTimer=void 0,this._clickPixelTolerance=5,this._holdPixelTolerance=25,this._element=e??document,mpt(this)}Df.prototype.setInputAction=function(e,t,n){if(!c(e))throw new L("action is required.");if(!c(t))throw new L("type is required.");let i=a8(t,n);this._inputEvents[i]=e};Df.prototype.getInputAction=function(e,t){if(!c(e))throw new L("type is required.");let n=a8(e,t);return this._inputEvents[n]};Df.prototype.removeInputAction=function(e,t){if(!c(e))throw new L("type is required.");let n=a8(e,t);delete this._inputEvents[n]};Df.prototype.isDestroyed=function(){return!1};Df.prototype.destroy=function(){return fpt(this),he(this)};Df.mouseEmulationIgnoreMilliseconds=800;Df.touchHoldDelayMilliseconds=1500;var tu=Df;function eS(e){C.typeOf.object("scene",e),this._scene=e,this._currentTweens=[],this._morphHandler=void 0,this._morphCancelled=!1,this._completeMorph=void 0,this._morphToOrthographic=!1}eS.prototype.completeMorph=function(){c(this._completeMorph)&&this._completeMorph()};eS.prototype.morphTo2D=function(e,t){c(this._completeMorph)&&this._completeMorph();let n=this._scene;this._previousMode=n.mode,this._morphToOrthographic=n.camera.frustum instanceof sn,!(this._previousMode===se.SCENE2D||this._previousMode===se.MORPHING)&&(this._scene.morphStart.raiseEvent(this,this._previousMode,se.SCENE2D,!0),n._mode=se.MORPHING,n.camera._setTransform(M.IDENTITY),this._previousMode===se.COLUMBUS_VIEW?qpt(this,e):rbt(this,e,t),e===0&&c(this._completeMorph)&&this._completeMorph())};var _pt=new m,Tpt=new m,Spt=new m,Cpt=new m,Vpt=new m,Lpt=new m,Zpt=new m,Rpt=new pe,Gpt=new M,Ept=new Ci,Xpt=new sn,Ipt={position:void 0,direction:void 0,up:void 0,position2D:void 0,direction2D:void 0,up2D:void 0,frustum:void 0};eS.prototype.morphToColumbusView=function(e,t){c(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,this._previousMode===se.COLUMBUS_VIEW||this._previousMode===se.MORPHING)return;this._scene.morphStart.raiseEvent(this,this._previousMode,se.COLUMBUS_VIEW,!0),n.camera._setTransform(M.IDENTITY);let i=_pt,o=Tpt,r=Spt;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===se.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,Zpt),f=wt.eastNorthUpToFixedFrame(u,t,Gpt);M.inverseTransformation(f,f),n.mapProjection.project(t.cartesianToCartographic(i,Rpt),i),M.multiplyByPointAsVector(f,o,o),M.multiplyByPointAsVector(f,r,r)}}let s;this._morphToOrthographic?(s=Xpt,s.width=n.camera.frustum.right-n.camera.frustum.left,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight):(s=Ept,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,s.fov=w.toRadians(60));let a=Ipt;a.position=i,a.direction=o,a.up=r,a.frustum=s;let l=abt(a);WA(this,l),this._previousMode===se.SCENE2D?sbt(this,e,a,l):(a.position2D=M.multiplyByPoint(oo.TRANSFORM_2D,i,Cpt),a.direction2D=M.multiplyByPointAsVector(oo.TRANSFORM_2D,o,Vpt),a.up2D=M.multiplyByPointAsVector(oo.TRANSFORM_2D,r,Lpt),n._mode=se.MORPHING,N_e(this,e,a,l)),e===0&&c(this._completeMorph)&&this._completeMorph()};var m8={position:new m,direction:new m,up:new m,frustum:void 0},X_e=new Ci;eS.prototype.morphTo3D=function(e,t){c(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,!(this._previousMode===se.SCENE3D||this._previousMode===se.MORPHING)){if(this._scene.morphStart.raiseEvent(this,this._previousMode,se.SCENE3D,!0),n._mode=se.MORPHING,n.camera._setTransform(M.IDENTITY),this._previousMode===se.SCENE2D)Opt(this,e,t);else{let i;e>0?(i=m8,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=I_e(this,t);let o,r=n.camera;r.frustum instanceof sn?o=r.frustum.clone():(o=X_e,o.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,o.fov=w.toRadians(60)),i.frustum=o;let s=U_e(i);WA(this,s),u8(this,e,i,s)}e===0&&c(this._completeMorph)&&this._completeMorph()}};eS.prototype.isDestroyed=function(){return!1};eS.prototype.destroy=function(){return vD(this),he(this)};function WA(e,t){if(e._scene.completeMorphOnUserInput){e._morphHandler=new tu(e._scene.canvas);let n=function(){e._morphCancelled=!0,e._scene.camera.cancelFlight(),t(e)};e._completeMorph=n,e._morphHandler.setInputAction(n,Vn.LEFT_DOWN),e._morphHandler.setInputAction(n,Vn.MIDDLE_DOWN),e._morphHandler.setInputAction(n,Vn.RIGHT_DOWN),e._morphHandler.setInputAction(n,Vn.WHEEL)}}function vD(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 Wpt=new pe,wpt=new m,Ppt=new M;function I_e(e,t){let n=e._scene,i=n.camera,o=m8,r=o.position,s=o.direction,a=o.up,l=n.mapProjection.unproject(i.position,Wpt);t.cartographicToCartesian(l,r);let d=t.scaleToGeodeticSurface(r,wpt),u=wt.eastNorthUpToFixedFrame(d,t,Ppt);return M.multiplyByPointAsVector(u,i.direction,s),M.multiplyByPointAsVector(u,i.up,a),o}var vpt=new m,Fpt=new m,Apt=new m,Mpt=new m,Npt=new m,kpt=new m;function u8(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=m.clone(r.position,vpt),a=m.clone(r.direction,Fpt),l=m.clone(r.up,Apt),d=M.multiplyByPoint(oo.TRANSFORM_2D_INVERSE,n.position,Mpt),u=M.multiplyByPointAsVector(oo.TRANSFORM_2D_INVERSE,n.direction,Npt),f=M.multiplyByPointAsVector(oo.TRANSFORM_2D_INVERSE,n.up,kpt);function p(h){bm(s,d,h.time,r.position),bm(a,u,h.time,r.direction),bm(l,f,h.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right)}let y=o.tweens.add({duration:t,easingFunction:Jr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){k_e(e,o,0,1,t,i)}});e._currentTweens.push(y)}var Upt=new sn,W_e=new m,w_e=new m,P_e=new m,f8=new m,v_e=new m,F_e=new m;function Opt(e,t,n){t/=3;let i=e._scene,o=i.camera,r;t>0?(r=m8,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=I_e(e,n));let s;e._morphToOrthographic?(s=Upt,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.width=o.frustum.right-o.frustum.left):(s=X_e,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.fov=w.toRadians(60)),r.frustum=s;let a=U_e(r);WA(e,a);let l;e._morphToOrthographic?l=function(){u8(e,t,r,a)}:l=function(){M_e(e,t,r,function(){u8(e,t,r,a)})},t>0?(i._mode=se.SCENE2D,o.flyTo({duration:t,destination:m.fromDegrees(0,0,5*n.maximumRadius,n,f8),complete:function(){i._mode=se.MORPHING,l()}})):l()}function bm(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 sn)return;let a=s.frustum.fov,l=w.RADIANS_PER_DEGREE*.5,d=n.position.z*Math.tan(a*.5);s.frustum.far=d/Math.tan(l*.5)+1e7;function u(p){s.frustum.fov=w.lerp(a,l,p.time);let y=d/Math.tan(s.frustum.fov*.5);i(s,y)}let f=r.tweens.add({duration:t,easingFunction:Jr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){s.frustum=n.frustum.clone(),o(e)}});e._currentTweens.push(f)}var Dpt=new m,Bpt=new m,Ypt=new m,d8=new m,Hpt=new m,zpt=new m,Kpt=new Oo,Jpt=new bn,Qpt=new m,jpt={position:void 0,direction:void 0,up:void 0,frustum:void 0};function qpt(e,t){t*=.5;let n=e._scene,i=n.camera,o=m.clone(i.position,Dpt),r=m.clone(i.direction,Bpt),s=m.clone(i.up,Ypt),a=m.negate(m.UNIT_Z,Hpt),l=m.clone(m.UNIT_Y,zpt),d=d8;if(t>0)m.clone(m.ZERO,d8),d.z=5*n.ellipsoid.maximumRadius;else{m.clone(o,d8);let x=Jpt;M.multiplyByPoint(oo.TRANSFORM_2D,o,x.origin),M.multiplyByPointAsVector(oo.TRANSFORM_2D,r,x.direction);let S=n.globe;if(c(S)){let V=S.pickWorldCoordinates(x,n,!0,Qpt);c(V)&&(M.multiplyByPoint(oo.TRANSFORM_2D_INVERSE,V,d),d.z+=m.distance(o,d))}}let u=Kpt;u.right=d.z*.5,u.left=-u.right,u.top=u.right*(n.drawingBufferHeight/n.drawingBufferWidth),u.bottom=-u.top;let f=jpt;f.position=d,f.direction=a,f.up=l,f.frustum=u;let p=O_e(f);WA(e,p);function y(x){bm(o,d,x.time,i.position),bm(r,a,x.time,i.direction),bm(s,l,x.time,i.up),m.cross(i.direction,i.up,i.right),m.normalize(i.right,i.right),i._adjustOrthographicFrustum(!0)}function h(x,S){x.position.z=S}let g=n.tweens.add({duration:t,easingFunction:Jr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:y,complete:function(){A_e(e,t,f,h,p)}});e._currentTweens.push(g)}var E_e=new pe,$pt={position:new m,direction:new m,up:new m,position2D:new m,direction2D:new m,up2D:new m,frustum:new Oo},ebt={position:new m,direction:new m,up:new m,frustum:void 0},tbt=new m,nbt=new bn,ibt=new M,obt=new m;function rbt(e,t,n){t*=.5;let i=e._scene,o=i.camera,r=$pt;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,E_e),i.mapProjection.project(E_e,r.position),m.negate(m.UNIT_Z,r.direction),m.clone(m.UNIT_Y,r.up);let f=nbt;m.clone(r.position2D,f.origin);let p=m.clone(o.directionWC,f.direction),y=n.scaleToGeodeticSurface(o.positionWC,obt),h=wt.eastNorthUpToFixedFrame(y,n,ibt);M.inverseTransformation(h,h),M.multiplyByPointAsVector(h,p,p),M.multiplyByPointAsVector(oo.TRANSFORM_2D,p,p);let g=i.globe;if(c(g)){let x=g.pickWorldCoordinates(f,i,!0,tbt);if(c(x)){let S=m.distance(r.position2D,x);x.x+=S,m.clone(x,r.position2D)}}}function s(f,p){f.position.x=p}M.multiplyByPoint(oo.TRANSFORM_2D,r.position,r.position2D),M.multiplyByPointAsVector(oo.TRANSFORM_2D,r.direction,r.direction2D),M.multiplyByPointAsVector(oo.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 l=ebt;M.multiplyByPoint(oo.TRANSFORM_2D_INVERSE,r.position2D,l.position),m.clone(r.direction,l.direction),m.clone(r.up,l.up),l.frustum=a;let d=O_e(l);WA(e,d);function u(){A_e(e,t,r,s,d)}N_e(e,t,r,u)}function M_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,l=w.RADIANS_PER_DEGREE*.5,d=s*Math.tan(a*.5);r.frustum.far=d/Math.tan(l*.5)+1e7,r.frustum.fov=l;function u(p){r.frustum.fov=w.lerp(l,a,p.time),r.position.z=d/Math.tan(r.frustum.fov*.5)}let f=o.tweens.add({duration:t,easingFunction:Jr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){i(e)}});e._currentTweens.push(f)}function sbt(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=m.clone(n.position,f8),a=m.clone(n.direction,v_e),l=m.clone(n.up,F_e);o._mode=se.MORPHING;function d(){r.frustum=n.frustum.clone();let u=m.clone(r.position,W_e),f=m.clone(r.direction,w_e),p=m.clone(r.up,P_e);u.z=s.z;function y(g){bm(u,s,g.time,r.position),bm(f,a,g.time,r.direction),bm(p,l,g.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right)}let h=o.tweens.add({duration:t,easingFunction:Jr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:y,complete:function(){i(e)}});e._currentTweens.push(h)}e._morphToOrthographic?d():M_e(e,0,n,d)}function N_e(e,t,n,i){let o=e._scene,r=o.camera,s=m.clone(r.position,W_e),a=m.clone(r.direction,w_e),l=m.clone(r.up,P_e),d=m.clone(n.position2D,f8),u=m.clone(n.direction2D,v_e),f=m.clone(n.up2D,F_e);function p(h){bm(s,d,h.time,r.position),bm(a,u,h.time,r.direction),bm(l,f,h.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right),r._adjustOrthographicFrustum(!0)}let y=o.tweens.add({duration:t,easingFunction:Jr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){k_e(e,o,1,0,t,i)}});e._currentTweens.push(y)}function k_e(e,t,n,i,o,r){let s={object:t,property:"morphTime",startValue:n,stopValue:i,duration:o,easingFunction:Jr.QUARTIC_OUT};c(r)&&(s.complete=function(){r(e)});let a=t.tweens.addProperty(s);e._currentTweens.push(a)}function U_e(e){return function(t){let n=t._scene;n._mode=se.SCENE3D,n.morphTime=se.getMorphTime(se.SCENE3D),vD(t);let i=n.camera;(t._previousMode!==se.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=c(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,se.SCENE3D,r)}}function O_e(e){return function(t){let n=t._scene;n._mode=se.SCENE2D,n.morphTime=se.getMorphTime(se.SCENE2D),vD(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=c(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,se.SCENE2D,o)}}function abt(e){return function(t){let n=t._scene;n._mode=se.COLUMBUS_VIEW,n.morphTime=se.getMorphTime(se.COLUMBUS_VIEW),vD(t);let i=n.camera;(t._previousModeMode!==se.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=c(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,se.COLUMBUS_VIEW,r)}}var wA=eS;var gKi=_(T(),1);var Pzi=_(T(),1);var Czi=_(T(),1),cbt={LEFT_DRAG:0,RIGHT_DRAG:1,MIDDLE_DRAG:2,WHEEL:3,PINCH:4},Ni=Object.freeze(cbt);function oa(e,t){let n=`${e}`;return c(t)&&(n+=`+${t}`),n}function lbt(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 D_e(e,t,n){let i=oa(Ni.PINCH,t),o=e._update,r=e._isDown,s=e._eventStartPosition,a=e._pressTime,l=e._releaseTime;o[i]=!0,r[i]=!1,s[i]=new D;let d=e._movement[i];c(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])},Vn.PINCH_START,t),e._eventHandler.setInputAction(function(){e._buttonsDown=Math.max(e._buttonsDown-1,0),r[i]=!1,l[i]=new Date},Vn.PINCH_END,t),e._eventHandler.setInputAction(function(u){if(r[i]){o[i]?(lbt(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 f=d.angleAndHeight.endPosition.x,p=d.prevAngle,y=Math.PI*2;for(;f>=p+Math.PI;)f-=y;for(;f<p-Math.PI;)f+=y;d.angleAndHeight.endPosition.x=-f*n.clientWidth/12,d.angleAndHeight.startPosition.x=-p*n.clientWidth/12}},Vn.PINCH_MOVE,t)}function B_e(e,t){let n=oa(Ni.WHEEL,t),i=e._pressTime,o=e._releaseTime,r=e._update;r[n]=!0;let s=e._movement[n];c(s)||(s=e._movement[n]={});let a=e._lastMovement[n];c(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(l){let d=7.5*w.toRadians(l);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},Vn.WHEEL,t)}function yL(e,t,n){let i=oa(n,t),o=e._isDown,r=e._eventStartPosition,s=e._pressTime;o[i]=!1,r[i]=new D;let a=e._lastMovement[i];c(a)||(a=e._lastMovement[i]={startPosition:new D,endPosition:new D,valid:!1});let l,d;n===Ni.LEFT_DRAG?(l=Vn.LEFT_DOWN,d=Vn.LEFT_UP):n===Ni.RIGHT_DRAG?(l=Vn.RIGHT_DOWN,d=Vn.RIGHT_UP):n===Ni.MIDDLE_DRAG&&(l=Vn.MIDDLE_DOWN,d=Vn.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])},l,t),e._eventHandler.setInputAction(function(){h8(oa(n,void 0),e);for(let u of Object.values(ia)){let f=oa(n,u);h8(f,e)}},d,t)}function h8(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 Y_e(e,t){D.clone(e.startPosition,t.startPosition),D.clone(e.endPosition,t.endPosition)}function dbt(e,t,n){let i=n._isDown,o=!1,r=oa(e,t);for(let[l,d]of Object.entries(i))l.startsWith(e)&&d&&l!==r&&(o=!0,h8(l,n));if(!o)return;let s=n._pressTime,a=n._lastMovement[r];c(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 H_e(e,t){let n=e._update,i=e._movement,o=e._lastMovement,r=e._isDown;for(let s in Ni)if(Ni.hasOwnProperty(s)){let a=Ni[s];if(c(a)){let l=oa(a,t);n[l]=!0,c(e._lastMovement[l])||(e._lastMovement[l]={startPosition:new D,endPosition:new D,valid:!1}),c(e._movement[l])||(e._movement[l]={startPosition:new D,endPosition:new D})}}e._eventHandler.setInputAction(function(s){for(let a in Ni)if(Ni.hasOwnProperty(a)){let l=Ni[a];if(c(l)){let d=oa(l,t);dbt(l,t,e),r[d]&&(n[d]?(Y_e(i[d],o[d]),o[d].valid=!0,Y_e(s,i[d]),n[d]=!1):D.clone(s.endPosition,i[d].endPosition))}}D.clone(s.endPosition,e._currentMousePosition)},Vn.MOUSE_MOVE,t)}function ym(e){if(!c(e))throw new L("canvas is required.");this._eventHandler=new tu(e),this._update={},this._movement={},this._lastMovement={},this._isDown={},this._eventStartPosition={},this._pressTime={},this._releaseTime={},this._buttonsDown=0,this._currentMousePosition=new D,B_e(this,void 0),D_e(this,void 0,e),yL(this,void 0,Ni.LEFT_DRAG),yL(this,void 0,Ni.RIGHT_DRAG),yL(this,void 0,Ni.MIDDLE_DRAG),H_e(this,void 0);for(let t in ia)if(ia.hasOwnProperty(t)){let n=ia[t];c(n)&&(B_e(this,n),D_e(this,n,e),yL(this,n,Ni.LEFT_DRAG),yL(this,n,Ni.RIGHT_DRAG),yL(this,n,Ni.MIDDLE_DRAG),H_e(this,n))}}Object.defineProperties(ym.prototype,{currentMousePosition:{get:function(){return this._currentMousePosition}},anyButtonDown:{get:function(){let e=!this._update[oa(Ni.WHEEL)]||!this._update[oa(Ni.WHEEL,ia.SHIFT)]||!this._update[oa(Ni.WHEEL,ia.CTRL)]||!this._update[oa(Ni.WHEEL,ia.ALT)];return this._buttonsDown>0||e}}});ym.prototype.isMoving=function(e,t){if(!c(e))throw new L("type is required.");let n=oa(e,t);return!this._update[n]};ym.prototype.getMovement=function(e,t){if(!c(e))throw new L("type is required.");let n=oa(e,t);return this._movement[n]};ym.prototype.getLastMovement=function(e,t){if(!c(e))throw new L("type is required.");let n=oa(e,t),i=this._lastMovement[n];if(i.valid)return i};ym.prototype.isButtonDown=function(e,t){if(!c(e))throw new L("type is required.");let n=oa(e,t);return this._isDown[n]};ym.prototype.getStartMousePosition=function(e,t){if(!c(e))throw new L("type is required.");if(e===Ni.WHEEL)return this._currentMousePosition;let n=oa(e,t);return this._eventStartPosition[n]};ym.prototype.getButtonPressTime=function(e,t){if(!c(e))throw new L("type is required.");let n=oa(e,t);return this._pressTime[n]};ym.prototype.getButtonReleaseTime=function(e,t){if(!c(e))throw new L("type is required.");let n=oa(e,t);return this._releaseTime[n]};ym.prototype.reset=function(){for(let e in this._update)this._update.hasOwnProperty(e)&&(this._update[e]=!0)};ym.prototype.isDestroyed=function(){return!1};ym.prototype.destroy=function(){return this._eventHandler=this._eventHandler&&this._eventHandler.destroy(),he(this)};var PA=ym;var Bzi=_(T(),1);function FD(e,t,n,i,o,r,s,a,l,d){this._tweens=e,this._tweenjs=t,this._startObject=He(n),this._stopObject=He(i),this._duration=o,this._delay=r,this._easingFunction=s,this._update=a,this._complete=l,this.cancel=d,this.needsStart=!0}Object.defineProperties(FD.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}}});FD.prototype.cancelTween=function(){this._tweens.remove(this)};function Bf(){this._tweens=[]}Object.defineProperties(Bf.prototype,{length:{get:function(){return this._tweens.length}}});Bf.prototype.add=function(e){if(e=e??z.EMPTY_OBJECT,!c(e.startObject)||!c(e.stopObject))throw new L("options.startObject and options.stopObject are required.");if(!c(e.duration)||e.duration<0)throw new L("options.duration is required and must be positive.");if(e.duration===0)return c(e.complete)&&e.complete(),new FD(this);let t=e.duration/Kn.SECONDS_PER_MILLISECOND,n=e.delay??0,i=n/Kn.SECONDS_PER_MILLISECOND,o=e.easingFunction??Jr.LINEAR_NONE,r=e.startObject,s=new k0e(r);s.to(He(e.stopObject),t),s.delay(i),s.easing(o),c(e.update)&&s.onUpdate(function(){e.update(r)}),s.onComplete(e.complete??null),s.repeat(e._repeat??0);let a=new FD(this,s,e.startObject,e.stopObject,e.duration,n,o,e.update,e.complete,e.cancel);return this._tweens.push(a),a};Bf.prototype.addProperty=function(e){e=e??z.EMPTY_OBJECT;let t=e.object,n=e.property,i=e.startValue,o=e.stopValue;if(!c(t)||!c(e.property))throw new L("options.object and options.property are required.");if(!c(t[n]))throw new L("options.object must have the specified property.");if(!c(i)||!c(o))throw new L("options.startValue and options.stopValue are required.");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})};Bf.prototype.addAlpha=function(e){e=e??z.EMPTY_OBJECT;let t=e.material;if(!c(t))throw new L("options.material is required.");let n=[];for(let o in t.uniforms)t.uniforms.hasOwnProperty(o)&&c(t.uniforms[o])&&c(t.uniforms[o].alpha)&&n.push(o);if(n.length===0)throw new L("material has no properties with alpha components.");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})};Bf.prototype.addOffsetIncrement=function(e){e=e??z.EMPTY_OBJECT;let t=e.material;if(!c(t))throw new L("material is required.");if(!c(t.uniforms.offset))throw new L("material.uniforms must have an offset property.");let n=t.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})};Bf.prototype.remove=function(e){if(!c(e))return!1;let t=this._tweens.indexOf(e);return t!==-1?(e.tweenjs.stop(),c(e.cancel)&&e.cancel(),this._tweens.splice(t,1),!0):!1};Bf.prototype.removeAll=function(){let e=this._tweens;for(let t=0;t<e.length;++t){let n=e[t];n.tweenjs.stop(),c(n.cancel)&&n.cancel()}e.length=0};Bf.prototype.contains=function(e){return c(e)&&this._tweens.indexOf(e)!==-1};Bf.prototype.get=function(e){if(!c(e))throw new L("index is required.");return this._tweens[e]};Bf.prototype.update=function(e){let t=this._tweens,n=0;for(e=c(e)?e/Kn.SECONDS_PER_MILLISECOND:Ti();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 tS=Bf;function FA(e){if(!c(e))throw new L("scene is required.");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=Ni.LEFT_DRAG,this.zoomEventTypes=[Ni.RIGHT_DRAG,Ni.WHEEL,Ni.PINCH],this.rotateEventTypes=Ni.LEFT_DRAG,this.tiltEventTypes=[Ni.MIDDLE_DRAG,Ni.PINCH,{eventType:Ni.LEFT_DRAG,modifier:ia.CTRL},{eventType:Ni.RIGHT_DRAG,modifier:ia.CTRL}],this.lookEventTypes={eventType:Ni.LEFT_DRAG,modifier:ia.SHIFT};let t=e.ellipsoid??re.default;this.minimumPickingTerrainHeight=re.WGS84.equals(t)?15e4:t.minimumRadius*.025,this._minimumPickingTerrainHeight=this.minimumPickingTerrainHeight,this.minimumPickingTerrainDistanceWithInertia=re.WGS84.equals(t)?4e3:t.minimumRadius*63e-5,this.minimumCollisionTerrainHeight=re.WGS84.equals(t)?15e3:t.minimumRadius*.0025,this._minimumCollisionTerrainHeight=this.minimumCollisionTerrainHeight,this.minimumTrackBallHeight=re.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 PA(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 tS,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 pe(Math.PI,w.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 ubt(e,t){if(e<0)return 0;let n=(1-t)*25;return Math.exp(-n*e)}function mbt(e){return D.equalsEpsilon(e.startPosition,e.endPosition,w.EPSILON14)}var fbt=.4;function hbt(e,t,n,i,o,r,s){let a=r[s];c(a)||(a=r[s]={startPosition:new D,endPosition:new D,motion:new D,inertiaEnabled:!0});let l=e.getButtonPressTime(t,n),d=e.getButtonReleaseTime(t,n),u=l&&d&&(d.getTime()-l.getTime())/1e3,p=d&&(new Date().getTime()-d.getTime())/1e3;if(l&&d&&u<fbt){let y=ubt(p,i),h=e.getLastMovement(t,n);if(!c(h)||mbt(h)||!a.inertiaEnabled||(a.motion.x=(h.endPosition.x-h.startPosition.x)*.5,a.motion.y=(h.endPosition.y-h.startPosition.y)*.5,a.startPosition=D.clone(h.startPosition,a.startPosition),a.endPosition=D.multiplyByScalar(a.motion,y,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 g=e.getStartMousePosition(t,n);o(r,g,a)}}}function pbt(e,t){if(c(t)){let n=e[t];c(n)&&(n.inertiaEnabled=!0);let i=e._inertiaDisablers[t];if(c(i)){let o=i.length;for(let r=0;r<o;++r)n=e[i[r]],c(n)&&(n.inertiaEnabled=!1)}}}var z_e=[];function bl(e,t,n,i,o,r){if(!c(n))return;let s=e._aggregator;Array.isArray(n)||(z_e[0]=n,n=z_e);let a=n.length;for(let l=0;l<a;++l){let d=n[l],u=c(d.eventType)?d.eventType:d,f=d.modifier,p=s.isMoving(u,f)&&s.getMovement(u,f),y=s.getStartMousePosition(u,f);e.enableInputs&&t&&(p?(i(e,y,p),pbt(e,r)):o<1&&hbt(s,u,f,o,i,e,r))}}var AD=new bn,bbt=new m,ybt=new D,gbt=new m,xbt=new D,_bt=new m,Tbt=new m,Sbt=new m,Cbt=new m,rTe=new m,Vbt=new m,Lbt=new m,Zbt=new m,Rbt=new m,Gbt=new m,Ebt=new m,Xbt=new m,Ibt=new m,Wbt=new m,wbt=new m,nS=new m,K_e=new m,J_e=new m,p8={orientation:new Ea};function C8(e,t,n,i,o,r){let s=1;c(r)&&(s=w.clamp(Math.abs(r),.25,1));let a=n.endPosition.y-n.startPosition.y,d=a>0?e.minimumZoomDistance*s:0,u=e.maximumZoomDistance,f=o-d,p=i*f;p=w.clamp(p,e._minimumZoomRate,e._maximumZoomRate);let y=a/e._scene.canvas.clientHeight;y=Math.min(y,e.maximumMovementRatio);let h=p*y;if(e.enableCollisionDetection||e.minimumZoomDistance===0||!c(e._globe)){if(h>0&&Math.abs(o-d)<1||h<0&&Math.abs(o-u)<1)return;o-h<d?h=o-d-1:o-h>u&&(h=o-u)}let g=e._scene,x=g.camera,S=g.mode,V=p8.orientation;V.heading=x.heading,V.pitch=x.pitch,V.roll=x.roll;let Z=n.inertiaEnabled??D.equals(t,e._zoomMouseStart),R=e._zoomingOnVector,E=e._rotatingZoom,I;if(Z||(e._zoomMouseStart=D.clone(t,e._zoomMouseStart),c(e._globe)&&S===se.SCENE2D?(I=x.getPickRay(t,AD).origin,I=m.fromElements(I.y,I.z,I.x)):c(e._globe)&&(I=T0(e,t,bbt)),c(I)?(e._useZoomWorldPosition=!0,e._zoomWorldPosition=m.clone(I,e._zoomWorldPosition)):e._useZoomWorldPosition=!1,R=e._zoomingOnVector=!1,E=e._rotatingZoom=!1,e._zoomingUnderground=e._cameraUnderground),!e._useZoomWorldPosition){x.zoomIn(h);return}let v=S===se.COLUMBUS_VIEW;if(x.positionCartographic.height<2e6&&(E=!0),!Z||E){if(S===se.SCENE2D){let P=e._zoomWorldPosition,F=x.position;if(!m.equals(P,F)&&x.positionCartographic.height<e._maxCoord.x*2){let N=x.position.x,b=m.subtract(P,F,gbt);m.normalize(b,b);let G=m.distance(P,F)*h/(x.getMagnitude()*.5);x.move(b,G*.5),(x.position.x<0&&N>0||x.position.x>0&&N<0)&&(I=x.getPickRay(t,AD).origin,I=m.fromElements(I.y,I.z,I.x),e._zoomWorldPosition=m.clone(I,e._zoomWorldPosition))}}else if(S===se.SCENE3D){let P=m.normalize(x.position,rTe);if(e._cameraUnderground||e._zoomingUnderground||x.positionCartographic.height<3e3&&Math.abs(m.dot(x.direction,P))<.6)v=!0;else{let F=g.canvas,N=xbt;N.x=F.clientWidth/2,N.y=F.clientHeight/2;let b=T0(e,N,_bt);if(!c(b))v=!0;else if(x.positionCartographic.height<1e6)if(m.dot(x.direction,P)>=-.5)v=!0;else{let G=Lbt;m.clone(x.position,G);let X=e._zoomWorldPosition,W=Vbt;if(W=m.normalize(X,W),m.dot(W,P)<0)return;let A=wbt,k=Gbt;m.clone(x.direction,k),m.add(G,m.multiplyByScalar(k,1e3,nS),A);let B=Ebt,O=Xbt;m.subtract(X,G,B),m.normalize(B,O);let H=m.dot(P,O);if(H>=0){e._zoomMouseStart.x=-1;return}let U=Math.acos(-H),K=m.magnitude(G),Q=m.magnitude(X),ie=K-h,j=m.magnitude(B),$=Math.asin(w.clamp(j/Q*Math.sin(U),-1,1)),ne=Math.asin(w.clamp(ie/Q*Math.sin(U),-1,1)),be=$-ne+U,Ce=Zbt;m.normalize(G,Ce);let me=Rbt;me=m.cross(O,Ce,me),me=m.normalize(me,me),m.normalize(m.cross(Ce,me,nS),k),m.multiplyByScalar(m.normalize(A,nS),m.magnitude(A)-h,A),m.normalize(G,G),m.multiplyByScalar(G,ie,G);let _e=Ibt;m.multiplyByScalar(m.add(m.multiplyByScalar(Ce,Math.cos(be)-1,K_e),m.multiplyByScalar(k,Math.sin(be),J_e),nS),ie,_e),m.add(G,_e,G),m.normalize(A,Ce),m.normalize(m.cross(Ce,me,nS),k);let Ve=Wbt;m.multiplyByScalar(m.add(m.multiplyByScalar(Ce,Math.cos(be)-1,K_e),m.multiplyByScalar(k,Math.sin(be),J_e),nS),m.magnitude(A),Ve),m.add(A,Ve,A),m.clone(G,x.position),m.normalize(m.subtract(A,G,nS),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(p8);return}else{let G=m.normalize(b,Tbt),X=m.normalize(e._zoomWorldPosition,Sbt),W=m.dot(X,G);if(W>0&&W<1){let A=w.acosClamped(W),k=m.cross(X,G,Cbt),B=Math.abs(A)>w.toRadians(20)?x.positionCartographic.height*.75:x.positionCartographic.height-h,O=h/B;x.rotate(k,A*O)}}}}e._rotatingZoom=!v}if(!Z&&v||R){let P,F=Oi.worldToWindowCoordinates(g,e._zoomWorldPosition,ybt);S!==se.COLUMBUS_VIEW&&D.equals(t,e._zoomMouseStart)&&c(F)?P=x.getPickRay(F,AD):P=x.getPickRay(t,AD);let N=P.direction;(S===se.COLUMBUS_VIEW||S===se.SCENE2D)&&m.fromElements(N.y,N.z,N.x,N),x.move(N,h),e._zoomingOnVector=!0}else x.zoomIn(h);e._cameraUnderground||x.setView(p8)}var Pbt=new bn,vbt=new bn,Fbt=new m;function Abt(e,t,n){let o=e._scene.camera,r=o.getPickRay(n.startPosition,Pbt).origin,s=o.getPickRay(n.endPosition,vbt).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,Fbt),l=m.magnitude(a);l>0&&(m.normalize(a,a),o.move(a,l))}function Q_e(e,t,n){c(n.distance)&&(n=n.distance);let o=e._scene.camera;C8(e,t,n,e.zoomFactor,o.getMagnitude())}var Mbt=new D,Nbt=new D;function j_e(e,t,n){if(c(n.angleAndHeight)){kbt(e,t,n.angleAndHeight);return}let i=e._scene,o=i.camera,r=i.canvas,s=r.clientWidth,a=r.clientHeight,l=Mbt;l.x=2/s*n.startPosition.x-1,l.y=2/a*(a-n.startPosition.y)-1,l=D.normalize(l,l);let d=Nbt;d.x=2/s*n.endPosition.x-1,d.y=2/a*(a-n.endPosition.y)-1,d=D.normalize(d,d);let u=w.acosClamped(l.x);l.y<0&&(u=w.TWO_PI-u);let f=w.acosClamped(d.x);d.y<0&&(f=w.TWO_PI-f);let p=f-u;o.twistRight(p)}function kbt(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 l=i*a*Math.PI*4;r.twistRight(l)}function Ubt(e){let t=e._scene.mapMode2D===ed.ROTATE;M.equals(M.IDENTITY,e._scene.camera.transform)?(bl(e,e.enableTranslate,e.translateEventTypes,Abt,e.inertiaTranslate,"_lastInertiaTranslateMovement"),bl(e,e.enableZoom,e.zoomEventTypes,Q_e,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&bl(e,e.enableRotate,e.tiltEventTypes,j_e,e.inertiaSpin,"_lastInertiaTiltMovement")):(bl(e,e.enableZoom,e.zoomEventTypes,Q_e,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&bl(e,e.enableRotate,e.translateEventTypes,j_e,e.inertiaSpin,"_lastInertiaSpinMovement"))}var sTe=new bn,Obt=new m,Dbt=new m;function T0(e,t,n){let i=e._scene,o=e._globe,r=i.camera,s;if(i.pickPositionSupported&&(s=i.pickPositionWorldCoordinates(t,Obt)),!c(o))return m.clone(s,n);let a=!e._cameraUnderground,l=r.getPickRay(t,sTe),d=o.pickWorldCoordinates(l,i,a,Dbt),u=c(s)?m.distance(s,r.positionWC):Number.POSITIVE_INFINITY,f=c(d)?m.distance(d,r.positionWC):Number.POSITIVE_INFINITY;return u<f?m.clone(s,n):m.clone(d,n)}var Bbt=new pe;function BD(e){let t=e._ellipsoid,n=e._scene,i=n.camera,o=n.mode,r=0;if(o===se.SCENE3D){let l=t.cartesianToCartographic(i.position,Bbt);c(l)&&(r=l.height)}else r=i.position.z;let s=e._scene.globeHeight??0;return Math.abs(s-r)}var Ybt=new m;function aTe(e,t){let n=t.origin,i=t.direction,o=BD(e),r=m.normalize(n,Ybt),s=Math.abs(m.dot(r,i));return s=Math.max(s,.5)*2,o*s}function cTe(e,t,n,i){let o=m.distance(t.origin,n),r=BD(e),s=w.clamp(r*5,e._minimumUndergroundPickDistance,e._maximumUndergroundPickDistance);return o>s&&(o=Math.min(o,r/5),o=Math.max(o,100)),bn.getPoint(t,o,i)}function lTe(e,t,n,i){let o;return c(n)?(o=m.distance(t.origin,n),o>e._maximumUndergroundPickDistance&&(o=BD(e))):o=BD(e),bn.getPoint(t,o,i)}var Hbt=new D;function dTe(e,t){let n=t.endPosition,i=D.subtract(t.endPosition,t.startPosition,Hbt),o=e._strafeEndMousePosition;D.add(o,i,o),t.endPosition=o,V8(e,t,e._strafeStartPosition),t.endPosition=n}var q_e=new bn,zbt=new bn,b8=new m,Kbt=new m,Jbt=new m,Qbt=new m,jbt=new cn(m.UNIT_X,0),qbt=new D,$bt=new D;function e0t(e,t,n){if(m.equals(t,e._translateMousePosition)||(e._looking=!1),m.equals(t,e._strafeMousePosition)||(e._strafing=!1),e._looking){iu(e,t,n);return}if(e._strafing){dTe(e,n);return}let o=e._scene.camera,r=e._cameraUnderground,s=D.clone(n.startPosition,qbt),a=D.clone(n.endPosition,$bt),l=o.getPickRay(s,q_e),d=m.clone(m.ZERO,Qbt),u=m.UNIT_X,f;if(o.position.z<e._minimumPickingTerrainHeight&&(f=T0(e,s,b8),c(f)&&(d.x=f.x)),r||d.x>o.position.z&&c(f)){let Z=f;r&&(Z=lTe(e,l,f,b8)),D.clone(t,e._strafeMousePosition),D.clone(t,e._strafeEndMousePosition),m.clone(Z,e._strafeStartPosition),e._strafing=!0,V8(e,n,e._strafeStartPosition);return}let p=cn.fromPointNormal(d,u,jbt);l=o.getPickRay(s,q_e);let y=qn.rayPlane(l,p,b8),h=o.getPickRay(a,zbt),g=qn.rayPlane(h,p,Kbt);if(!c(y)||!c(g)){e._looking=!0,iu(e,t,n),D.clone(t,e._translateMousePosition);return}let x=m.subtract(y,g,Jbt),S=x.x;x.x=x.y,x.y=x.z,x.z=S;let V=m.magnitude(x);V>w.EPSILON6&&(m.normalize(x,x),o.move(x,V))}var uTe=new D,kD=new bn,UD=new m,t0t=new m,mTe=new M,n0t=new M,i0t=new m,o0t=new cn(m.UNIT_X,0),y8=new m,_8=new pe,fTe=new M,r0t=new Fe,s0t=new te,OD=new m;function a0t(e,t,n){if(c(n.angleAndHeight)&&(n=n.angleAndHeight),D.equals(t,e._tiltCenterMousePosition)||(e._tiltCVOffMap=!1,e._looking=!1),e._looking){iu(e,t,n);return}let o=e._scene.camera;e._tiltCVOffMap||!e.onMap()||Math.abs(o.position.z)>e._minimumPickingTerrainHeight?(e._tiltCVOffMap=!0,c0t(e,t,n)):l0t(e,t,n)}function c0t(e,t,n){let i=e._scene,o=i.camera,r=i.canvas,s=uTe;s.x=r.clientWidth/2,s.y=r.clientHeight/2;let a=o.getPickRay(s,kD),l=m.UNIT_X,d=a.origin,u=a.direction,f,p=m.dot(l,u);if(Math.abs(p)>w.EPSILON6&&(f=-m.dot(l,d)/p),!c(f)||f<=0){e._looking=!0,iu(e,t,n),D.clone(t,e._tiltCenterMousePosition);return}let y=m.multiplyByScalar(u,f,UD);m.add(d,y,y);let h=i.mapProjection,g=h.ellipsoid;m.fromElements(y.y,y.z,y.x,y);let x=h.unproject(y,_8);g.cartographicToCartesian(x,y);let S=wt.eastNorthUpToFixedFrame(y,g,mTe),V=e._globe,Z=e._ellipsoid;e._globe=void 0,e._ellipsoid=re.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let R=M.clone(o.transform,fTe);o._setTransform(S),nu(e,t,n,m.UNIT_Z),o._setTransform(R),e._globe=V,e._ellipsoid=Z;let E=Z.maximumRadius;e._rotateFactor=1/E,e._rotateRateRangeAdjustment=E}function l0t(e,t,n){let i=e._scene,o=i.camera,r=e._cameraUnderground,s,a,l=m.UNIT_X;if(D.equals(t,e._tiltCenterMousePosition))s=m.clone(e._tiltCenter,UD);else{if(o.position.z<e._minimumPickingTerrainHeight&&(s=T0(e,t,UD)),!c(s)){a=o.getPickRay(t,kD);let b=a.origin,G=a.direction,X,W=m.dot(l,G);if(Math.abs(W)>w.EPSILON6&&(X=-m.dot(l,b)/W),!c(X)||X<=0){e._looking=!0,iu(e,t,n),D.clone(t,e._tiltCenterMousePosition);return}s=m.multiplyByScalar(G,X,UD),m.add(b,s,s)}r&&(c(a)||(a=o.getPickRay(t,kD)),cTe(e,a,s,s)),D.clone(t,e._tiltCenterMousePosition),m.clone(s,e._tiltCenter)}let d=i.canvas,u=uTe;u.x=d.clientWidth/2,u.y=e._tiltCenterMousePosition.y,a=o.getPickRay(u,kD);let f=m.clone(m.ZERO,i0t);f.x=s.x;let p=cn.fromPointNormal(f,l,o0t),y=qn.rayPlane(a,p,t0t),h=o._projection,g=h.ellipsoid;m.fromElements(s.y,s.z,s.x,s);let x=h.unproject(s,_8);g.cartographicToCartesian(x,s);let S=wt.eastNorthUpToFixedFrame(s,g,mTe),V;c(y)?(m.fromElements(y.y,y.z,y.x,y),x=h.unproject(y,_8),g.cartographicToCartesian(x,y),V=wt.eastNorthUpToFixedFrame(y,g,n0t)):V=S;let Z=e._globe,R=e._ellipsoid;e._globe=void 0,e._ellipsoid=re.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let E=m.UNIT_Z,I=M.clone(o.transform,fTe);o._setTransform(S);let v=m.cross(m.UNIT_Z,m.normalize(o.position,y8),y8),P=m.dot(o.right,v);if(nu(e,t,n,E,!1,!0),o._setTransform(V),P<0){let b=n.startPosition.y-n.endPosition.y;(r&&b<0||!r&&b>0)&&(E=void 0);let G=o.constrainedAxis;o.constrainedAxis=void 0,nu(e,t,n,E,!0,!1),o.constrainedAxis=G}else nu(e,t,n,E,!0,!1);if(c(o.constrainedAxis)){let b=m.cross(o.direction,o.constrainedAxis,OD);m.equalsEpsilon(b,m.ZERO,w.EPSILON6)||(m.dot(b,o.right)<0&&m.negate(b,b),m.cross(b,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(I),e._globe=Z,e._ellipsoid=R;let F=R.maximumRadius;e._rotateFactor=1/F,e._rotateRateRangeAdjustment=F;let N=m.clone(o.positionWC,y8);if(e.enableCollisionDetection&&R8(e,!0),!m.equals(o.positionWC,N)){o._setTransform(V),o.worldToCameraCoordinatesPoint(N,N);let b=m.magnitudeSquared(N);m.magnitudeSquared(o.position)>b&&(m.normalize(o.position,o.position),m.multiplyByScalar(o.position,Math.sqrt(b),o.position));let G=m.angleBetween(N,o.position),X=m.cross(N,o.position,N);m.normalize(X,X);let W=Fe.fromAxisAngle(X,G,r0t),A=te.fromQuaternion(W,s0t);te.multiplyByVector(A,o.direction,o.direction),te.multiplyByVector(A,o.up,o.up),m.cross(o.direction,o.up,o.right),m.cross(o.right,o.direction,o.up),o._setTransform(I)}}var hTe=new D,pTe=new bn,bTe=new m;function d0t(e,t,n){c(n.distance)&&(n=n.distance);let i=e._scene,o=i.camera,r=i.canvas,s=e._cameraUnderground,a;s?a=t:(a=hTe,a.x=r.clientWidth/2,a.y=r.clientHeight/2);let l=o.getPickRay(a,pTe),d=l.origin,u=l.direction,f=o.position.z,p;f<e._minimumPickingTerrainHeight&&(p=T0(e,a,bTe));let y;if(c(p)&&(y=m.distance(d,p)),s){let h=aTe(e,l,f);c(y)?y=Math.min(y,h):y=h}if(!c(y)){let h=m.UNIT_X;y=-m.dot(h,d)/m.dot(h,u)}C8(e,t,n,e.zoomFactor,y)}function u0t(e){let n=e._scene.camera;if(!M.equals(M.IDENTITY,n.transform))bl(e,e.enableRotate,e.rotateEventTypes,nu,e.inertiaSpin,"_lastInertiaSpinMovement"),bl(e,e.enableZoom,e.zoomEventTypes,gTe,e.inertiaZoom,"_lastInertiaZoomMovement");else{let i=e._tweens;if(e._aggregator.anyButtonDown&&i.removeAll(),bl(e,e.enableTilt,e.tiltEventTypes,a0t,e.inertiaSpin,"_lastInertiaTiltMovement"),bl(e,e.enableTranslate,e.translateEventTypes,e0t,e.inertiaTranslate,"_lastInertiaTranslateMovement"),bl(e,e.enableZoom,e.zoomEventTypes,d0t,e.inertiaZoom,"_lastInertiaZoomMovement"),bl(e,e.enableLook,e.lookEventTypes,iu),!e._aggregator.anyButtonDown&&!i.contains(e._tween)){let o=n.createCorrectPositionTween(e.bounceAnimationTime);c(o)&&(e._tween=i.add(o))}i.update()}}var m0t=new bn,f0t=new cn(m.UNIT_X,0),h0t=new m,p0t=new m;function V8(e,t,n){let i=e._scene,o=i.camera,r=o.getPickRay(t.endPosition,m0t),s=m.clone(o.direction,p0t);i.mode===se.COLUMBUS_VIEW&&m.fromElements(s.z,s.x,s.y,s);let a=cn.fromPointNormal(n,s,f0t),l=qn.rayPlane(r,a,h0t);c(l)&&(s=m.subtract(n,l,s),i.mode===se.COLUMBUS_VIEW&&m.fromElements(s.y,s.z,s.x,s),m.add(o.position,s,o.position))}var $_e=new m,yTe=new pe,T8=new m,S8=new re,b0t=new m,y0t=new m,g0t=new m;function x0t(e,t,n){let o=e._scene.camera,r=e._cameraUnderground,s=e._ellipsoid;if(!M.equals(o.transform,M.IDENTITY)){nu(e,t,n);return}let a,l,d=s.geodeticSurfaceNormal(o.position,b0t);if(D.equals(t,e._rotateMousePosition)){if(e._looking)iu(e,t,n,d);else if(e._rotating)nu(e,t,n);else if(e._strafing)dTe(e,n);else{if(m.magnitude(o.position)<m.magnitude(e._rotateStartPosition))return;a=m.magnitude(e._rotateStartPosition),l=T8,l.x=l.y=l.z=a,s=re.fromCartesian3(l,S8),x8(e,t,n,s)}return}e._looking=!1,e._rotating=!1,e._strafing=!1;let u=s.cartesianToCartographic(o.positionWC,yTe).height,f=e._globe;if(c(f)&&u<e._minimumPickingTerrainHeight){let p=T0(e,n.startPosition,g0t);if(c(p)){let y=!1,h=o.getPickRay(n.startPosition,sTe);if(r)y=!0,lTe(e,h,p,p);else{let g=s.geodeticSurfaceNormal(p,y0t);Math.abs(m.dot(h.direction,g))<.05?y=!0:y=m.magnitude(o.position)<m.magnitude(p)}y?(D.clone(t,e._strafeEndMousePosition),m.clone(p,e._strafeStartPosition),e._strafing=!0,V8(e,n,e._strafeStartPosition)):(a=m.magnitude(p),l=T8,l.x=l.y=l.z=a,s=re.fromCartesian3(l,S8),x8(e,t,n,s),m.clone(p,e._rotateStartPosition))}else e._looking=!0,iu(e,t,n,d)}else c(o.pickEllipsoid(n.startPosition,e._ellipsoid,$_e))?(x8(e,t,n,e._ellipsoid),m.clone($_e,e._rotateStartPosition)):u>e._minimumTrackBallHeight?(e._rotating=!0,nu(e,t,n)):(e._looking=!0,iu(e,t,n,d));D.clone(t,e._rotateMousePosition)}function nu(e,t,n,i,o,r){o=o??!1,r=r??!1;let s=e._scene,a=s.camera,l=s.canvas,d=a.constrainedAxis;c(i)&&(a.constrainedAxis=i);let u=m.magnitude(a.position),f=e._rotateFactor*(u-e._rotateRateRangeAdjustment);f>e._maximumRotateRate&&(f=e._maximumRotateRate),f<e._minimumRotateRate&&(f=e._minimumRotateRate);let p=(n.startPosition.x-n.endPosition.x)/l.clientWidth,y=(n.startPosition.y-n.endPosition.y)/l.clientHeight;p=Math.min(p,e.maximumMovementRatio),y=Math.min(y,e.maximumMovementRatio);let h=f*p*Math.PI*2,g=f*y*Math.PI;if(c(i)&&c(e.maximumTiltAngle)){let x=e.maximumTiltAngle,S=m.dot(a.direction,i),V=Math.PI-Math.acos(S)+g;V>x&&(g-=V-x)}o||a.rotateRight(h),r||a.rotateUp(g),a.constrainedAxis=d}var g8=ce.clone(ce.UNIT_W),eTe=ce.clone(ce.UNIT_W),MD=new m,gL=new m,ND=new m,tTe=new m,_0t=new D,T0t=new D,S0t=new D,C0t=new D,V0t=new bn;function x8(e,t,n,i){let o=e._scene,r=o.camera,s=D.clone(n.startPosition,_0t),a=D.clone(n.endPosition,T0t),l=i.cartesianToCartographic(r.positionWC,yTe).height,d,u;if(!n.inertiaEnabled&&l<e._minimumPickingTerrainHeight&&(d=m.clone(e._panLastWorldPosition,g8),!c(e._globe)&&!D.equalsEpsilon(s,e._panLastMousePosition)&&(d=T0(e,s,g8)),!c(e._globe)&&c(d))){let f=m.subtract(d,r.positionWC,gL),p=m.multiplyByScalar(r.directionWC,m.dot(r.directionWC,f),gL),y=m.magnitude(p),h=r.frustum.getPixelDimensions(o.drawingBufferWidth,o.drawingBufferHeight,y,o.pixelRatio,C0t),g=D.subtract(a,s,S0t),x=m.multiplyByScalar(r.rightWC,g.x*h.x,gL),S=m.normalize(r.positionWC,rTe),V=r.getPickRay(a,V0t).direction,Z=m.subtract(V,m.projectVector(V,r.rightWC,ND),ND),R=m.angleBetween(Z,r.directionWC),E=1;c(r.frustum.fov)&&(E=Math.max(Math.tan(R),.1));let I=Math.abs(m.dot(r.directionWC,S)),v=-g.y*h.y*2/Math.sqrt(E)*(1-I),P=m.multiplyByScalar(V,v,ND);I=Math.abs(m.dot(r.upWC,S));let F=m.multiplyByScalar(r.upWC,-g.y*(1-I)*h.y,tTe);u=m.add(d,x,eTe),u=m.add(u,P,u),u=m.add(u,F,u),m.clone(u,e._panLastWorldPosition),D.clone(a,e._panLastMousePosition)}if((!c(d)||!c(u))&&(d=r.pickEllipsoid(s,i,g8),u=r.pickEllipsoid(a,i,eTe)),!c(d)||!c(u)){e._rotating=!0,nu(e,t,n);return}if(d=r.worldToCameraCoordinates(d,d),u=r.worldToCameraCoordinates(u,u),c(r.constrainedAxis)){let f=r.constrainedAxis,p=m.mostOrthogonalAxis(f,MD);m.cross(p,f,p),m.normalize(p,p);let y=m.cross(f,p,gL),h=m.magnitude(d),g=m.dot(f,d),x=Math.acos(g/h),S=m.multiplyByScalar(f,g,ND);m.subtract(d,S,S),m.normalize(S,S);let V=m.magnitude(u),Z=m.dot(f,u),R=Math.acos(Z/V),E=m.multiplyByScalar(f,Z,tTe);m.subtract(u,E,E),m.normalize(E,E);let I=Math.acos(m.dot(S,p));m.dot(S,y)<0&&(I=w.TWO_PI-I);let v=Math.acos(m.dot(E,p));m.dot(E,y)<0&&(v=w.TWO_PI-v);let P=I-v,F;m.equalsEpsilon(f,r.position,w.EPSILON2)?F=r.right:F=m.cross(f,r.position,MD);let N=m.cross(f,F,MD),b=m.dot(N,m.subtract(d,f,gL)),G=m.dot(N,m.subtract(u,f,gL)),X;b>0&&G>0?X=R-x:b>0&&G<=0?m.dot(r.position,f)>0?X=-x-R:X=x+R:X=x-R,r.rotateRight(P),r.rotateUp(X)}else{m.normalize(d,d),m.normalize(u,u);let f=m.dot(d,u),p=m.cross(d,u,MD);if(f<1&&!m.equalsEpsilon(p,m.ZERO,w.EPSILON14)){let y=Math.acos(f);r.rotate(p,y)}}}var L0t=new m,Z0t=new pe,nTe=0;function gTe(e,t,n){c(n.distance)&&(n=n.distance);let i=n.inertiaEnabled,o=e._ellipsoid,r=e._scene,s=r.camera,a=r.canvas,l=e._cameraUnderground,d;l?d=t:(d=hTe,d.x=a.clientWidth/2,d.y=a.clientHeight/2);let u=s.getPickRay(d,pTe),f,p=o.cartesianToCartographic(s.position,Z0t).height,y=Math.abs(nTe)<e.minimumPickingTerrainDistanceWithInertia;(i?y:p<e._minimumPickingTerrainHeight)&&(f=T0(e,d,bTe));let g;if(c(f)&&(g=m.distance(u.origin,f),nTe=g),l){let S=aTe(e,u,p);c(g)?g=Math.min(g,S):g=S}c(g)||(g=p);let x=m.normalize(s.position,L0t);C8(e,t,n,e.zoomFactor,g,m.dot(x,s.direction))}var xTe=new D,DD=new bn,vA=new m,R0t=new m,_Te=new M,G0t=new M,TTe=new M,E0t=new Fe,X0t=new te,L8=new pe,Z8=new m;function I0t(e,t,n){let o=e._scene.camera;if(!M.equals(o.transform,M.IDENTITY))return;if(c(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,Z8);iu(e,t,n,a);return}let s=e._ellipsoid.cartesianToCartographic(o.position,L8);e._tiltOnEllipsoid||s.height>e._minimumCollisionTerrainHeight?(e._tiltOnEllipsoid=!0,w0t(e,t,n)):P0t(e,t,n)}var W0t=new pe;function w0t(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e.minimumZoomDistance*.25,a=i.cartesianToCartographic(r.positionWC,W0t).height;if(a-s-1<w.EPSILON3&&n.endPosition.y-n.startPosition.y<0)return;let l=o.canvas,d=xTe;d.x=l.clientWidth/2,d.y=l.clientHeight/2;let u=r.getPickRay(d,DD),f,p=qn.rayEllipsoid(u,i);if(c(p))f=bn.getPoint(u,p.start,vA);else if(a>e._minimumTrackBallHeight){let V=qn.grazingAltitudeLocation(u,i);if(!c(V))return;let Z=i.cartesianToCartographic(V,L8);Z.height=0,f=i.cartographicToCartesian(Z,vA)}else{e._looking=!0;let V=e._ellipsoid.geodeticSurfaceNormal(r.position,Z8);iu(e,t,n,V),D.clone(t,e._tiltCenterMousePosition);return}let y=wt.eastNorthUpToFixedFrame(f,i,_Te),h=e._globe,g=e._ellipsoid;e._globe=void 0,e._ellipsoid=re.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let x=M.clone(r.transform,TTe);r._setTransform(y),nu(e,t,n,m.UNIT_Z),r._setTransform(x),e._globe=h,e._ellipsoid=g;let S=g.maximumRadius;e._rotateFactor=1/S,e._rotateRateRangeAdjustment=S}function P0t(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e._cameraUnderground,a,l,d;if(D.equals(t,e._tiltCenterMousePosition))a=m.clone(e._tiltCenter,vA);else{if(a=T0(e,t,vA),!c(a)){if(l=r.getPickRay(t,DD),d=qn.rayEllipsoid(l,i),!c(d)){if(i.cartesianToCartographic(r.position,L8).height<=e._minimumTrackBallHeight){e._looking=!0;let G=e._ellipsoid.geodeticSurfaceNormal(r.position,Z8);iu(e,t,n,G),D.clone(t,e._tiltCenterMousePosition)}return}a=bn.getPoint(l,d.start,vA)}s&&(c(l)||(l=r.getPickRay(t,DD)),cTe(e,l,a,a)),D.clone(t,e._tiltCenterMousePosition),m.clone(a,e._tiltCenter)}let u=o.canvas,f=xTe;f.x=u.clientWidth/2,f.y=e._tiltCenterMousePosition.y,l=r.getPickRay(f,DD);let p=m.magnitude(a),y=m.fromElements(p,p,p,T8),h=re.fromCartesian3(y,S8);if(d=qn.rayEllipsoid(l,h),!c(d))return;let g=m.magnitude(l.origin)>p?d.start:d.stop,x=bn.getPoint(l,g,R0t),S=wt.eastNorthUpToFixedFrame(a,i,_Te),V=wt.eastNorthUpToFixedFrame(x,h,G0t),Z=e._globe,R=e._ellipsoid;e._globe=void 0,e._ellipsoid=re.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let E=m.UNIT_Z,I=M.clone(r.transform,TTe);r._setTransform(V);let v=m.cross(x,r.positionWC,OD);if(m.dot(r.rightWC,v)<0){let b=n.startPosition.y-n.endPosition.y;(s&&b<0||!s&&b>0)&&(E=void 0);let G=r.constrainedAxis;r.constrainedAxis=void 0,nu(e,t,n,E,!0,!1),r.constrainedAxis=G}else nu(e,t,n,E,!0,!1);if(r._setTransform(S),nu(e,t,n,E,!1,!0),c(r.constrainedAxis)){let b=m.cross(r.direction,r.constrainedAxis,OD);m.equalsEpsilon(b,m.ZERO,w.EPSILON6)||(m.dot(b,r.right)<0&&m.negate(b,b),m.cross(b,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(I),e._globe=Z,e._ellipsoid=R;let F=R.maximumRadius;e._rotateFactor=1/F,e._rotateRateRangeAdjustment=F;let N=m.clone(r.positionWC,OD);if(e.enableCollisionDetection&&R8(e,!0),!m.equals(r.positionWC,N)){r._setTransform(V),r.worldToCameraCoordinatesPoint(N,N);let b=m.magnitudeSquared(N);m.magnitudeSquared(r.position)>b&&(m.normalize(r.position,r.position),m.multiplyByScalar(r.position,Math.sqrt(b),r.position));let G=m.angleBetween(N,r.position),X=m.cross(N,r.position,N);m.normalize(X,X);let W=Fe.fromAxisAngle(X,G,E0t),A=te.fromQuaternion(W,X0t);te.multiplyByVector(A,r.direction,r.direction),te.multiplyByVector(A,r.up,r.up),m.cross(r.direction,r.up,r.right),m.cross(r.right,r.direction,r.up),r._setTransform(I)}}var v0t=new D,F0t=new D,iTe=new bn,oTe=new bn,A0t=new m,M0t=new m;function iu(e,t,n,i){let r=e._scene.camera,s=v0t;s.x=n.startPosition.x,s.y=0;let a=F0t;a.x=n.endPosition.x,a.y=0;let l=r.getPickRay(s,iTe),d=r.getPickRay(a,oTe),u=0,f,p;r.frustum instanceof sn?(f=l.origin,p=d.origin,m.add(r.direction,f,f),m.add(r.direction,p,p),m.subtract(f,r.position,f),m.subtract(p,r.position,p),m.normalize(f,f),m.normalize(p,p)):(f=l.direction,p=d.direction);let y=m.dot(f,p);y<1&&(u=Math.acos(y)),u=n.startPosition.x>n.endPosition.x?-u:u;let h=e._horizontalRotationAxis;if(c(i)?r.look(i,-u):c(h)?r.look(h,-u):r.lookLeft(u),s.x=0,s.y=n.startPosition.y,a.x=0,a.y=n.endPosition.y,l=r.getPickRay(s,iTe),d=r.getPickRay(a,oTe),u=0,r.frustum instanceof sn?(f=l.origin,p=d.origin,m.add(r.direction,f,f),m.add(r.direction,p,p),m.subtract(f,r.position,f),m.subtract(p,r.position,p),m.normalize(f,f),m.normalize(p,p)):(f=l.direction,p=d.direction),y=m.dot(f,p),y<1&&(u=Math.acos(y)),u=n.startPosition.y>n.endPosition.y?-u:u,i=i??h,c(i)){let g=r.direction,x=m.negate(i,A0t),S=m.equalsEpsilon(g,i,w.EPSILON2),V=m.equalsEpsilon(g,x,w.EPSILON2);if(!S&&!V){y=m.dot(g,i);let Z=w.acosClamped(y);u>0&&u>Z&&(u=Z-w.EPSILON4),y=m.dot(g,x),Z=w.acosClamped(y),u<0&&-u>Z&&(u=-Z+w.EPSILON4);let R=m.cross(i,g,M0t);r.look(R,u)}else(S&&u<0||V&&u>0)&&r.look(r.right,-u)}else r.lookUp(u)}function N0t(e){bl(e,e.enableRotate,e.rotateEventTypes,x0t,e.inertiaSpin,"_lastInertiaSpinMovement"),bl(e,e.enableZoom,e.zoomEventTypes,gTe,e.inertiaZoom,"_lastInertiaZoomMovement"),bl(e,e.enableTilt,e.tiltEventTypes,I0t,e.inertiaSpin,"_lastInertiaTiltMovement"),bl(e,e.enableLook,e.lookEventTypes,iu)}var k0t=new M,U0t=new pe;function R8(e,t){e._adjustedHeightForTerrain=!0;let n=e._scene,i=n.mode;if(i===se.SCENE2D||i===se.MORPHING)return;let o=n.camera,r=n.ellipsoid??re.WGS84,s=n.mapProjection,a,l;M.equals(o.transform,M.IDENTITY)||(a=M.clone(o.transform,k0t),l=m.magnitude(o.position),o._setTransform(M.IDENTITY));let d=U0t;i===se.SCENE3D?r.cartesianToCartographic(o.position,d):s.unproject(o.position,d);let u=!1;if(d.height<e._minimumCollisionTerrainHeight){let f=e._scene.globeHeight;if(c(f)){let p=f+e.minimumZoomDistance,y=f-e._lastGlobeHeight,h=y/e._lastGlobeHeight;d.height<p&&(t||Math.abs(h)<=.1)&&(d.height=p,i===se.SCENE3D?r.cartographicToCartesian(d,o.position):s.project(d,o.position),u=!0),t||Math.abs(h)<=.1?e._lastGlobeHeight=f:e._lastGlobeHeight+=y*.1}}c(a)&&(o._setTransform(a),u&&(m.normalize(o.position,o.position),m.negate(o.position,o.direction),m.multiplyByScalar(o.position,Math.max(l,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)))}FA.prototype.onMap=function(){let e=this._scene,t=e.mode,n=e.camera;return t===se.COLUMBUS_VIEW?Math.abs(n.position.x)-this._maxCoord.x<0&&Math.abs(n.position.y)-this._maxCoord.y<0:!0};var O0t=new m,D0t=new m;FA.prototype.update=function(){let e=this._scene,{camera:t,globe:n,mode:i}=e;M.equals(t.transform,M.IDENTITY)?(this._globe=n,this._ellipsoid=e.ellipsoid??re.default):(this._globe=void 0,this._ellipsoid=re.UNIT_SPHERE);let{verticalExaggeration:o,verticalExaggerationRelativeHeight:r}=e;this._minimumCollisionTerrainHeight=Lr.getHeight(this.minimumCollisionTerrainHeight,o,r),this._minimumPickingTerrainHeight=Lr.getHeight(this.minimumPickingTerrainHeight,o,r),this._minimumTrackBallHeight=Lr.getHeight(this.minimumTrackBallHeight,o,r),this._cameraUnderground=e.cameraUnderground&&c(this._globe);let s=this._ellipsoid.maximumRadius;this._rotateFactor=1/s,this._rotateRateRangeAdjustment=s,this._adjustedHeightForTerrain=!1;let a=m.clone(t.positionWC,O0t),l=m.clone(t.directionWC,D0t);if(i===se.SCENE2D?Ubt(this):i===se.COLUMBUS_VIEW?(this._horizontalRotationAxis=m.UNIT_Z,u0t(this)):i===se.SCENE3D&&(this._horizontalRotationAxis=void 0,N0t(this)),this.enableCollisionDetection&&!this._adjustedHeightForTerrain){let d=!m.equals(a,t.positionWC)||!m.equals(l,t.directionWC);R8(this,d)}this._aggregator.reset()};FA.prototype.isDestroyed=function(){return!1};FA.prototype.destroy=function(){return this._tweens.removeAll(),this._aggregator=this._aggregator&&this._aggregator.destroy(),he(this)};var AA=FA;var UKi=_(T(),1);var _Ki=_(T(),1),MA=`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 SKi=_(T(),1),NA=`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; } 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 S0(){this._sceneFramebuffer=new BT;let e=.125,t=new Array(6);t[0]=new mo({fragmentShader:td,textureScale:e,forcePowerOfTwo:!0,sampleMode:qd.LINEAR});let n=t[1]=new mo({fragmentShader:NA,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 mo({fragmentShader:vg,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 mo({fragmentShader:vg,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 mo({fragmentShader:td,sampleMode:qd.LINEAR}),this._uCenter=new D,this._uRadius=void 0,t[5]=new mo({fragmentShader:MA,uniforms:{center:function(){return i._uCenter},radius:function(){return i._uRadius},colorTexture2:function(){return i._sceneFramebuffer.framebuffer.getColorTexture(0)}}}),this._stages=new nd({stages:t});let o=new jT(this),r=t.length;for(let s=0;s<r;++s)t[s]._textureCache=o;this._textureCache=o,this.length=t.length}S0.prototype.get=function(e){return this._stages.get(e)};S0.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 B0t=new ce,STe=new D,Y0t=new D,CTe=new M;function H0t(e,t,n){let i=t.uniformState,o=i.sunPositionWC,r=i.view,s=i.viewProjection,a=i.projection,l=M.computeViewportTransformation(n,0,1,CTe),d=M.multiplyByPoint(r,o,B0t),u=wt.pointToGLWindowCoordinates(s,l,o,STe);d.x+=w.SOLAR_RADIUS;let f=wt.pointToGLWindowCoordinates(a,l,d,d),p=D.magnitude(D.subtract(f,u,f))*30*2,y=Y0t;y.x=p,y.y=p,e._uCenter=D.clone(u,e._uCenter),e._uRadius=Math.max(y.x,y.y)*.15;let h=t.drawingBufferWidth,g=t.drawingBufferHeight,x=e._stages,S=x.get(0),V=S.outputTexture.width,Z=S.outputTexture.height,R=new je;R.width=V,R.height=Z,l=M.computeViewportTransformation(R,0,1,CTe),u=wt.pointToGLWindowCoordinates(s,l,o,STe),y.x*=V/h,y.y*=Z/g;let E=S.scissorRectangle;E.x=Math.max(u.x-y.x*.5,0),E.y=Math.max(u.y-y.y*.5,0),E.width=Math.min(y.x,h),E.height=Math.min(y.y,g);for(let I=1;I<4;++I)je.clone(E,x.get(I).scissorRectangle)}S0.prototype.clear=function(e,t,n){this._sceneFramebuffer.clear(e,t,n),this._textureCache.clear(e)};S0.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),H0t(this,t,n),o};S0.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)};S0.prototype.copy=function(e,t){if(!c(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(td,{uniformMap:{colorTexture:function(){return n._stages.get(n._stages.length-1).outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};S0.prototype.isDestroyed=function(){return!1};S0.prototype.destroy=function(){return this._textureCache.destroy(),this._stages.destroy(),he(this)};var kA=S0;var KKi=_(T(),1);function VTe(){this._cachedShowFrustumsShaders={}}function z0t(e){let t={},n=e.vertexAttributes;for(let i in n)n.hasOwnProperty(i)&&(t[i]=n[i].index);return t}function K0t(e,t){let n=e.context,i=t,o=i.fragmentShaderSource.clone(),r=[];o.sources=o.sources.map(function(u){u=Be.replaceMain(u,"czm_Debug_main");let f=/out_FragData_(\d+)/g,p;for(;(p=f.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 l;if(s>0)for(l=0;l<s;++l)a+=` out_FragData_${r[l]}.rgb *= debugShowCommandsColor; `,a+=` out_FragData_${r[l]}.rgb *= debugShowFrustumsColor; `;else a+=` out_FragColor.rgb *= debugShowCommandsColor; `,a+=` out_FragColor.rgb *= debugShowFrustumsColor; `;a+="}",o.sources.push(a);let d=z0t(i);return tn.fromCache({context:n,vertexShaderSource:i.vertexShaderSource,fragmentShaderSource:o,attributeLocations:d})}var UA=new Y;function J0t(e,t){let n;return c(t.uniformMap)?n=t.uniformMap:n={},c(n.debugShowCommandsColor)||c(n.debugShowFrustumsColor)||(n.debugShowCommandsColor=function(){return e.debugShowCommands?(c(t._debugColor)||(t._debugColor=Y.fromRandom()),t._debugColor):Y.WHITE},n.debugShowFrustumsColor=function(){return e.debugShowFrustums?(UA.red=t.debugOverlappingFrustums&1?1:0,UA.green=t.debugOverlappingFrustums&2?1:0,UA.blue=t.debugOverlappingFrustums&4?1:0,UA.alpha=1,UA):Y.WHITE}),n}var Q0t=new et;VTe.prototype.executeDebugShowFrustumsCommand=function(e,t,n){let i=t.shaderProgram.id,o=this._cachedShowFrustumsShaders[i];c(o)||(o=K0t(e,t.shaderProgram),this._cachedShowFrustumsShaders[i]=o);let r=et.shallowClone(t,Q0t);r.shaderProgram=o,r.uniformMap=J0t(e,t),r.execute(e.context,n)};var OA=VTe;var tJi=_(T(),1);function iS(e,t,n){this._primitive=e,this._tileIndex=t,this._sampleIndex=n,this._metadata={},this._orientedBoundingBox=new Xn}iS.fromKeyframeNode=function(e,t,n,i){C.typeOf.object("primitive",e),C.typeOf.number("tileIndex",t),C.typeOf.number("sampleIndex",n),C.typeOf.object("keyframeNode",i);let o=new iS(e,t,n),{spatialNode:r,content:s}=i;return o._metadata=j0t(e,s,n),o._orientedBoundingBox=$0t(e,r,n,o._orientedBoundingBox),o};function j0t(e,t,n){if(!c(t)||!c(t.metadata))return;let{names:i,types:o}=e.provider,{metadata:r}=t,s={};for(let a=0;a<i.length;a++){let l=i[a],d=lt.getComponentCount(o[a]),u=r[a].slice(n*d,(n+1)*d);s[l]=u}return s}var LTe=new m,q0t=new m;function $0t(e,t,n,i){let o=t.dimensions,r=o.x*o.y,s=Math.floor(n/r),a=n-s*r,l=Math.floor(a/o.x),d=a-l*o.x,u=m.fromElements(d,l,s,LTe),f=m.divideComponents(m.subtract(u,e._paddingBefore,LTe),e.dimensions,q0t);return e._shape.computeOrientedBoundingBoxForSample(t,e.dimensions,f,i)}Object.defineProperties(iS.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()}}});iS.prototype.hasProperty=function(e){return c(this._metadata[e])};iS.prototype.getNames=function(){return Object.keys(this._metadata)};iS.prototype.getProperty=function(e){return this._metadata[e]};var DA=iS;var V8i=_(T(),1);var CQi=_(T(),1);var rQi=_(T(),1);var iJi=_(T(),1),BA=`struct Ray { vec3 pos; vec3 dir; vec3 rawDir; }; #if defined(JITTER) 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 rJi=_(T(),1),YA=`#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 mat3 u_transformDirectionViewToLocal; uniform vec3 u_cameraPositionUv; 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) RayShapeIntersection getVoxelIntersection(in vec3 tileUv, in vec3 sampleSizeAlongRay) { vec3 voxelCoord = tileUv * vec3(u_dimensions); vec3 directions = sign(sampleSizeAlongRay); vec3 positiveDirections = max(directions, 0.0); vec3 entryCoord = mix(ceil(voxelCoord), floor(voxelCoord), positiveDirections); vec3 exitCoord = entryCoord + directions; vec3 distanceFromEntry = -abs((entryCoord - voxelCoord) * sampleSizeAlongRay); float lastEntry = maxComponent(distanceFromEntry); bvec3 isLastEntry = equal(distanceFromEntry, vec3(lastEntry)); vec3 entryNormal = -1.0 * vec3(isLastEntry) * directions; vec4 entry = vec4(entryNormal, lastEntry); vec3 distanceToExit = abs((exitCoord - voxelCoord) * sampleSizeAlongRay); float firstExit = minComponent(distanceToExit); bvec3 isFirstExit = equal(distanceToExit, vec3(firstExit)); vec3 exitNormal = vec3(isFirstExit) * directions; vec4 exit = vec4(exitNormal, firstExit); return RayShapeIntersection(entry, exit); } vec4 getStepSize(in SampleData sampleData, in Ray viewRay, in RayShapeIntersection shapeIntersection, in mat3 jacobianT, in float currentT) { vec3 gradient = 2.0 * viewRay.rawDir * jacobianT; vec3 sampleSizeAlongRay = getSampleSize(sampleData.tileCoords.w) / gradient; RayShapeIntersection voxelIntersection = getVoxelIntersection(sampleData.tileUv, sampleSizeAlongRay); vec3 voxelNormal = normalize(jacobianT * voxelIntersection.entry.xyz); 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) { 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) { vec3 maxCoordinate = vec3(u_inputDimensions) - vec3(0.5); vec3 inputCoordinate = clamp(sampleData.inputCoordinate, vec3(0.0), maxCoordinate); ivec3 sampleIndex = ivec3(floor(inputCoordinate)); return sampleIndex.x + u_inputDimensions.x * (sampleIndex.y + u_inputDimensions.y * sampleIndex.z); } void main() { vec4 fragCoord = gl_FragCoord; vec2 screenCoord = (fragCoord.xy - czm_viewport.xy) / czm_viewport.zw; vec3 eyeDirection = normalize(czm_windowToEyeCoordinates(fragCoord).xyz); vec3 viewDirWorld = normalize(czm_inverseViewRotation * eyeDirection); vec3 viewDirUv = normalize(u_transformDirectionViewToLocal * eyeDirection); vec3 viewPosUv = u_cameraPositionUv; #if defined(SHAPE_ELLIPSOID) vec3 rawDir = viewDirUv * u_ellipsoidRadiiUv; Ray viewRayUv = Ray(viewPosUv, viewDirUv, rawDir); #else Ray viewRayUv = Ray(viewPosUv, viewDirUv, viewDirUv); #endif Intersections ix; RayShapeIntersection shapeIntersection = intersectScene(screenCoord, viewRayUv, ix); if (shapeIntersection.entry.w == NO_HIT) { discard; } float currentT = shapeIntersection.entry.w; float endT = shapeIntersection.exit.w; vec3 positionUv = viewPosUv + currentT * viewDirUv; PointJacobianT pointJacobian = convertUvToShapeUvSpaceDerivative(positionUv); 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); currentT += noise * step.w; positionUv += noise * step.w * viewDirUv; #endif FragmentInput fragmentInput; #if defined(STATISTICS) setStatistics(fragmentInput.metadata.statistics); #endif vec4 colorAccum = vec4(0.0); for (int stepCount = 0; stepCount < STEP_COUNT_MAX; ++stepCount) { Properties properties = accumulatePropertiesFromMegatexture(sampleDatas); copyPropertiesToMetadata(properties, fragmentInput.metadata); fragmentInput.voxel.positionUv = positionUv; fragmentInput.voxel.positionShapeUv = pointJacobian.point; fragmentInput.voxel.positionUvLocal = sampleDatas[0].tileUv; fragmentInput.voxel.viewDirUv = viewDirUv; fragmentInput.voxel.viewDirWorld = viewDirWorld; fragmentInput.voxel.surfaceNormal = step.xyz; fragmentInput.voxel.travelDistance = step.w; fragmentInput.voxel.stepCount = stepCount; fragmentInput.voxel.tileIndex = sampleDatas[0].megatextureIndex; fragmentInput.voxel.sampleIndex = getSampleIndex(sampleDatas[0]); czm_modelMaterial materialOutput; fragmentMain(fragmentInput, materialOutput); vec4 color = vec4(materialOutput.diffuse, materialOutput.alpha); color.rgb = max(color.rgb, vec3(0.0)); color.a = clamp(color.a, 0.0, 1.0); colorAccum += (1.0 - colorAccum.a) * vec4(color.rgb * color.a, color.a); if (colorAccum.a > ALPHA_ACCUM_MAX) { colorAccum.a = ALPHA_ACCUM_MAX; break; } if (step.w == 0.0) { step.w == 0.00001; } currentT += step.w; positionUv = viewPosUv + currentT * viewDirUv; if (currentT > endT) { #if (INTERSECTION_COUNT == 1) break; #else shapeIntersection = nextIntersection(ix); if (shapeIntersection.entry.w == NO_HIT) { break; } else { currentT = shapeIntersection.entry.w; endT = shapeIntersection.exit.w; positionUv = viewPosUv + currentT * viewDirUv; } #endif } pointJacobian = convertUvToShapeUvSpaceDerivative(positionUv); traverseOctreeFromExisting(pointJacobian.point, traversalData, sampleDatas); step = getStepSize(sampleDatas[0], viewRayUv, shapeIntersection, pointJacobian.jacobianT, currentT); } colorAccum.a /= ALPHA_ACCUM_MAX; #if defined(PICKING) if (colorAccum.a == 0.0) { discard; } out_FragColor = u_pickColor; #elif defined(PICKING_VOXEL) 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 aJi=_(T(),1),HA=`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 lJi=_(T(),1),zA=`#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 { vec4 intersections[INTERSECTION_COUNT * 2]; #if (INTERSECTION_COUNT > 1) 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); } #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) { const int sortPasses = INTERSECTION_COUNT * 2 - 1; for (int n = sortPasses; n > 0; --n) { for (int i = 0; i < sortPasses; ++i) { 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; } } 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) { 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; if (ix.surroundCount == 1 && ix.surroundIsPositive && enter == currShapeIsPositive) { shapeIntersection.entry = surfaceIntersection; } bool exitPositive = !enter && currShapeIsPositive && ix.surroundCount == 0; bool enterNegativeFromPositive = enter && !currShapeIsPositive && ix.surroundCount == 2 && ix.surroundIsPositive; if (exitPositive || enterNegativeFromPositive) { shapeIntersection.exit = surfaceIntersection; if (exitPositive) { ix.index = passCount; } break; } } return shapeIntersection; } #endif `;var uJi=_(T(),1),KA=`uniform mat4 u_transformPositionViewToUv; void intersectDepth(in vec2 screenCoord, in Ray ray, inout Intersections ix) { float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, screenCoord)); if (logDepthOrDepth != 0.0) { vec4 eyeCoordinateDepth = czm_screenToEyeCoordinates(screenCoord, logDepthOrDepth); eyeCoordinateDepth /= eyeCoordinateDepth.w; vec3 depthPositionUv = vec3(u_transformPositionViewToUv * eyeCoordinateDepth); float t = dot(depthPositionUv - ray.pos, ray.dir); setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(t, +INF_HIT)); } else { setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(NO_HIT)); } } `;var fJi=_(T(),1),JA=`uniform sampler2D u_clippingPlanesTexture; uniform mat4 u_clippingPlanesMatrix; vec4 intersectPlane(in Ray ray, in vec4 plane) { vec3 n = plane.xyz; float w = plane.w; 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) 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 pJi=_(T(),1),xL=`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) { vec4 intersect1 = intersectLongitude(ray, minMaxAngle.x, false); vec4 intersect2 = intersectLongitude(ray, minMaxAngle.y, true); 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) { return RayShapeIntersection(first, last); } else if (!exitFromInside && enterFromOutside) { return RayShapeIntersection(-1.0 * farSide, first); } else if (exitFromInside && !enterFromOutside) { return RayShapeIntersection(last, farSide); } else { return RayShapeIntersection(miss, miss); } } `;var yJi=_(T(),1),QA=`uniform vec3 u_renderMinBounds; uniform vec3 u_renderMaxBounds; RayShapeIntersection intersectBox(in Ray ray, in vec3 minBound, in vec3 maxBound) { vec3 t0 = (minBound - ray.pos) / ray.dir; vec3 t1 = (maxBound - ray.pos) / ray.dir; vec3 entries = min(t0, t1); vec3 exits = max(t0, t1); vec3 directions = sign(ray.dir); 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 xJi=_(T(),1),jA=`uniform vec2 u_cylinderRenderRadiusMinMax; uniform vec2 u_cylinderRenderHeightMinMax; #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE) uniform vec2 u_cylinderRenderAngleMinMax; #endif 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; 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); } 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); } 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) { 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) RayShapeIntersection innerIntersect = intersectCylinder(ray, 1.0, false); setSurfaceIntersection(ix, 0, outerIntersect.entry, true, true); setSurfaceIntersection(ix, 1, innerIntersect.entry, false, true); setSurfaceIntersection(ix, 2, innerIntersect.exit, false, false); setSurfaceIntersection(ix, 3, outerIntersect.exit, true, false); #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 TJi=_(T(),1),qA=`#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) { vec3 radiiCorrection = u_ellipsoidRadiiUv / (u_ellipsoidRadiiUv + relativeHeight); vec3 position = ray.pos * radiiCorrection; vec3 direction = ray.dir * radiiCorrection; float a = dot(direction, direction); float b = dot(direction, position); float c = dot(position, position) - 1.0; float determinant = b * b - a * c; if (determinant < 0.0) { vec4 miss = vec4(normalize(direction), NO_HIT); return RayShapeIntersection(miss, miss); } determinant = sqrt(determinant); float signB = b < 0.0 ? -1.0 : 1.0; 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)); } 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; 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) { return (b == 0.0) ? vec2(NO_HIT) : vec2(-0.5 * c / b, NO_HIT); } determinant = sqrt(determinant); float signB = b < 0.0 ? -1.0 : 1.0; float t1 = (-b - signB * determinant) / a; float t2 = c / (a * t1); float tmin = min(t1, t2); float tmax = max(t1, t2); return vec2(tmin, tmax); } vec3 getConeNormal(in vec3 p, in bool convex) { vec2 radial = -abs(p.z) * normalize(p.xy); float zSign = (p.z < 0.0) ? -1.0 : 1.0; float z = length(p.xy) * zSign; float flip = (convex) ? -1.0 : 1.0; return normalize(vec3(radial, z) * flip); } float getLatitudeConeShift(in float sinLatitude) { float x2 = u_eccentricitySquared * sinLatitude * sinLatitude; float primeVerticalRadius = inversesqrt(1.0 - x2); return primeVerticalRadius * u_eccentricitySquared * sinLatitude; } void intersectFlippedCone(in Ray ray, in float cosHalfAngle, out RayShapeIntersection intersections[2]) { ray.pos = ray.pos * u_ellipsoidRadiiUv; ray.dir = ray.dir * u_ellipsoidRadiiUv; 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); intersections[0].entry = -1.0 * farSide; intersections[0].exit = farSide; intersections[1].entry = miss; intersections[1].exit = miss; if (intersect.x == NO_HIT) { return; } 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) { } 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) { ray.pos = ray.pos * u_ellipsoidRadiiUv; ray.dir = ray.dir * u_ellipsoidRadiiUv; 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); } 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) { ray.pos = ray.pos * 2.0 - 1.0; ray.dir *= 2.0; RayShapeIntersection outerIntersect = intersectHeight(ray, u_clipMinMaxHeight.y, true); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX, outerIntersect); if (outerIntersect.entry.w == NO_HIT) { return; } RayShapeIntersection innerIntersect = intersectHeight(ray, u_clipMinMaxHeight.x, false); if (innerIntersect.entry.w == NO_HIT) { setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN, innerIntersect); } else { 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); setSurfaceIntersection(ix, 1, innerIntersect.entry, false, true); setSurfaceIntersection(ix, 2, innerIntersect.exit, false, false); setSurfaceIntersection(ix, 3, outerIntersect.exit, true, false); } #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 #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 #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 CJi=_(T(),1),oS=`RayShapeIntersection intersectScene(in vec2 screenCoord, in Ray ray, out Intersections ix) { intersectShape(ray, ix); RayShapeIntersection intersection = getFirstIntersection(ix); if (intersection.entry.w == NO_HIT) { return intersection; } #if defined(CLIPPING_PLANES) intersectClippingPlanes(ray, ix); #endif #if defined(DEPTH_TEST) intersectDepth(screenCoord, ray, ix); #endif #if (INTERSECTION_COUNT > 1) initializeIntersections(ix); for (int i = 0; i < INTERSECTION_COUNT; ++i) { intersection = nextIntersection(ix); if (intersection.exit.w > 0.0) { intersection.entry.w = max(intersection.entry.w, 0.0); break; } } #else intersection.entry.w = max(intersection.entry.w, 0.0); #endif return intersection; } `;var LJi=_(T(),1),$A=`#if defined(BOX_HAS_SHAPE_BOUNDS) uniform vec3 u_boxUvToShapeUvScale; uniform vec3 u_boxUvToShapeUvTranslate; #endif PointJacobianT convertUvToShapeSpaceDerivative(in vec3 positionUv) { 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 RJi=_(T(),1),e9=`#if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS) uniform vec2 u_cylinderUvToShapeUvRadius; #endif #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT) uniform vec2 u_cylinderUvToShapeUvHeight; #endif #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE) uniform vec2 u_cylinderUvToShapeUvAngle; #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) { vec3 position = positionUv * 2.0 - 1.0; float radius = length(position.xy); vec3 radial = normalize(vec3(position.xy, 0.0)); float height = positionUv.z; 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, z, east / length(position.xy)); 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) angle += float(angle < u_cylinderShapeUvAngleRangeZeroMid); #endif #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 EJi=_(T(),1),t9=`uniform vec3 u_ellipsoidRadiiUv; uniform vec2 u_evoluteScale; 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; #endif #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE) uniform vec2 u_ellipsoidUvToShapeUvLatitude; #endif uniform float u_ellipsoidInverseHeightDifferenceUv; vec3 nearestPointAndRadiusOnEllipse(vec2 pos, vec2 radii) { vec2 p = abs(pos); vec2 inverseRadii = 1.0 / radii; vec2 tTrigs = vec2(0.7071067811865476); vec2 v = radii * tTrigs; vec2 evolute = u_evoluteScale * tTrigs * tTrigs * tTrigs; const int iterations = 3; for (int i = 0; i < iterations; ++i) { vec2 q = normalize(p - evolute) * length(v - evolute); 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) { vec3 position = positionUv * 2.0 - 1.0; position = position * u_ellipsoidRadiiUv; float longitude = atan(position.y, position.x); vec3 east = normalize(vec3(-position.y, position.x, 0.0)); 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) { float longitude = (positionShape.x + czm_pi) / czm_twoPi; #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED) longitude += float(longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z); #endif #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 float latitude = (positionShape.y + czm_piOverTwo) / czm_pi; #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE) latitude = latitude * u_ellipsoidUvToShapeUvLatitude.x + u_ellipsoidUvToShapeUvLatitude.y; #endif 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) { float longitude = shapeUv.x * czm_twoPi; #if defined (ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE) longitude /= u_ellipsoidUvToShapeUvLongitude.x; #endif 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 IJi=_(T(),1),n9=`#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; uniform ivec3 u_inputDimensions; #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 }; 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; } vec3 getTileUv(in vec3 shapePosition, in ivec4 octreeCoords) { 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)) 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; float leafCoordXStart = float(intMod(leafIndex, u_octreeLeafNodeTilesPerRow) * leafNodeTexelCount) + 0.5; float leafCoordY = float(leafIndex / u_octreeLeafNodeTilesPerRow) + 0.5; 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; 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; 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) { vec3 center = 0.5 * (start + end); vec3 childCoord = step(center, shapePosition); 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) { break; } start = mix(start, center, childCoord); end = mix(center, end, childCoord); traversalData.parentOctreeIndex = childData.data; } return childData; } 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)); 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; } 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); } 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 wJi=_(T(),1),i9=`uniform ivec2 u_megatextureSliceDimensions; uniform ivec2 u_megatextureTileDimensions; uniform vec2 u_megatextureVoxelSizeUv; uniform vec2 u_megatextureSliceSizeUv; uniform vec2 u_megatextureTileSizeUv; 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; } Properties getPropertiesFromMegatexture(in SampleData sampleData) { int tileIndex = sampleData.megatextureIndex; vec3 voxelCoord = sampleData.inputCoordinate; #if defined(NEAREST_SAMPLING) voxelCoord = floor(voxelCoord) + vec3(0.5); #endif vec2 tileUvOffset = index1DTo2DTexcoord(tileIndex, u_megatextureTileDimensions, u_megatextureTileSizeUv); 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); vec2 voxelUvOffset = clamp(voxelCoord.xy, vec2(0.5), vec2(u_inputDimensions.xy) - vec2(0.5)) * u_megatextureVoxelSizeUv; 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 } Properties accumulatePropertiesFromMegatexture(in SampleData sampleDatas[SAMPLE_COUNT]) { #if (SAMPLE_COUNT == 1) return getPropertiesFromMegatexture(sampleDatas[0]); #else Properties properties = clearProperties(); for (int i = 0; i < SAMPLE_COUNT; ++i) { float weight = sampleDatas[i].weight; if (weight > 0.0) { Properties tempProperties = getPropertiesFromMegatexture(sampleDatas[i]); tempProperties = scaleProperties(tempProperties, weight); properties = sumProperties(properties, tempProperties); } } return properties; #endif } `;var vJi=_(T(),1),eyt={Z_UP:0,Y_UP:1},gm=Object.freeze(eyt);function tyt(e){let t=new Lx;this.shaderBuilder=t;let n=e._customShader,i=St(e._uniformMap,n.uniformMap);e._uniformMap=i;let o=n.uniforms;for(let p in o)if(o.hasOwnProperty(p)){let y=o[p];t.addUniform(y.type,p,xe.FRAGMENT)}t.addUniform("sampler2D","u_megatextureTextures[METADATA_COUNT]",xe.FRAGMENT),this.uniformMap=i;let r=e._clippingPlanes,s=c(r)&&r.enabled?r.length:0;this.clippingPlanes=r,this.clippingPlanesLength=s,t.addVertexLines([HA]),e.provider.metadataOrder===gm.Y_UP&&t.addDefine("Y_UP_METADATA_ORDER",void 0,xe.FRAGMENT);let a=e._provider.shape;a==="BOX"?t.addDefine("SHAPE_BOX",void 0,xe.FRAGMENT):a==="CYLINDER"?t.addDefine("SHAPE_CYLINDER",void 0,xe.FRAGMENT):a==="ELLIPSOID"&&t.addDefine("SHAPE_ELLIPSOID",void 0,xe.FRAGMENT),t.addFragmentLines([n.fragmentShaderText,"#line 0",n9,BA,zA,i9]),s>0&&(t.addDefine("CLIPPING_PLANES",void 0,xe.FRAGMENT),t.addDefine("CLIPPING_PLANES_COUNT",s,xe.FRAGMENT),r.unionClippingRegions&&t.addDefine("CLIPPING_PLANES_UNION",void 0,xe.FRAGMENT),t.addFragmentLines([JA])),e._depthTest&&(t.addDefine("DEPTH_TEST",void 0,xe.FRAGMENT),t.addFragmentLines([KA])),a==="BOX"?t.addFragmentLines([$A,QA,oS]):a==="CYLINDER"?t.addFragmentLines([e9,xL,jA,oS]):a==="ELLIPSOID"&&t.addFragmentLines([t9,xL,qA,oS]),t.addFragmentLines([YA]);let l=e._shape,d=l.shaderDefines;for(let p in d)if(d.hasOwnProperty(p)){let y=d[p];c(y)&&(y=y===!0?void 0:y,t.addDefine(p,y,xe.FRAGMENT))}let u=l.shaderMaximumIntersectionsLength;s>0&&(t.addDefine("CLIPPING_PLANES_INTERSECTION_INDEX",u,xe.FRAGMENT),s===1?u+=1:r.unionClippingRegions?u+=2:u+=1),e._depthTest&&(t.addDefine("DEPTH_INTERSECTION_INDEX",u,xe.FRAGMENT),u+=1),t.addDefine("INTERSECTION_COUNT",u,xe.FRAGMENT),(!m.equals(e.paddingBefore,m.ZERO)||!m.equals(e.paddingAfter,m.ZERO))&&t.addDefine("PADDING",void 0,xe.FRAGMENT),e._useLogDepth&&t.addDefine("LOG_DEPTH_READ_ONLY",void 0,xe.FRAGMENT),e._nearestSampling&&t.addDefine("NEAREST_SAMPLING",void 0,xe.FRAGMENT);let f=e._traversal;t.addDefine("SAMPLE_COUNT",`${f._sampleCount}`,xe.FRAGMENT)}var o9=tyt;var dQi=_(T(),1);function nyt(e,t){let{shaderBuilder:n}=e,{names:i,types:o,componentTypes:r,minimumValues:s,maximumValues:a}=t._provider,l=o.length,d=c(s)&&c(a);n.addDefine("METADATA_COUNT",l,xe.FRAGMENT),d&&n.addDefine("STATISTICS",void 0,xe.FRAGMENT);for(let P=0;P<l;P++){let F=i[P],N=o[P],b=`PropertyStatistics_${F}`,G=`PropertyStatistics_${F}`;n.addStruct(b,G,xe.FRAGMENT);let X=YD(N);n.addStructField(b,X,"min"),n.addStructField(b,X,"max")}let u="Statistics",f="Statistics",p="statistics";n.addStruct(u,f,xe.FRAGMENT);for(let P=0;P<l;P++){let F=i[P],N=`PropertyStatistics_${F}`,b=F;n.addStructField(u,N,b)}let y="Metadata",h="Metadata",g="metadata";n.addStruct(y,h,xe.FRAGMENT),n.addStructField(y,f,p);for(let P=0;P<l;P++){let F=i[P],N=o[P],b=YD(N);n.addStructField(y,b,F)}for(let P=0;P<l;P++){let F=i[P],N=o[P],b=oyt(N),G=`VoxelProperty_${F}`,X=`VoxelProperty_${F}`;n.addStruct(G,X,xe.FRAGMENT),n.addStructField(G,b,"partialDerivativeLocal"),n.addStructField(G,b,"partialDerivativeWorld"),n.addStructField(G,b,"partialDerivativeView"),n.addStructField(G,b,"partialDerivativeValid")}let x="Voxel",S="Voxel",V="voxel";n.addStruct(x,S,xe.FRAGMENT);for(let P=0;P<l;P++){let F=i[P],N=`VoxelProperty_${F}`;n.addStructField(x,N,F)}n.addStructField(x,"vec3","positionEC"),n.addStructField(x,"vec3","positionUv"),n.addStructField(x,"vec3","positionShapeUv"),n.addStructField(x,"vec3","positionUvLocal"),n.addStructField(x,"vec3","viewDirUv"),n.addStructField(x,"vec3","viewDirWorld"),n.addStructField(x,"vec3","surfaceNormal"),n.addStructField(x,"float","travelDistance"),n.addStructField(x,"int","stepCount"),n.addStructField(x,"int","tileIndex"),n.addStructField(x,"int","sampleIndex");let Z="FragmentInput";n.addStruct(Z,"FragmentInput",xe.FRAGMENT),n.addStructField(Z,h,g),n.addStructField(Z,S,V);let E="Properties",I="Properties",v="properties";n.addStruct(E,I,xe.FRAGMENT);for(let P=0;P<l;P++){let F=i[P],N=o[P],b=YD(N);n.addStructField(E,b,F)}{let P="clearProperties";n.addFunction(P,`${I} clearProperties()`,xe.FRAGMENT),n.addFunctionLines(P,[`${I} ${v};`]);for(let F=0;F<l;F++){let N=i[F],b=o[F],G=r[F],X=YD(b,G);n.addFunctionLines(P,[`${v}.${N} = ${X}(0.0);`])}n.addFunctionLines(P,[`return ${v};`])}{let P="sumProperties";n.addFunction(P,`${I} sumProperties(${I} propertiesA, ${I} propertiesB)`,xe.FRAGMENT),n.addFunctionLines(P,[`${I} ${v};`]);for(let F=0;F<l;F++){let N=i[F];n.addFunctionLines(P,[`${v}.${N} = propertiesA.${N} + propertiesB.${N};`])}n.addFunctionLines(P,[`return ${v};`])}{let P="scaleProperties";n.addFunction(P,`${I} scaleProperties(${I} ${v}, float scale)`,xe.FRAGMENT),n.addFunctionLines(P,[`${I} scaledProperties = ${v};`]);for(let F=0;F<l;F++){let N=i[F];n.addFunctionLines(P,[`scaledProperties.${N} *= scale;`])}n.addFunctionLines(P,["return scaledProperties;"])}{let P="mixProperties";n.addFunction(P,`${I} mixProperties(${I} propertiesA, ${I} propertiesB, float mixFactor)`,xe.FRAGMENT),n.addFunctionLines(P,[`${I} ${v};`]);for(let F=0;F<l;F++){let N=i[F];n.addFunctionLines(P,[`${v}.${N} = mix(propertiesA.${N}, propertiesB.${N}, mixFactor);`])}n.addFunctionLines(P,[`return ${v};`])}{let P="copyPropertiesToMetadata";n.addFunction(P,`void copyPropertiesToMetadata(in ${I} ${v}, inout ${h} ${g})`,xe.FRAGMENT);for(let F=0;F<l;F++){let N=i[F];n.addFunctionLines(P,[`${g}.${N} = ${v}.${N};`])}}if(d){let P="setStatistics";n.addFunction(P,`void setStatistics(inout ${f} ${p})`,xe.FRAGMENT);for(let F=0;F<l;F++){let N=i[F],b=o[F],G=lt.getComponentCount(b);for(let X=0;X<G;X++){let W=ryt(b,X),A=s[F][X],k=a[F][X];!c(A)||!c(k)||n.addFunctionLines(P,[`${p}.${N}.min${W} = ${ZTe(A)};`,`${p}.${N}.max${W} = ${ZTe(k)};`])}}}{let P="getPropertiesFromMegatextureAtUv";n.addFunction(P,`${I} getPropertiesFromMegatextureAtUv(vec2 texcoord)`,xe.FRAGMENT),n.addFunctionLines(P,[`${I} ${v};`]);for(let F=0;F<l;F++){let N=i[F],b=o[F],G=r[F],X=iyt(b,G);n.addFunctionLines(P,[`properties.${N} = texture(u_megatextureTextures[${F}], texcoord)${X};`])}n.addFunctionLines(P,[`return ${v};`])}}function YD(e){if(e===lt.SCALAR)return"float";if(e===lt.VEC2)return"vec2";if(e===lt.VEC3)return"vec3";if(e===lt.VEC4)return"vec4"}function iyt(e){if(e===lt.SCALAR)return".r";if(e===lt.VEC2)return".ra";if(e===lt.VEC3)return".rgb";if(e===lt.VEC4)return""}function oyt(e){if(e===lt.SCALAR)return"vec3";if(e===lt.VEC2)return"mat2";if(e===lt.VEC3)return"mat3";if(e===lt.VEC4)return"mat4"}function ZTe(e){let t=e.toString();return t.indexOf(".")===-1&&(t=`${e}.0`),t}function ryt(e,t){return e===lt.SCALAR?"":`[${t}]`}var r9=nyt;function syt(e,t){let n=new o9(e);r9(n,e);let{shaderBuilder:i,clippingPlanes:o,clippingPlanesLength:r}=n;if(r>0){let S="getClippingPlane",V=c0(o,t),Z=0,R=V.indexOf(")")+1,E=V.indexOf("{",R)+1,I=V.indexOf("}",E),v=V.slice(Z,R),P=V.slice(E,I);i.addFunction(S,v,xe.FRAGMENT),i.addFunctionLines(S,[P])}let s=i.clone();s.addDefine("PICKING",void 0,xe.FRAGMENT);let a=i.clone();a.addDefine("PICKING_VOXEL",void 0,xe.FRAGMENT);let l=i.buildShaderProgram(t),d=s.buildShaderProgram(t),u=a.buildShaderProgram(t),f=Oe.fromCache({cull:{enabled:!0,face:_i.BACK},depthTest:{enabled:!1},depthMask:!1,blending:un.PRE_MULTIPLIED_ALPHA_BLEND}),p=t.getViewportQuadVertexArray(),y=e._depthTest,h=new et({vertexArray:p,primitiveType:ve.TRIANGLES,renderState:f,shaderProgram:l,uniformMap:n.uniformMap,modelMatrix:e._compoundModelMatrix,pass:Xe.VOXELS,executeInClosestFrustum:!0,owner:this,cull:y,occlude:y}),g=et.shallowClone(h,new et);g.shaderProgram=d,g.pickOnly=!0;let x=et.shallowClone(h,new et);if(x.shaderProgram=u,x.pickOnly=!0,c(e._drawCommand)){let S=e._drawCommand;S.shaderProgram=S.shaderProgram&&S.shaderProgram.destroy()}if(c(e._drawCommandPick)){let S=e._drawCommandPick;S.shaderProgram=S.shaderProgram&&S.shaderProgram.destroy()}if(c(e._drawCommandPickVoxel)){let S=e._drawCommandPickVoxel;S.shaderProgram=S.shaderProgram&&S.shaderProgram.destroy()}e._drawCommand=h,e._drawCommandPick=g,e._drawCommandPickVoxel=x}var s9=syt;var JQi=_(T(),1);var LQi=_(T(),1),ayt={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"},rS=Object.freeze(ayt);var MQi=_(T(),1);var RQi=_(T(),1);function cyt(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 a9=cyt;function _L(){this._defaultTexture=void 0,this._textures={},this._loadedImages=[],this._lastUpdatedFrame=-1}_L.prototype.getTexture=function(e){return this._textures[e]};function lyt(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];c(i)&&i!==e._defaultTexture&&i.destroy(),e._textures[t]=e._defaultTexture})}_L.prototype.loadTexture2D=function(e,t){c(t.typedArray)?this._loadedImages.push({id:e,textureUniform:t}):lyt(this,e,t)};function dyt(e,t,n){let{id:i,textureUniform:o,image:r}=t,s=n.webgl2?HD(o,r,n):uyt(o,r,n),a=e._textures[i];c(a)&&a!==n.defaultTexture&&a.destroy(),e._textures[i]=s}function HD(e,t,n){let{typedArray:i,sampler:o}=e,r=c(i)?GTe(e,n):new Pt({context:n,source:t,sampler:o});return RTe(o)&&r.generateMipmap(),r}function uyt(e,t,n){let{typedArray:i,sampler:o}=e,r=RTe(o),s=o.wrapS===xn.REPEAT||o.wrapS===xn.MIRRORED_REPEAT||o.wrapT===xn.REPEAT||o.wrapT===xn.MIRRORED_REPEAT,{width:a,height:l}=c(i)?e:t,d=[a,l].every(w.isPowerOfTwo);if((r||s)&&!d)if(c(i)){if(e.pixelDatatype===Ue.UNSIGNED_BYTE){let f=a9(i,a,l),p=py(f);return HD({sampler:o},p,n)}}else{let f=py(t);return HD(e,f,n)}else return HD(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."),GTe(e,n)}function RTe(e){return[Jt.NEAREST_MIPMAP_NEAREST,Jt.NEAREST_MIPMAP_LINEAR,Jt.LINEAR_MIPMAP_NEAREST,Jt.LINEAR_MIPMAP_LINEAR].includes(e.minificationFilter)}function GTe(e,t){let{pixelFormat:n,pixelDatatype:i,width:o,height:r,typedArray:s,sampler:a}=e;return new Pt({context:t,pixelFormat:n,pixelDatatype:i,source:{arrayBufferView:s,width:o,height:r},sampler:a,flipY:!1})}_L.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];dyt(this,o,t)}n.length=0};_L.prototype.isDestroyed=function(){return!1};_L.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 he(this)};var c9=_L;function l9(e){e=e??z.EMPTY_OBJECT,this.mode=e.mode??bb.MODIFY_MATERIAL,this.lightingModel=e.lightingModel,this.uniforms=e.uniforms??z.EMPTY_OBJECT,this.varyings=e.varyings??z.EMPTY_OBJECT,this.vertexShaderText=e.vertexShaderText,this.fragmentShaderText=e.fragmentShaderText,this.translucencyMode=e.translucencyMode??Iy.INHERIT,this._textureManager=new c9,this._defaultTexture=void 0,this.uniformMap=myt(this),this.usedVariablesVertex={attributeSet:{},featureIdSet:{},metadataSet:{}},this.usedVariablesFragment={attributeSet:{},featureIdSet:{},metadataSet:{},materialSet:{}},pyt(this),byt(this)}function myt(e){let t=e.uniforms,n={};for(let i in t)if(t.hasOwnProperty(i)){let o=t[i],r=o.type;if(r===rS.SAMPLER_CUBE)throw new L("CustomShader does not support samplerCube uniforms");r===rS.SAMPLER_2D?(e._textureManager.loadTexture2D(i,o.value),n[i]=fyt(e,i)):n[i]=hyt(e,i)}return n}function fyt(e,t){return function(){return e._textureManager.getTexture(t)??e._defaultTexture}}function hyt(e,t){return function(){return e.uniforms[t].value}}function sS(e,t,n){let i;for(;(i=t.exec(e))!==null;){let o=i[1];n[o]=!0}}function pyt(e){let t=/[vf]sInput\.attributes\.(\w+)/g,n=/[vf]sInput\.featureIds\.(\w+)/g,i=/[vf]sInput\.metadata.(\w+)/g,o,r=e.vertexShaderText;c(r)&&(o=e.usedVariablesVertex.attributeSet,sS(r,t,o),o=e.usedVariablesVertex.featureIdSet,sS(r,n,o),o=e.usedVariablesVertex.metadataSet,sS(r,i,o));let s=e.fragmentShaderText;if(c(s)){o=e.usedVariablesFragment.attributeSet,sS(s,t,o),o=e.usedVariablesFragment.featureIdSet,sS(s,n,o),o=e.usedVariablesFragment.metadataSet,sS(s,i,o);let a=/material\.(\w+)/g,l=e.usedVariablesFragment.materialSet;sS(s,a,l)}}function ETe(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 Ic(e,t,n,i){if(e.hasOwnProperty(t)){let o=`${ETe(t)} is not available in the ${i} shader. Did you mean ${ETe(n)} instead?`;throw new L(o)}}function byt(e){let t=e.usedVariablesVertex.attributeSet;Ic(t,"position","positionMC","vertex"),Ic(t,"normal","normalMC","vertex"),Ic(t,"tangent","tangentMC","vertex"),Ic(t,"bitangent","bitangentMC","vertex"),Ic(t,"positionWC","positionMC","vertex"),Ic(t,"positionEC","positionMC","vertex"),Ic(t,"normalEC","normalMC","vertex"),Ic(t,"tangentEC","tangentMC","vertex"),Ic(t,"bitangentEC","bitangentMC","vertex");let n=e.usedVariablesFragment.attributeSet;Ic(n,"position","positionEC","fragment"),Ic(n,"normal","normalEC","fragment"),Ic(n,"tangent","tangentEC","fragment"),Ic(n,"bitangent","bitangentEC","fragment"),Ic(n,"normalMC","normalEC","fragment"),Ic(n,"tangentMC","tangentEC","fragment"),Ic(n,"bitangentMC","bitangentEC","fragment")}l9.prototype.setUniform=function(e,t){if(C.typeOf.string("uniformName",e),C.defined("value",t),!c(this.uniforms[e]))throw new L(`Uniform ${e} must be declared in the CustomShader constructor.`);let n=this.uniforms[e];n.type===rS.SAMPLER_2D?this._textureManager.loadTexture2D(e,t):c(t.clone)?n.value=t.clone(n.value):n.value=t};l9.prototype.update=function(e){this._defaultTexture=e.context.defaultTexture,this._textureManager.update(e)};l9.prototype.isDestroyed=function(){return!1};l9.prototype.destroy=function(){this._textureManager=this._textureManager&&this._textureManager.destroy(),he(this)};var aS=l9;var rji=_(T(),1);function C0(e){if(C.typeOf.object("options",e),!c(e.loader)){if(!c(e.metadata))throw new L("One of loader and metadata must be defined.");if(!Array.isArray(e.metadata))throw new L("metadata must be an array of TypedArrays.")}let{loader:t,metadata:n}=e;this._loader=t,this._metadata=n,this._resourcesLoaded=!1,this._ready=!1}Object.defineProperties(C0.prototype,{ready:{get:function(){return this._ready}},metadata:{get:function(){return this._metadata}}});C0.fromMetadataArray=function(e){if(C.typeOf.object("metadata",e),!Array.isArray(e))throw new L("metadata must be an array of TypedArrays.");return new C0({metadata:e})};C0.fromGltf=async function(e){C.typeOf.object("resource",e);let t=new nf({gltfResource:e,releaseGltfJson:!1,loadAttributesAsTypedArray:!0});try{await t.load()}catch(n){throw t.destroy(),n}return new C0({loader:t})};C0.prototype.update=function(e,t){let n=this._loader;if(!this._ready){if(t.afterRender.push(()=>!0),!c(n)){this._ready=!0;return}if(this._resourcesLoaded){let{structuralMetadata:i,scene:o}=n.components,{attributes:r}=o.nodes[0].primitives[0];this._metadata=yyt(r,i,e),this._ready=!0;return}this._resourcesLoaded=n.process(t)}};function yyt(e,t,n){let{className:i,names:o,types:r,componentTypes:s}=n.provider,a=t.propertyAttributes.find(u=>u.class.id===i),{properties:l}=a,d=new Array(o.length);for(let u=0;u<e.length;u++){let f=l[o[u]].attribute,p=e.find(x=>x.name===f);if(!c(p))continue;let y=At.toComponentDatatype(s[u]),h=lt.getComponentCount(r[u]),g=p.count*h;d[u]=q.createArrayBufferView(y,p.typedArray.buffer,p.typedArray.byteOffset+p.byteOffset,g)}return d}C0.prototype.isDestroyed=function(){return!1};C0.prototype.destroy=function(){return this._loader=this._loader&&this._loader.destroy(),he(this)};var cS=C0;var Dji=_(T(),1);var hji=_(T(),1);function mp(){this.orientedBoundingBox=new Xn,this.boundingSphere=new ue,this.boundTransform=new M,this.shapeTransform=new M,this._minBounds=mp.DefaultMinBounds.clone(),this._maxBounds=mp.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 gyt=new m,G8=new m,xyt=new te,_yt=new m,Tyt=new m,Syt=new m,Cyt=new m,XTe=M.fromRotationTranslation(te.fromUniformScale(.5,new te),new m(.5,.5,.5),new M);mp.prototype.update=function(e,t,n,i,o){C.typeOf.object("modelMatrix",e),C.typeOf.object("minBounds",t),C.typeOf.object("maxBounds",n),i=i??t.clone(_yt),o=o??n.clone(Tyt),t=m.clone(t,this._minBounds),n=m.clone(n,this._maxBounds);let r=m.clamp(t,i,o,Syt),s=m.clamp(n,i,o,Cyt),a=M.getScale(e,G8);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=M.clone(e,this.shapeTransform),this.orientedBoundingBox=X8(r,s,this.shapeTransform,this.orientedBoundingBox),this.boundTransform=M.fromRotationTranslation(this.orientedBoundingBox.halfAxes,this.orientedBoundingBox.center,this.boundTransform),this.boundingSphere=ue.fromOrientedBoundingBox(this.orientedBoundingBox,this.boundingSphere);let{shaderUniforms:l,shaderDefines:d}=this;for(let y in d)d.hasOwnProperty(y)&&(d[y]=void 0);let u=0;d.BOX_INTERSECTION_INDEX=u,u+=1,l.renderMinBounds=M.multiplyByPoint(XTe,r,l.renderMinBounds),l.renderMaxBounds=M.multiplyByPoint(XTe,s,l.renderMaxBounds),d.BOX_HAS_SHAPE_BOUNDS=!0;let f=t,p=n;return l.boxUvToShapeUvScale=m.fromElements(2/(f.x===p.x?1:p.x-f.x),2/(f.y===p.y?1:p.y-f.y),2/(f.z===p.z?1:p.z-f.z),l.boxUvToShapeUvScale),l.boxUvToShapeUvTranslate=m.fromElements(-l.boxUvToShapeUvScale.x*(f.x*.5+.5),-l.boxUvToShapeUvScale.y*(f.y*.5+.5),-l.boxUvToShapeUvScale.z*(f.z*.5+.5),l.boxUvToShapeUvTranslate),this.shaderMaximumIntersectionsLength=u,!0};var zD=new m,E8=new m;mp.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){C.typeOf.number("tileLevel",e),C.typeOf.number("tileX",t),C.typeOf.number("tileY",n),C.typeOf.number("tileZ",i),C.typeOf.object("result",o);let r=this._minBounds,s=this._maxBounds,a=1/Math.pow(2,e),l=m.fromElements(w.lerp(r.x,s.x,a*t),w.lerp(r.y,s.y,a*n),w.lerp(r.z,s.z,a*i),zD),d=m.fromElements(w.lerp(r.x,s.x,a*(t+1)),w.lerp(r.y,s.y,a*(n+1)),w.lerp(r.z,s.z,a*(i+1)),E8);return X8(l,d,this.shapeTransform,o)};var ITe=new m;mp.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){C.typeOf.object("spatialNode",e),C.typeOf.object("tileDimensions",t),C.typeOf.object("tileUv",n),C.typeOf.object("result",i);let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,ITe),s=m.multiplyByScalar(r,o,ITe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,zD),o,zD),l=m.add(a,s,E8),d=this._minBounds,u=this._maxBounds,f=m.fromElements(w.lerp(d.x,u.x,a.x),w.lerp(d.y,u.y,a.y),w.lerp(d.z,u.z,a.z),zD),p=m.fromElements(w.lerp(d.x,u.x,l.x),w.lerp(d.y,u.y,l.y),w.lerp(d.z,u.z,l.z),E8);return X8(f,p,this.shapeTransform,i)};mp.DefaultMinBounds=Object.freeze(new m(-1,-1,-1));mp.DefaultMaxBounds=Object.freeze(new m(1,1,1));function X8(e,t,n,i){let o=mp.DefaultMinBounds,r=mp.DefaultMaxBounds;if(m.equals(e,o)&&m.equals(t,r))i.center=M.getTranslation(n,i.center),i.halfAxes=M.getMatrix3(n,i.halfAxes);else{let a=M.getScale(n,G8),l=m.midpoint(e,t,gyt);i.center=M.multiplyByPoint(n,l,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),G8);let d=M.getRotation(n,xyt);i.halfAxes=te.setScale(d,a,i.halfAxes)}return i}var lS=mp;var Lji=_(T(),1);function V0(){this.orientedBoundingBox=new Xn,this.boundingSphere=new ue,this.boundTransform=new M,this.shapeTransform=new M,this._minBounds=V0.DefaultMinBounds.clone(),this._maxBounds=V0.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 PTe=new m,Vyt=new m,Lyt=new m,Zyt=new m,Ryt=new m;V0.prototype.update=function(e,t,n,i,o){C.typeOf.object("modelMatrix",e),C.typeOf.object("minBounds",t),C.typeOf.object("maxBounds",n),i=i??t.clone(Vyt),o=o??n.clone(Lyt),t=m.clone(t,this._minBounds),n=m.clone(n,this._maxBounds);let{DefaultMinBounds:r,DefaultMaxBounds:s}=V0,a=s.y-r.y,l=.5*a,d=w.EPSILON10,u=w.EPSILON3,f=w.EPSILON10;t.x=Math.max(0,t.x),n.x=Math.max(0,n.x),t.y=w.negativePiToPi(t.y),n.y=w.negativePiToPi(n.y),i.y=w.negativePiToPi(i.y),o.y=w.negativePiToPi(o.y);let p=m.maximumByComponent(t,i,Zyt),y=m.minimumByComponent(n,o,Ryt),h=M.getScale(e,PTe);if(y.x===0||p.x>y.x||p.z>y.z||w.equalsEpsilon(h.x,0,void 0,d)||w.equalsEpsilon(h.y,0,void 0,d)||w.equalsEpsilon(h.z,0,void 0,d))return!1;this.shapeTransform=M.clone(e,this.shapeTransform),this.orientedBoundingBox=w8(p,y,this.shapeTransform,this.orientedBoundingBox),this.boundTransform=M.fromRotationTranslation(this.orientedBoundingBox.halfAxes,this.orientedBoundingBox.center,this.boundTransform),this.boundingSphere=ue.fromOrientedBoundingBox(this.orientedBoundingBox,this.boundingSphere);let g=t.x===r.x&&n.x===s.x,x=n.y<t.y,S=n.y-t.y+x*a,V=S>l+f&&S<a-f,Z=S<l-f,R=S>=l-f&&S<=l+f,E=V||Z||R,I=w.equalsEpsilon(t.y,r.y,void 0,u),v=w.equalsEpsilon(n.y,s.y,void 0,u),P=t.z===r.z&&n.z===s.z,F=p.x===r.x,N=y.y<p.y,b=y.y-p.y+N*a,G=b>=l-f&&b<a-f,X=b>f&&b<l-f,W=b<=f,A=G||X||W,{shaderUniforms:k,shaderDefines:B}=this;for(let H in B)B.hasOwnProperty(H)&&(B[H]=void 0);let O=0;if(B.CYLINDER_INTERSECTION_INDEX_RADIUS_MAX=O,O+=1,F||(B.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN=!0,B.CYLINDER_INTERSECTION_INDEX_RADIUS_MIN=O,O+=1),k.cylinderRenderRadiusMinMax=D.fromElements(p.x,y.x,k.cylinderRenderRadiusMinMax),p.x===y.x&&(B.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT=!0),!g){B.CYLINDER_HAS_SHAPE_BOUNDS_RADIUS=!0;let H=n.x-t.x,U=0,K=1;H!==0&&(U=1/H,K=-t.x/H),k.cylinderUvToShapeUvRadius=D.fromElements(U,K,k.cylinderUvToShapeUvRadius)}if(!P){B.CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT=!0;let H=n.z-t.z,U=0,K=1;H!==0&&(U=2/H,K=-(t.z+1)/H),k.cylinderUvToShapeUvHeight=D.fromElements(U,K,k.cylinderUvToShapeUvHeight)}if(k.cylinderRenderHeightMinMax=D.fromElements(p.z,y.z,k.cylinderRenderHeightMinMax),x&&(B.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED=!0),A&&(B.CYLINDER_HAS_RENDER_BOUNDS_ANGLE=!0,B.CYLINDER_INTERSECTION_INDEX_ANGLE=O,G?(B.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF=!0,O+=1):X?(B.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF=!0,O+=2):W&&(B.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO=!0,O+=2),k.cylinderRenderAngleMinMax=D.fromElements(p.y,y.y,k.cylinderRenderAngleMinMax)),E){B.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE=!0,I&&(B.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY=!0),v&&(B.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY=!0);let H=(t.y-r.y)/a,U=(n.y-r.y)/a,K=1-S/a;if(k.cylinderShapeUvAngleMinMax=D.fromElements(H,U,k.cylinderShapeUvAngleMinMax),k.cylinderShapeUvAngleRangeZeroMid=(U+.5*K)%1,S<=f)k.cylinderUvToShapeUvAngle=D.fromElements(0,1,k.cylinderUvToShapeUvAngle);else{let Q=a/S,ie=-(t.y-r.y)/S;k.cylinderUvToShapeUvAngle=D.fromElements(Q,ie,k.cylinderUvToShapeUvAngle)}}return this.shaderMaximumIntersectionsLength=O,!0};var KD=new m,W8=new m;V0.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){C.typeOf.number("tileLevel",e),C.typeOf.number("tileX",t),C.typeOf.number("tileY",n),C.typeOf.number("tileZ",i),C.typeOf.object("result",o);let r=this._minBounds,s=this._maxBounds,a=1/Math.pow(2,e),l=m.fromElements(w.lerp(r.x,s.x,t*a),w.lerp(r.y,s.y,n*a),w.lerp(r.z,s.z,i*a),KD),d=m.fromElements(w.lerp(r.x,s.x,(t+1)*a),w.lerp(r.y,s.y,(n+1)*a),w.lerp(r.z,s.z,(i+1)*a),W8);return w8(l,d,this.shapeTransform,o)};var WTe=new m;V0.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){C.typeOf.object("spatialNode",e),C.typeOf.object("tileDimensions",t),C.typeOf.object("tileUv",n),C.typeOf.object("result",i);let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,WTe),s=m.multiplyByScalar(r,o,WTe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,KD),o,KD),l=m.add(a,s,W8),d=this._minBounds,u=this._maxBounds,f=m.fromElements(w.lerp(d.x,u.x,a.x),w.lerp(d.y,u.y,a.y),w.lerp(d.z,u.z,a.z),KD),p=m.fromElements(w.lerp(d.x,u.x,l.x),w.lerp(d.y,u.y,l.y),w.lerp(d.z,u.z,l.z),W8);return w8(f,p,this.shapeTransform,i)};V0.DefaultMinBounds=Object.freeze(new m(0,-w.PI,-1));V0.DefaultMaxBounds=Object.freeze(new m(1,+w.PI,1));var Gyt=5,Eyt=new Array(Gyt),Xyt=new m,Iyt=new te,Wyt=new M,wyt=new M,Pyt=new M,I8=new M,vyt=new m,Fyt=new m,Ayt=new m,vTe=new Array(8);for(let e=0;e<8;e++)vTe[e]=new m;function wTe(e,t,n){return Math.abs(ce.dot(e,t))<n}function Myt(e){let t=M.getColumn(e,0,vyt),n=M.getColumn(e,1,Fyt),i=M.getColumn(e,2,Ayt),o=w.EPSILON4;return wTe(t,n,o)&&wTe(n,i,o)}function Nyt(e,t){let n=vTe;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)M.multiplyByPoint(e,n[i],n[i]);return Xn.fromPoints(n,t)}function w8(e,t,n,i){let o=e.x,r=t.x,s=e.y,a=t.y<s?t.y+w.TWO_PI:t.y,l=e.z,d=t.z,u=a-s,f=s+u*.5,p=Eyt,y=0;p[y++]=s,p[y++]=a,p[y++]=f,u>w.PI&&(p[y++]=f-w.PI_OVER_TWO,p[y++]=f+w.PI_OVER_TWO);let h=Number.POSITIVE_INFINITY,g=Number.POSITIVE_INFINITY,x=Number.NEGATIVE_INFINITY,S=Number.NEGATIVE_INFINITY;for(let k=0;k<y;++k){let B=p[k]-f,O=Math.cos(B),H=Math.sin(B),U=O*o,K=H*o,Q=O*r,ie=H*r;h=Math.min(h,U,Q),g=Math.min(g,K,ie),x=Math.max(x,U,Q),S=Math.max(S,K,ie)}let V=x-h,Z=S-g,R=d-l,E=(h+x)*.5,I=(g+S)*.5,v=(l+d)*.5,P=m.fromElements(E,I,v,Xyt),F=te.fromRotationZ(f,Iyt),N=m.fromElements(V,Z,R,PTe),b=M.fromScale(N,Pyt),G=M.fromRotation(F,wyt),X=M.fromTranslation(P,Wyt),W=M.multiplyTransformation(G,M.multiplyTransformation(X,b,I8),I8),A=M.multiplyTransformation(n,W,I8);return Myt(A)?Xn.fromTransformation(A,i):Nyt(A,i)}var dS=V0;var Aji=_(T(),1);function L0(){this.orientedBoundingBox=new Xn,this.boundingSphere=new ue,this.boundTransform=new M,this.shapeTransform=new M,this._rectangle=new de,this._minimumHeight=L0.DefaultMinBounds.z,this._maximumHeight=L0.DefaultMaxBounds.z,this._ellipsoid=new re,this._translation=new m,this._rotation=new te,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 kyt=new m,Uyt=new m,Oyt=new m,Dyt=new m,Byt=new m,Yyt=new m,Hyt=new m,zyt=new m,Kyt=new te,FTe=new m,ATe=new m,Jyt=new de;L0.prototype.update=function(e,t,n,i,o){let{DefaultMinBounds:r,DefaultMaxBounds:s}=L0;i=i??r,o=o??s,C.typeOf.object("modelMatrix",e),C.typeOf.object("minBounds",t),C.typeOf.object("maxBounds",n);let a=w.EPSILON10,l=w.EPSILON3,d=w.EPSILON10,u=w.EPSILON10,f=w.EPSILON3,p=M.getScale(e,zyt),y=m.clone(r,kyt);y.z=-m.minimumComponent(p);let h=m.clamp(t,y,s,Uyt),g=m.clamp(n,y,s,Oyt),x=m.clamp(i,y,s,Dyt),S=m.clamp(o,y,s,Byt),V=m.maximumByComponent(h,x,Yyt),Z=m.minimumByComponent(g,S,Hyt),R=m.add(p,m.fromElements(g.z,g.z,g.z,FTe),FTe),E=m.maximumComponent(R),I=m.add(p,m.fromElements(Z.z,Z.z,Z.z,ATe),ATe);if(V.y>Z.y||V.y===s.y||Z.y===r.y||V.z>Z.z||w.equalsEpsilon(I,m.ZERO,void 0,a))return!1;this._rectangle=de.fromRadians(h.x,h.y,g.x,g.y),this._translation=M.getTranslation(e,this._translation),this._rotation=M.getRotation(e,this._rotation),this._ellipsoid=re.fromCartesian3(p,this._ellipsoid),this._minimumHeight=h.z,this._maximumHeight=g.z;let v=de.fromRadians(V.x,V.y,Z.x,Z.y,Jyt);this.orientedBoundingBox=P8(v,V.z,Z.z,this._ellipsoid,this._translation,this._rotation,this.orientedBoundingBox),this.shapeTransform=M.fromRotationTranslation(te.setScale(this._rotation,R,Kyt),this._translation,this.shapeTransform),this.boundTransform=M.fromRotationTranslation(this.orientedBoundingBox.halfAxes,this.orientedBoundingBox.center,this.boundTransform),this.boundingSphere=ue.fromOrientedBoundingBox(this.orientedBoundingBox,this.boundingSphere);let P=s.x-r.x,F=.5*P,N=Z.x<V.x,b=Z.x-V.x+N*P,G=b<=d,X=b>=F-d&&b<P-d,W=b>d&&b<F-d,A=G||X||W,k=g.x<h.x,B=g.x-h.x+k*P,O=B>F+d&&B<P-d,H=B>=F-d&&B<=F+d,U=B<F-d,K=O||H||U,Q=Z.y<-f,ie=Z.y>=-f&&Z.y<=+f,j=Z.y>+f&&Z.y<s.y-u,$=Q||ie||j,ne=V.y>r.y+u&&V.y<-f,be=V.y>=-f&&V.y<=+f,Ce=V.y>+f,me=ne||be||Ce,_e=$||me,Ve=g.y-h.y,Ie=g.y<-f,Ze=g.y>=-f&&g.y<=+f,De=g.y>+f&&g.y<s.y-u,Ke=Ie||Ze||De,rt=h.y>r.y+u&&h.y<-f,Xt=h.y>=-f&&h.y<=+f,Ht=h.y>+f,mn=Ke||(rt||Xt||Ht),{shaderUniforms:Dt,shaderDefines:Lt}=this;for(let bt in Lt)Lt.hasOwnProperty(bt)&&(Lt[bt]=void 0);Dt.ellipsoidRadiiUv=m.divideByScalar(R,E,Dt.ellipsoidRadiiUv);let{x:Vi,z:ln}=Dt.ellipsoidRadiiUv,ge=ln/Vi;Dt.eccentricitySquared=1-ge*ge,Dt.evoluteScale=D.fromElements((Vi*Vi-ln*ln)/Vi,(ln*ln-Vi*Vi)/ln,Dt.evoluteScale),Dt.ellipsoidInverseRadiiSquaredUv=m.divideComponents(m.ONE,m.multiplyComponents(Dt.ellipsoidRadiiUv,Dt.ellipsoidRadiiUv,Dt.ellipsoidInverseRadiiSquaredUv),Dt.ellipsoidInverseRadiiSquaredUv);let Le=0;Lt.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX=Le,Le+=1,Lt.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN=Le,Le+=1,Dt.clipMinMaxHeight=D.fromElements((V.z-g.z)/E,(Z.z-g.z)/E,Dt.clipMinMaxHeight);let yn=(g.z-h.z)/E;if(Dt.ellipsoidInverseHeightDifferenceUv=1/yn,h.z===g.z&&(Dt.ellipsoidInverseHeightDifferenceUv=0),A&&(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE=!0,Lt.ELLIPSOID_INTERSECTION_INDEX_LONGITUDE=Le,X?(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF=!0,Le+=1):W?(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF=!0,Le+=2):G&&(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO=!0,Le+=2),Dt.ellipsoidRenderLongitudeMinMax=D.fromElements(V.x,Z.x,Dt.ellipsoidRenderLongitudeMinMax)),K)if(Lt.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE=!0,g.x<h.x&&(Lt.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED=!0),B<=d)Dt.ellipsoidUvToShapeUvLongitude=D.fromElements(0,1,Dt.ellipsoidUvToShapeUvLongitude);else{let ro=P/B,Xo=-(h.x-r.x)/B;Dt.ellipsoidUvToShapeUvLongitude=D.fromElements(ro,Xo,Dt.ellipsoidUvToShapeUvLongitude)}if(A){let bt=w.equalsEpsilon(V.x,r.x,void 0,l),ro=w.equalsEpsilon(Z.x,s.x,void 0,l);bt&&(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY=!0),ro&&(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY=!0);let Xo=(h.x-r.x)/P,ra=(g.x-r.x)/P,Wr=(Z.x-r.x)/P,_s=1-b/P,Ae=(Wr+.5*_s)%1;Dt.ellipsoidShapeUvLongitudeMinMaxMid=m.fromElements(Xo,ra,Ae,Dt.ellipsoidShapeUvLongitudeMinMaxMid)}if(_e&&(me&&(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN=!0,Lt.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN=Le,ne?(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF=!0,Le+=1):be?(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF=!0,Le+=1):Ce&&(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF=!0,Le+=2)),$&&(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX=!0,Lt.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX=Le,Q?(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF=!0,Le+=2):ie?(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF=!0,Le+=1):j&&(Lt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF=!0,Le+=1)),Dt.ellipsoidRenderLatitudeSinMinMax=D.fromElements(Math.sin(V.y),Math.sin(Z.y),Dt.ellipsoidRenderLatitudeSinMinMax)),mn)if(Lt.ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE=!0,Ve<u)Dt.ellipsoidUvToShapeUvLatitude=D.fromElements(0,1,Dt.ellipsoidUvToShapeUvLatitude);else{let ro=(s.y-r.y)/Ve,Xo=(r.y-h.y)/Ve;Dt.ellipsoidUvToShapeUvLatitude=D.fromElements(ro,Xo,Dt.ellipsoidUvToShapeUvLatitude)}return this.shaderMaximumIntersectionsLength=Le,!0};var kTe=new de;L0.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){C.typeOf.number("tileLevel",e),C.typeOf.number("tileX",t),C.typeOf.number("tileY",n),C.typeOf.number("tileZ",i),C.typeOf.object("result",o);let r=1/Math.pow(2,e),s=t*r,a=(t+1)*r,l=n*r,d=(n+1)*r,u=i*r,f=(i+1)*r,p=de.subsection(this._rectangle,s,l,a,d,kTe),y=w.lerp(this._minimumHeight,this._maximumHeight,u),h=w.lerp(this._minimumHeight,this._maximumHeight,f);return P8(p,y,h,this._ellipsoid,this._translation,this._rotation,o)};var MTe=new m,NTe=new m,Qyt=new m;L0.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){C.typeOf.object("spatialNode",e),C.typeOf.object("tileDimensions",t),C.typeOf.object("tileUv",n),C.typeOf.object("result",i);let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,MTe),s=m.multiplyByScalar(r,o,MTe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,NTe),o,NTe),l=m.add(a,s,Qyt),d=de.subsection(this._rectangle,a.x,a.y,l.x,l.y,kTe),u=w.lerp(this._minimumHeight,this._maximumHeight,a.z),f=w.lerp(this._minimumHeight,this._maximumHeight,l.z);return P8(d,u,f,this._ellipsoid,this._translation,this._rotation,i)};function P8(e,t,n,i,o,r,s){return s=Xn.fromRectangle(e,t,n,i,s),s.center=m.add(s.center,o,s.center),s.halfAxes=te.multiply(s.halfAxes,r,s.halfAxes),s}L0.DefaultMinBounds=Object.freeze(new m(-w.PI,-w.PI_OVER_TWO,-re.WGS84.minimumRadius));L0.DefaultMaxBounds=Object.freeze(new m(w.PI,w.PI_OVER_TWO,10*re.WGS84.maximumRadius));var uS=L0;var ou={BOX:"BOX",ELLIPSOID:"ELLIPSOID",CYLINDER:"CYLINDER"};ou.getMinBounds=function(e){switch(e){case ou.BOX:return lS.DefaultMinBounds;case ou.ELLIPSOID:return uS.DefaultMinBounds;case ou.CYLINDER:return dS.DefaultMinBounds;default:throw new L(`Invalid shape type ${e}`)}};ou.getMaxBounds=function(e){switch(e){case ou.BOX:return lS.DefaultMaxBounds;case ou.ELLIPSOID:return uS.DefaultMaxBounds;case ou.CYLINDER:return dS.DefaultMaxBounds;default:throw new L(`Invalid shape type ${e}`)}};ou.getShapeConstructor=function(e){switch(e){case ou.BOX:return lS;case ou.ELLIPSOID:return uS;case ou.CYLINDER:return dS;default:throw new L(`Invalid shape type ${e}`)}};var La=Object.freeze(ou);var H4i=_(T(),1);var Kji=_(T(),1);function Yf(e){C.typeOf.object("options",e),C.defined("options.comparator",e.comparator),c(e.maximumLength)&&C.typeOf.number.greaterThanOrEquals("options.maximumLength",e.maximumLength,0),this._comparator=e.comparator,this._maximumLength=e.maximumLength,this._array=c(e.maximumLength)?new Array(e.maximumLength):[],this._length=0}Object.defineProperties(Yf.prototype,{length:{get:function(){return this._length}},maximumLength:{get:function(){return this._maximumLength},set:function(e){if(c(e)){for(C.typeOf.number.greaterThanOrEquals("maximumLength",e,0);this._length>e;)this.removeMinimum();this._array.length=e}this._maximumLength=e}},internalArray:{get:function(){return this._array}},comparator:{get:function(){return this._comparator}}});Yf.prototype.clone=function(){let e=this._maximumLength,t=this._comparator,n=this._array,i=this._length,o=new Yf({comparator:t,maximumLength:e});o._length=i;for(let r=0;r<i;r++)o._array[r]=n[r];return o};Yf.prototype.reset=function(){this._length=0;let e=this._maximumLength;if(c(e))for(let t=0;t<e;t++)this._array[t]=void 0;else this._array.length=0};Yf.prototype.resort=function(){let e=this._length;for(let t=0;t<e;t++)UTe(this,t)};Yf.prototype.insert=function(e){let t,n=this._maximumLength;if(c(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++,UTe(this,i),t};Yf.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],OTe(this,0)),this._array[e-1]=void 0,t};Yf.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=v8(this,1,2)?1:2;t=this._array[n],this._array[n]=this._array[e-1],e>=4&&OTe(this,n)}return this._array[e-1]=void 0,t};Yf.prototype.getMinimum=function(){if(this._length!==0)return this._array[0]};Yf.prototype.getMaximum=function(){let e=this._length;if(e!==0)return e<=2?this._array[e-1]:this._array[v8(this,1,2)?1:2]};function JD(e,t,n){let i=e._array,o=i[t];i[t]=i[n],i[n]=o}function d9(e,t,n){return e._comparator(e._array[t],e._array[n])<0}function v8(e,t,n){return e._comparator(e._array[t],e._array[n])>0}function UTe(e,t){if(t===0)return;let n=Math.floor(w.log2(t+1))%2===0,i=Math.floor((t-1)/2),o=d9(e,t,i);for(o!==n&&(JD(e,t,i),t=i);t>=3;){let r=Math.floor((t-3)/4);if(d9(e,t,r)!==o)break;JD(e,t,r),t=r}}function OTe(e,t){let n=e._length,i=Math.floor(w.log2(t+1))%2===0,o;for(;(o=2*t+1)<n;){let r=o,s=o+1;if(s<n){d9(e,s,r)===i&&(r=s);let a=2*o+1,l=Math.max(Math.min(n-a,4),0);for(let d=0;d<l;d++){let u=a+d;d9(e,u,r)===i&&(r=u)}}if(d9(e,r,t)===i&&(JD(e,r,t),r!==o&&r!==s)){let a=Math.floor((r-1)/2);v8(e,r,a)===i&&JD(e,r,a)}t=r}}var mS=Yf;var Qji=_(T(),1),F8=Object.freeze({UNLOADED:0,RECEIVING:1,PROCESSING:2,LOADED:3,FAILED:4,UNAVAILABLE:5});function u9(e,t){this.spatialNode=e,this.keyframe=t,this.state=F8.UNLOADED,this.content=void 0,this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1}u9.prototype.unload=function(){this.content=this.content&&this.content.destroy(),this.spatialNode=void 0,this.state=F8.UNLOADED,this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1};u9.priorityComparator=function(e,t){return e.priority-t.priority};u9.searchComparator=function(e,t){return e.keyframe-t.keyframe};u9.LoadState=F8;var bo=u9;var p4i=_(T(),1);function Ag(e,t,n,i,o){if(o=Math.min(o??128*1024*1024,536870912),i===At.UNSIGNED_SHORT&&(i=At.FLOAT32),i===At.FLOAT32&&!e.floatingPointTexture)throw new le("Floating point texture not supported");let s=jyt(i),a=qyt(n,e.webgl2),l=At.getSizeInBytes(i),d=$yt(o,n,l),u=Math.ceil(Math.sqrt(t.x)),f=Math.ceil(t.z/u),p=u*t.x,y=f*t.y,h=Math.floor(d/p),g=Math.floor(d/y);if(h===0||g===0)throw new le("Tileset is too large to fit into megatexture");this.channelCount=n,this.componentType=i,this.textureMemoryByteLength=l*n*d**2,this.voxelCountPerTile=m.clone(t,new m),this.maximumTileCount=h*g,this.regionCountPerMegatexture=new D(h,g),this.voxelCountPerRegion=new D(p,y),this.sliceCountPerRegion=new D(u,f),this.voxelSizeUv=new D(1/d,1/d),this.sliceSizeUv=new D(t.x/d,t.y/d),this.regionSizeUv=new D(p/d,y/d),this.texture=new Pt({context:e,pixelFormat:a,pixelDatatype:s,flipY:!1,width:d,height:d,sampler:new en({wrapS:xn.CLAMP_TO_EDGE,wrapT:xn.CLAMP_TO_EDGE,minificationFilter:Jt.LINEAR,magnificationFilter:di.LINEAR})});let x=At.toComponentDatatype(i);this.tileVoxelDataTemp=q.createTypedArray(x,p*y*n),this.nodes=new Array(this.maximumTileCount);for(let S=0;S<this.maximumTileCount;S++)this.nodes[S]=new egt(S);for(let S=0;S<this.maximumTileCount;S++){let V=this.nodes[S];V.previousNode=S>0?this.nodes[S-1]:void 0,V.nextNode=S<this.maximumTileCount-1?this.nodes[S+1]:void 0}this.occupiedList=void 0,this.emptyList=this.nodes[0],this.occupiedCount=0}function jyt(e){if(e===At.FLOAT32||e===At.FLOAT64)return Ue.FLOAT;if(e===At.UINT8)return Ue.UNSIGNED_BYTE}function qyt(e,t){if(e===1)return t?ke.RED:ke.LUMINANCE;if(e===2)return t?ke.RG:ke.LUMINANCE_ALPHA;if(e===3)return ke.RGB;if(e===4)return ke.RGBA}function $yt(e,t,n){let i=Math.floor(e/(t*n));return Math.min(mt.maximumTextureSize,w.previousPowerOfTwo(Math.floor(Math.sqrt(i))))}function egt(e){this.index=e,this.nextNode=void 0,this.previousNode=void 0}Ag.prototype.add=function(e){if(this.isFull())throw new L("Trying to add when there are no empty spots");let t=this.emptyList;this.emptyList=this.emptyList.nextNode,c(this.emptyList)&&(this.emptyList.previousNode=void 0),t.nextNode=this.occupiedList,c(t.nextNode)&&(t.nextNode.previousNode=t),this.occupiedList=t;let n=t.index;return this.writeDataToTexture(n,e),this.occupiedCount++,n};Ag.prototype.remove=function(e){if(e<0||e>=this.maximumTileCount)throw new L("Megatexture index out of bounds");let t=this.nodes[e];c(t.previousNode)&&(t.previousNode.nextNode=t.nextNode),c(t.nextNode)&&(t.nextNode.previousNode=t.previousNode),t.nextNode=this.emptyList,c(t.nextNode)&&(t.nextNode.previousNode=t),t.previousNode=void 0,this.emptyList=t,this.occupiedCount--};Ag.prototype.isFull=function(){return this.emptyList===void 0};Ag.getApproximateTextureMemoryByteLength=function(e,t,n,i){i===At.UNSIGNED_SHORT&&(i=At.FLOAT32);let o=At.getSizeInBytes(i),r=e*t.x*t.y*t.z,s=Math.ceil(Math.sqrt(t.x)),a=Math.ceil(t.z/s),l=s*t.x,d=a*t.y,u=w.previousPowerOfTwo(Math.floor(Math.sqrt(r)));for(;;){let p=Math.floor(u/l),y=Math.floor(u/d);if(p*y>=e)break;u*=2}return u*u*n*o};Ag.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:l}=this;for(let y=0;y<o.z;y++){let h=y%r.x*o.x,g=Math.floor(y/r.x)*o.y;for(let x=0;x<o.y;x++){let S=tgt(o,x,y),V=(g+x)*s.x+h;for(let Z=0;Z<o.x;Z++){let R=S+Z,E=V+Z;for(let I=0;I<a;I++)i[E*a+I]=n[R*a+I]}}}let d=e%l.x*s.x,u=Math.floor(e/l.x)*s.y,p={source:{arrayBufferView:i,width:s.x,height:s.y},xOffset:d,yOffset:u};this.texture.copyFrom(p)};function tgt(e,t,n){let i=e.y*e.x,o=n,r=t;return o*i+r*e.x}Ag.prototype.isDestroyed=function(){return!1};Ag.prototype.destroy=function(){return this.texture=this.texture&&this.texture.destroy(),he(this)};var TL=Ag;var L4i=_(T(),1);function xm(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 Xn,this.approximateVoxelSize=0,this.screenSpaceError=0,this.visitedFrameNumber=-1,this.computeBoundingVolumes(r)}var ngt=new m;xm.prototype.computeBoundingVolumes=function(e){this.orientedBoundingBox=e.computeOrientedBoundingBoxForTile(this.level,this.x,this.y,this.z,this.orientedBoundingBox);let t=te.getScale(this.orientedBoundingBox.halfAxes,ngt),n=2*m.maximumComponent(t);this.approximateVoxelSize=n/m.minimumComponent(this.dimensions)};xm.prototype.constructChildNodes=function(e){let{level:t,x:n,y:i,z:o}=this,r=n*2,s=i*2,a=o*2,l=s+1,d=r+1,u=a+1,f=t+1,p=[[f,r,s,a],[f,d,s,a],[f,r,l,a],[f,d,l,a],[f,r,s,u],[f,d,s,u],[f,r,l,u],[f,d,l,u]];this.children=p.map(([y,h,g,x])=>new xm(y,h,g,x,this,e,this.dimensions))};xm.prototype.visibility=function(e,t){let n=this.orientedBoundingBox;return e.cullingVolume.computeVisibilityWithPlaneMask(n,t)};xm.prototype.computeScreenSpaceError=function(e,t){let n=this.orientedBoundingBox,i=Math.sqrt(n.distanceSquaredTo(e));i=Math.max(i,w.EPSILON7);let o=this.approximateVoxelSize,r=t*(o/i);this.screenSpaceError=r};var DTe={keyframe:0};function m9(e,t){return DTe.keyframe=e,Wo(t,DTe,bo.searchComparator)}xm.prototype.computeSurroundingRenderableKeyframeNodes=function(e){let t=this,n=t.level,i=Math.floor(e),o=Math.ceil(e),r,s,a=+Number.MAX_VALUE,l=+Number.MAX_VALUE;for(;c(t);){let{renderableKeyframeNodes:f}=t;if(f.length>=1){let p=igt(i,f),y=f[p],h=o===i||i<y.keyframe?p:Math.min(p+1,f.length-1),g=f[h],x=i-y.keyframe,S=BTe(n-t.level,x);S<a&&(a=S,r=y);let V=g.keyframe-o,Z=BTe(n-t.level,V);if(Z<l&&(l=Z,s=g),x===0&&V===0)break}t=t.parent}if(this.renderableKeyframeNodePrevious=r,this.renderableKeyframeNodeNext=s,!c(r)||!c(s))return;let d=r.keyframe,u=s.keyframe;this.renderableKeyframeNodeLerp=d===u?0:w.clamp((e-d)/(u-d),0,1)};function igt(e,t){let n=m9(e,t);return n<0?w.clamp(~n-1,0,t.length-1):n}function BTe(e,t){let n=Math.exp(e*4),i=t>=0?1:-200;return e*n+t*i}xm.prototype.isVisited=function(e){return this.visitedFrameNumber===e};xm.prototype.createKeyframeNode=function(e){let t=m9(e,this.keyframeNodes);if(t<0){t=~t;let n=new bo(this,e);this.keyframeNodes.splice(t,0,n)}};xm.prototype.destroyKeyframeNode=function(e,t){let n=e.keyframe,i=m9(n,this.keyframeNodes);if(i<0)throw new L("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=m9(n,this.renderableKeyframeNodes);if(o<0)throw new L("Renderable keyframe node does not exist.");this.renderableKeyframeNodes.splice(o,1)}e.unload()};xm.prototype.addKeyframeNodeToMegatextures=function(e,t){if(e.megatextureIndex!==-1||e.content.metadata.length!==t.length)throw new L("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=m9(e.keyframe,i);if(o>=0)throw new L("Keyframe already renderable");o=~o,i.splice(o,0,e)};xm.prototype.isRenderable=function(e){let t=this.renderableKeyframeNodePrevious,n=this.renderableKeyframeNodeNext,i=this.level;return c(t)&&c(n)&&(t.spatialNode.level===i||n.spatialNode.level===i)&&this.visitedFrameNumber===e};var f9=xm;function Mg(e,t,n,i){let{provider:o,dimensions:r,paddingBefore:s,paddingAfter:a}=e,{types:l,componentTypes:d,metadataOrder:u}=o,f=m.add(r,s,new m);if(m.add(f,a,f),u===gm.Y_UP){let Z=f.y;f.y=f.z,f.z=Z}!c(i)&&c(o.maximumTileCount)&&(i=bgt(o.maximumTileCount,f,l,d)),this._primitive=e,this.textureMemoryByteLength=0,this.megatextures=new Array(l.length);for(let Z=0;Z<l.length;Z++){let R=l[Z],E=lt.getComponentCount(R),I=d[Z];this.megatextures[Z]=new TL(t,f,E,I,i),this.textureMemoryByteLength+=this.megatextures[Z].textureMemoryByteLength}let p=this.megatextures[0].maximumTileCount;this._simultaneousRequestCount=0,this._debugPrint=!1,this._calculateStatistics=this._primitive._calculateStatistics??!1,this._frameNumber=0;let y=e._shape;this.rootNode=new f9(0,0,0,0,void 0,y,r),this._priorityQueue=new mS({maximumLength:p,comparator:bo.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 h=this._binaryTreeKeyframeWeighting;h[0]=0,h[n-1]=0,A8(h,1,n-2,0);let g=9,x=2048,S=Math.floor(x/g),V=Math.ceil(p/S);this.internalNodeTexture=new Pt({context:t,pixelFormat:ke.RGBA,pixelDatatype:Ue.UNSIGNED_BYTE,flipY:!1,width:x,height:V,sampler:new en({minificationFilter:Jt.NEAREST,magnificationFilter:di.NEAREST})}),this.internalNodeTilesPerRow=S,this.internalNodeTexelSizeUv=new D(1/x,1/V),this.leafNodeTexture=void 0,this.leafNodeTilesPerRow=void 0,this.leafNodeTexelSizeUv=new D}Mg.prototype.findKeyframeNode=function(e){return this._keyframeNodesInMegatexture.find(function(t){return t.megatextureIndex===e})};function A8(e,t,n,i){if(t>n)return;let o=Math.floor((t+n)/2);e[o]=i,A8(e,t,o-1,i+1),A8(e,o+1,n,i+1)}Mg.simultaneousRequestCountMaximum=50;Mg.prototype.update=function(e,t,n,i){let o=this._primitive,r=e.context,s=this.megatextures[0].maximumTileCount,a=this._keyframeCount,l=o._levelBlendFactor,d=l>0,u=a>1,f=(d?2:1)*(u?2:1);this._sampleCount=f;let p=f>=2;if(p&&!c(this.leafNodeTexture)){let Z=Math.floor(512),R=Math.ceil(s/Z);this.leafNodeTexture=new Pt({context:r,pixelFormat:ke.RGBA,pixelDatatype:Ue.UNSIGNED_BYTE,flipY:!1,width:1024,height:R,sampler:new en({minificationFilter:Jt.NEAREST,magnificationFilter:di.NEAREST})}),this.leafNodeTexelSizeUv=D.fromElements(1/1024,1/R,this.leafNodeTexelSizeUv),this.leafNodeTilesPerRow=Z}else!p&&c(this.leafNodeTexture)&&(this.leafNodeTexture=this.leafNodeTexture.destroy());if(this._keyframeLocation=w.clamp(t,0,a-1),n&&YTe(this,this.rootNode),i)return;this._frameNumber=e.frameNumber;let y=Ti();sgt(this,e),agt(this,e);let h=Ti();mgt(this,f,l);let g=Ti(),x=o.loadProgress.numberOfListeners>0||o.allTilesLoaded.numberOfListeners>0||o.initialTilesLoaded.numberOfListeners>0;if(this._debugPrint||this._calculateStatistics||x){let S=h-y,V=g-h,Z=g-y;ugt(this,e,S,V,Z)}};Mg.prototype.isRenderable=function(e){return e.isRenderable(this._frameNumber)};Mg.prototype.isDestroyed=function(){return!1};Mg.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(),he(this)};function YTe(e,t){if(t.computeBoundingVolumes(e._primitive._shape),c(t.children))for(let n=0;n<8;n++){let i=t.children[n];YTe(e,i)}}function ogt(e,t){if(e._simultaneousRequestCount>=Mg.simultaneousRequestCountMaximum)return;let i=e._primitive.provider,{keyframe:o,spatialNode:r}=t;if(c(i.availableLevels)&&r.level>=i.availableLevels)return;function s(u){e._simultaneousRequestCount--,t.content=u,t.state=c(u)?bo.LoadState.PROCESSING:bo.LoadState.UNAVAILABLE}function a(u){e._simultaneousRequestCount--,t.state=bo.LoadState.FAILED,e._primitive.tileFailed.raiseEvent()}let l={tileLevel:r.level,tileX:r.x,tileY:r.y,tileZ:r.z,keyframe:o},d=i.requestData(l);c(d)&&(e._simultaneousRequestCount++,t.state=bo.LoadState.RECEIVING,d.then(s).catch(a))}function rgt(e){return e/(1+e)}function sgt(e,t){let n=e._frameNumber,i=e._priorityQueue;i.reset(),HTe(e.rootNode,fs.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 agt(e,t){let n=e.megatextures[0],i=n.occupiedCount,o=e._keyframeNodesInMegatexture;o.length=i,o.sort(cgt);let r=e._highPriorityKeyframeNodes,s=e._highPriorityKeyframeNodeCount,a=0,l=0;for(let d=0;d<s;d++){let u=r[d];if(!(u.state===bo.LoadState.LOADED||u.spatialNode===void 0)&&(u.state===bo.LoadState.UNLOADED&&ogt(e,u),u.state===bo.LoadState.PROCESSING)){let{content:f}=u;if(f.update(e._primitive,t),!f.ready)continue;if(!lgt(f.metadata,e)){u.content=void 0,u.state=bo.LoadState.FAILED,e._primitive.tileFailed.raiseEvent();continue}let p=0;if(n.isFull()){p=i-1-a,a++;let y=o[p];e._primitive.tileUnload.raiseEvent(),y.spatialNode.destroyKeyframeNode(y,e.megatextures)}else p=i+l,l++;u.spatialNode.addKeyframeNodeToMegatextures(u,e.megatextures),u.state=bo.LoadState.LOADED,o[p]=u,e._primitive.tileLoad.raiseEvent()}}}function cgt(e,t){return e.highPriorityFrameNumber===t.highPriorityFrameNumber?t.priority-e.priority:t.highPriorityFrameNumber-e.highPriorityFrameNumber}function lgt(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:l,z:d}=r,u=a*l*d,f=e[o],p=u*s;if(f.length!==p)return!1}return!0}function HTe(e,t,n,i){let{camera:o,context:r,pixelRatio:s,frameNumber:a}=i,{positionWC:l,frustum:d}=o,f=r.drawingBufferHeight/s/d.sseDenominator;if(e.computeScreenSpaceError(l,f),t=e.visibility(i,t),t===fs.MASK_OUTSIDE)return;e.visitedFrameNumber=a;let p=n._primitive,y=p._shape,h=p.screenSpaceError,g=n._priorityQueue,x=n._keyframeCount,S=w.clamp(Math.floor(n._keyframeLocation),0,x-2),V=S+1;if(x===1)e.createKeyframeNode(0);else if(e.keyframeNodes.length!==x)for(let v=0;v<x;v++)e.createKeyframeNode(v);let{screenSpaceError:Z,keyframeNodes:R}=e,E=rgt(Z),I=!1;for(let v=0;v<R.length;v++){let P=R[v];P.priority=10*E+dgt(S,P.keyframe,V,n),P.state!==bo.LoadState.UNAVAILABLE&&P.state!==bo.LoadState.FAILED&&P.priority!==-Number.MAX_VALUE&&g.insert(P),P.state===bo.LoadState.LOADED&&(I=!0)}if(Z<h||!I){e.children=void 0;return}c(e.children)||e.constructChildNodes(y);for(let v=0;v<8;v++){let P=e.children[v];HTe(P,t,n,i)}}function dgt(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 w.lerp(a,s,.15+.85*s)}function ugt(e,t,n,i,o){let r=e._keyframeCount,s=e.rootNode,a=Object.keys(bo.LoadState).length,l=new Array(a),d=new Array(a),u=0;for(let I=0;I<a;I++){let v=new Array(r).fill(0);l[I]=v,d[I]=0}function f(I){let v=I.keyframeNodes;for(let P=0;P<v.length;P++){let F=v[P],N=F.keyframe,b=F.state;l[b][N]+=1,d[b]+=1,u++}if(c(I.children))for(let P=0;P<8;P++){let F=I.children[P];f(F)}}f(s),e._primitive.statistics.numberOfTilesWithContentReady=d[bo.LoadState.LOADED],e._primitive.statistics.visited=u;let p=d[bo.LoadState.RECEIVING],y=d[bo.LoadState.PROCESSING],h=p!==e._primitive.statistics.numberOfPendingRequests||y!==e._primitive.statistics.numberOfTilesProcessing;if(h&&t.afterRender.push(function(){return e._primitive.loadProgress.raiseEvent(p,y),!0}),e._primitive.statistics.numberOfPendingRequests=p,e._primitive.statistics.numberOfTilesProcessing=y,h&&(p===0&&y===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: ${l[bo.LoadState.LOADED]}`,S=`UNLOADED: ${d[bo.LoadState.UNLOADED]} | RECEIVING: ${d[bo.LoadState.RECEIVING]} | PROCESSING: ${d[bo.LoadState.PROCESSING]} | LOADED: ${d[bo.LoadState.LOADED]} | FAILED: ${d[bo.LoadState.FAILED]} | UNAVAILABLE: ${d[bo.LoadState.UNAVAILABLE]} | TOTAL: ${u}`,V=Math.round(n*100)/100,Z=Math.round(i*100)/100,R=Math.round(o*100)/100,E=`LOAD: ${V} | OCT: ${Z} | ALL: ${R}`;console.log(`${x} || ${S} || ${E}`)}var QD={INTERNAL:0,LEAF:1,PACKED_LEAF_FROM_PARENT:2};function mgt(e,t,n){let i=e._primitive._screenSpaceError,o=e._keyframeLocation,r=e._frameNumber,s=t>=2,a=0,l=0,d=[],u=[];function f(y,h,g,x,S){let V=!1;if(c(y.children))for(let Z=0;Z<8;Z++){let R=y.children[Z];R.computeSurroundingRenderableKeyframeNodes(o),R.isRenderable(r)&&(V=!0)}if(V){d[S]=QD.INTERNAL<<16|h,d[g]=x,a++,x=h,S=x*9+1;for(let Z=0;Z<8;Z++){let R=y.children[Z];h=a,g=h*9+0,f(R,h,g,x,S+Z)}}else{if(e._primitive.tileVisible.raiseEvent(),s){let Z=l*5,R=y.renderableKeyframeNodePrevious,E=y.level-R.spatialNode.level,I=R.spatialNode.parent,v=c(I)?I.renderableKeyframeNodePrevious:R,P=fgt(y,i,n),F=E,N=1,b=R.megatextureIndex,G=v.megatextureIndex;u[Z+0]=P,u[Z+1]=F,u[Z+2]=N,u[Z+3]=b,u[Z+4]=G,d[S]=QD.LEAF<<16|l}else{let Z=y.renderableKeyframeNodePrevious,E=y.level-Z.spatialNode.level===0?QD.LEAF:QD.PACKED_LEAF_FROM_PARENT;d[S]=E<<16|Z.megatextureIndex}l++}}let p=e.rootNode;p.computeSurroundingRenderableKeyframeNodes(o),p.isRenderable(r)&&f(p,0,0,0,0),hgt(d,9,e.internalNodeTilesPerRow,e.internalNodeTexture),s&&pgt(u,2,e.leafNodeTilesPerRow,e.leafNodeTexture)}function fgt(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 w.clamp(s,0,1)}function hgt(e,t,n,i){let o=ke.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)),l=new Uint8Array(s*a*o);for(let f=0;f<e.length;f++){let p=e[f],y=f*o;for(let h=0;h<o;h++)l[y+h]=p>>>h*8&255}let u={source:{arrayBufferView:l,width:s,height:a},xOffset:0,yOffset:0};i.copyFrom(u)}function pgt(e,t,n,i){let o=ke.componentsLength(i.pixelFormat),r=5,s=Math.ceil(e.length/r),a=Math.max(1,t*Math.min(s,n)),l=Math.max(1,Math.ceil(s/n)),d=new Uint8Array(a*l*o);for(let p=0;p<s;p++){let y=e[p*r+0],h=e[p*r+1],g=e[p*r+2],x=e[p*r+3],S=e[p*r+4],V=w.clamp(Math.floor(65536*y),0,65535);d[p*8+0]=V>>>0&255,d[p*8+1]=V>>>8&255,d[p*8+2]=h&255,d[p*8+3]=g&255,d[p*8+4]=x>>>0&255,d[p*8+5]=x>>>8&255,d[p*8+6]=S>>>0&255,d[p*8+7]=S>>>8&255}let f={source:{arrayBufferView:d,width:a,height:l},xOffset:0,yOffset:0};i.copyFrom(f)}function bgt(e,t,n,i){let o=0,r=n.length;for(let s=0;s<r;s++){let a=n[s],l=i[s],d=lt.getComponentCount(a);o+=TL.getApproximateTextureMemoryByteLength(e,t,d,l)}return o}var h9=Mg;function fp(e){e=e??z.EMPTY_OBJECT,this._ready=!1,this._provider=e.provider??fp.DefaultProvider,this._traversal=void 0,this._statistics=new pf,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=M.clone(e.modelMatrix??M.IDENTITY),this._exaggeratedModelMatrix=M.clone(this._modelMatrix),this._compoundModelMatrix=new M,this._compoundModelMatrixOld=new M,this._customShader=e.customShader??fp.DefaultCustomShader,this._customShaderCompilationEvent=new ye,this._shaderDirty=!0,this._drawCommand=void 0,this._drawCommandPick=void 0,this._pickId=void 0,this._clock=e.clock,this._transformPositionWorldToUv=new M,this._transformPositionUvToWorld=new M,this._transformDirectionWorldToLocal=new te,this._transformNormalLocalToWorld=new te,this._nearestSampling=!1,this._levelBlendFactor=0,this._stepSizeMultiplier=1,this._depthTest=!0,this._useLogDepth=void 0,this._screenSpaceError=4,this._debugPolylines=new df,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 M,transformPositionUvToView:new M,transformDirectionViewToLocal:new te,transformNormalLocalToWorld:new te,cameraPositionUv:new m,ndcSpaceAxisAlignedBoundingBox:new ce,clippingPlanesTexture:void 0,clippingPlanesMatrix:new M,stepSize:0,pickColor:new Y},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 ye,this.tileVisible=new ye,this.tileFailed=new ye,this.tileUnload=new ye,this.loadProgress=new ye,this.allTilesLoaded=new ye,this.initialTilesLoaded=new ye;let i=this._provider;ygt(this,i)}function ygt(e,t){let{shape:n,minBounds:i=La.getMinBounds(n),maxBounds:o=La.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=M.clone(e._modelMatrix,e._exaggeratedModelMatrix),KTe(e,t);let r=La.getShapeConstructor(n);e._shape=new r,e._shapeVisible=JTe(e,e._shape,t)}Object.defineProperties(fp.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){C.typeOf.object("modelMatrix",e),this._modelMatrix=M.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){C.typeOf.bool("show",e),this._disableRender=!e}},disableUpdate:{get:function(){return this._disableUpdate},set:function(e){C.typeOf.bool("disableUpdate",e),this._disableUpdate=e}},debugDraw:{get:function(){return this._debugDraw},set:function(e){C.typeOf.bool("debugDraw",e),this._debugDraw=e}},depthTest:{get:function(){return this._depthTest},set:function(e){C.typeOf.bool("depthTest",e),this._depthTest!==e&&(this._depthTest=e,this._shaderDirty=!0)}},nearestSampling:{get:function(){return this._nearestSampling},set:function(e){C.typeOf.bool("nearestSampling",e),this._nearestSampling!==e&&(this._nearestSampling=e,this._shaderDirty=!0)}},levelBlendFactor:{get:function(){return this._levelBlendFactor},set:function(e){C.typeOf.number("levelBlendFactor",e),this._levelBlendFactor=w.clamp(e,0,1)}},screenSpaceError:{get:function(){return this._screenSpaceError},set:function(e){C.typeOf.number("screenSpaceError",e),this._screenSpaceError=e}},stepSize:{get:function(){return this._stepSizeMultiplier},set:function(e){C.typeOf.number("stepSize",e),this._stepSizeMultiplier=e}},minBounds:{get:function(){return this._minBounds},set:function(e){C.defined("minBounds",e),this._minBounds=m.clone(e,this._minBounds)}},maxBounds:{get:function(){return this._maxBounds},set:function(e){C.defined("maxBounds",e),this._maxBounds=m.clone(e,this._maxBounds)}},minClippingBounds:{get:function(){return this._minClippingBounds},set:function(e){C.defined("minClippingBounds",e),this._minClippingBounds=m.clone(e,this._minClippingBounds)}},maxClippingBounds:{get:function(){return this._maxClippingBounds},set:function(e){C.defined("maxClippingBounds",e),this._maxClippingBounds=m.clone(e,this._maxClippingBounds)}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){hs.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];c(e)?this._customShader=e:this._customShader=fp.DefaultCustomShader,this._shaderDirty=!0}}},customShaderCompilationEvent:{get:function(){return this._customShaderCompilationEvent}},statistics:{get:function(){return this._statistics}}});var ggt=new ce,xgt=new ce,_gt=new m,Tgt=new m,Sgt=new te,Cgt=new te,Vgt=new M,Lgt=new M,Zgt=new M,Rgt=M.fromRotationTranslation(te.fromUniformScale(.5,new te),new m(.5,.5,.5),new M),Ggt=M.fromRotationTranslation(te.fromUniformScale(2,new te),new m(-1,-1,-1),new M);fp.prototype.update=function(e){let t=this._provider;this._customShader.update(e);let n=e.context;if(!this._ready){Pgt(this,t,n),e.afterRender.push(()=>(this._ready=!0,!0));return}Wgt(this,e);let i=KTe(this,t),o=this._shape;if(i&&(this._shapeVisible=JTe(this,o,t),Fgt(this,o)&&(this._shaderDirty=!0)),!this._shapeVisible)return;let r=Agt(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&&Ygt(this,e),this._disableRender))return;this._useLogDepth!==e.useLogDepth&&(this._useLogDepth=e.useLogDepth,this._shaderDirty=!0),Mgt(this,e)&&(this._shaderDirty=!0);let d=s.leafNodeTexture,u=this._uniforms;c(d)&&(u.octreeLeafNodeTexture=s.leafNodeTexture,u.octreeLeafNodeTexelSizeUv=D.clone(s.leafNodeTexelSizeUv,u.octreeLeafNodeTexelSizeUv),u.octreeLeafNodeTilesPerRow=s.leafNodeTilesPerRow),this._shaderDirty&&(s9(this,n),this._shaderDirty=!1);let f=n.uniformState.viewProjection,p=o.orientedBoundingBox,y=Ugt(p,f,xgt);if(y.x===1||y.y===1||y.z===-1||y.w===-1)return;u.ndcSpaceAxisAlignedBoundingBox=ce.clone(y,u.ndcSpaceAxisAlignedBoundingBox);let g=n.uniformState.inverseView;u.transformPositionViewToUv=M.multiplyTransformation(this._transformPositionWorldToUv,g,u.transformPositionViewToUv);let x=n.uniformState.view;u.transformPositionUvToView=M.multiplyTransformation(x,this._transformPositionUvToWorld,u.transformPositionUvToView);let S=n.uniformState.inverseViewRotation;u.transformDirectionViewToLocal=te.multiply(this._transformDirectionWorldToLocal,S,u.transformDirectionViewToLocal),u.transformNormalLocalToWorld=te.clone(this._transformNormalLocalToWorld,u.transformNormalLocalToWorld);let V=e.camera.positionWC;u.cameraPositionUv=M.multiplyByPoint(this._transformPositionWorldToUv,V,u.cameraPositionUv),u.stepSize=this._stepSizeMultiplier;let Z=e.passes.pick?this._drawCommandPick:e.passes.pickVoxel?this._drawCommandPickVoxel:this._drawCommand;Z.boundingVolume=o.boundingSphere,e.commandList.push(Z)};var Egt=new m,M8=new m,Xgt=new pe,Igt=new m;function Wgt(e,t){if(e._exaggeratedMinBounds=m.clone(e._minBounds,e._exaggeratedMinBounds),e._exaggeratedMaxBounds=m.clone(e._maxBounds,e._exaggeratedMaxBounds),e.shape===La.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,Egt);e._exaggeratedModelMatrix=M.multiplyByScale(e._modelMatrix,n,e._exaggeratedModelMatrix),e._exaggeratedModelMatrix=M.multiplyByTranslation(e._exaggeratedModelMatrix,wgt(e,t),e._exaggeratedModelMatrix)}}function wgt(e,t){let{shapeTransform:n=M.IDENTITY,globalTransform:i=M.IDENTITY}=e._provider,o=M.getTranslation(n,M8),r=M.multiplyByPoint(e._modelMatrix,o,M8),s=M.multiplyByPoint(i,r,M8),l=re.WGS84.cartesianToCartographic(s,Xgt),d=0;c(l)&&(d=l.height);let u=Lr.getHeight(d,t.verticalExaggeration,t.verticalExaggerationRelativeHeight);return m.fromElements(0,0,(u-d)/t.verticalExaggeration,Igt)}function Pgt(e,t,n){let i=e._uniforms;e._pickId=n.createPickId({primitive:e}),i.pickColor=Y.clone(e._pickId.color,i.pickColor);let{shaderDefines:o,shaderUniforms:r}=e._shape;e._shapeDefinesOld=He(o,!0);let s=e._uniformMap;for(let l in r)if(r.hasOwnProperty(l)){let d=`u_${l}`;c(s[d])&&ht(`VoxelPrimitive: Uniform name "${d}" is already defined`),s[d]=function(){return r[l]}}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===gm.Y_UP){let l=e._inputDimensions.y;e._inputDimensions.y=e._inputDimensions.z,e._inputDimensions.z=l}i.inputDimensions=m.clone(e._inputDimensions,i.inputDimensions);let a=t.keyframeCount??1;e._traversal=new h9(e,n,a),e.statistics.texturesByteLength=e._traversal.textureMemoryByteLength,vgt(e._traversal,i)}function KTe(e,t){let n=t.shapeTransform??M.IDENTITY,i=t.globalTransform??M.IDENTITY;return M.multiplyTransformation(i,e._exaggeratedModelMatrix,e._compoundModelMatrix),M.multiplyTransformation(e._compoundModelMatrix,n,e._compoundModelMatrix),fS(e,"_compoundModelMatrix","_compoundModelMatrixOld")+fS(e,"_minBounds","_minBoundsOld")+fS(e,"_maxBounds","_maxBoundsOld")+fS(e,"_exaggeratedMinBounds","_exaggeratedMinBoundsOld")+fS(e,"_exaggeratedMaxBounds","_exaggeratedMaxBoundsOld")+fS(e,"_minClippingBounds","_minClippingBoundsOld")+fS(e,"_maxClippingBounds","_maxClippingBoundsOld")>0}function fS(e,t,n){let i=e[t],o=e[n],r=!i.equals(o);return r&&i.clone(o),r?1:0}function JTe(e,t,n){if(!t.update(e._compoundModelMatrix,e._exaggeratedMinBounds,e._exaggeratedMaxBounds,e.minClippingBounds,e.maxClippingBounds))return!1;let o=t.shapeTransform,r=M.inverse(o,Vgt),s=M.getRotation(o,Sgt),a=M.getScale(o,_gt),l=m.maximumComponent(a),d=m.divideByScalar(a,l,Tgt),u=te.multiplyByScale(s,d,Cgt);return e._transformPositionWorldToUv=M.multiplyTransformation(Rgt,r,e._transformPositionWorldToUv),e._transformPositionUvToWorld=M.multiplyTransformation(o,Ggt,e._transformPositionUvToWorld),e._transformDirectionWorldToLocal=M.getMatrix3(r,e._transformDirectionWorldToLocal),e._transformNormalLocalToWorld=te.inverseTranspose(u,e._transformNormalLocalToWorld),!0}function vgt(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 Fgt(e,t){let n=t.shaderDefines,i=Object.keys(n).some(o=>n[o]!==e._shapeDefinesOld[o]);return i&&(e._shapeDefinesOld=He(n,!0)),i}function Agt(e,t){if(!c(e)||!c(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=ee.secondsDifference(i.stop,i.start),a=ee.secondsDifference(n,i.start)/r;return o+a}function Mgt(e,t){let n=e.clippingPlanes;if(!c(n))return!1;n.update(t);let{clippingPlanesState:i,enabled:o}=n;if(o){let r=e._uniforms;r.clippingPlanesTexture=n.texture,r.clippingPlanesMatrix=M.transpose(M.multiplyTransformation(M.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)}fp.prototype.isDestroyed=function(){return!1};fp.prototype.destroy=function(){let e=this._drawCommand;c(e)&&(e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy());let t=this._drawCommandPick;return c(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(),he(this)};var zTe=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)),Ngt=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),kgt=new Array(new ce,new ce,new ce,new ce,new ce,new ce,new ce,new ce);function Ugt(e,t,n){let i=M.fromRotationTranslation(e.halfAxes,e.center,Lgt),o=M.multiply(t,i,Zgt),r=+Number.MAX_VALUE,s=-Number.MAX_VALUE,a=+Number.MAX_VALUE,l=-Number.MAX_VALUE,d,u=kgt,f=zTe.length;for(d=0;d<f;d++)M.multiplyByVector(o,zTe[d],u[d]);for(d=0;d<f;d++){let p=u[d];if(p.z>=-p.w){let y=p.x/p.w,h=p.y/p.w;r=Math.min(r,y),s=Math.max(s,y),a=Math.min(a,h),l=Math.max(l,h)}else for(let y=0;y<3;y++){let h=Ngt[d*3+y],g=u[h];if(g.z>=-g.w){let x=p.z+p.w,S=g.z+g.w,V=x/(x-S),Z=ce.lerp(p,g,V,ggt),R=Z.x/Z.w,E=Z.y/Z.w;r=Math.min(r,R),s=Math.max(s,R),a=Math.min(a,E),l=Math.max(l,E)}}}return r=w.clamp(r,-1,1),a=w.clamp(a,-1,1),s=w.clamp(s,-1,1),l=w.clamp(l,-1,1),n=ce.fromElements(r,a,s,l,n),n}var N8=3e7,Ogt=new m(N8,0,0),Dgt=new m(0,N8,0),Bgt=new m(0,0,N8);function Ygt(e,t){let n=e._traversal,i=e._debugPolylines;i.removeAll();function o(l,d,u,f){i.add({positions:[l,d],width:f,material:zi.fromType("Color",{color:u})})}function r(l,d,u){let f=l.computeCorners();o(f[0],f[1],d,u),o(f[2],f[3],d,u),o(f[4],f[5],d,u),o(f[6],f[7],d,u),o(f[0],f[2],d,u),o(f[4],f[6],d,u),o(f[1],f[3],d,u),o(f[5],f[7],d,u),o(f[0],f[4],d,u),o(f[2],f[6],d,u),o(f[1],f[5],d,u),o(f[3],f[7],d,u)}function s(l){if(!n.isRenderable(l))return;let d=l.level,f=Math.max(1,5/Math.pow(2,d)),y=[Y.RED,Y.LIME,Y.BLUE][d%3];if(r(l.orientedBoundingBox,y,f),c(l.children))for(let h=0;h<8;h++)s(l.children[h])}r(e._shape.orientedBoundingBox,Y.WHITE,5),s(n.rootNode);let a=10;o(m.ZERO,Ogt,Y.RED,a),o(m.ZERO,Dgt,Y.LIME,a),o(m.ZERO,Bgt,Y.BLUE,a),i.update(t)}fp.DefaultCustomShader=new aS({fragmentShaderText:`void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) { material.diffuse = vec3(1.0); material.alpha = 1.0; }`});function QTe(){this.ready=!0,this.shape=La.BOX,this.dimensions=new m(1,1,1),this.names=["data"],this.types=[lt.SCALAR],this.componentTypes=[At.FLOAT32],this.maximumTileCount=1}QTe.prototype.requestData=function(e){if((c(e)?e.tileLevel??0:0)>=1)return;let n=new cS({metadata:[new Float32Array(1)]});return Promise.resolve(n)};fp.DefaultProvider=new QTe;var Ng=fp;var R8i=_(T(),1);function Hgt(e,t,n,i){if(!c(e)||c(t)&&e.id!==t)return;let r=(e.classes||{})[n];if(!c(r))return;let a=(r.properties||{})[i];if(c(a))return a}var p9=Hgt;var E8i=_(T(),1);function zgt(e,t,n,i,o){this.schemaId=e,this.className=t,this.propertyName=n,this.classProperty=i,this.metadataProperty=o}var b9=zgt;var W8i=_(T(),1);function Kgt(e,t,n){if(!c(e))return;let i=e.propertyTextures;for(let o of i)if(o.class.id===t){let a=o.properties[n];if(c(a))return a}}var y9=Kgt;var qD=function(e){return function(){e.frameState.afterRender.push(function(){e.requestRender()})}};function li(e){e=e??z.EMPTY_OBJECT;let t=e.canvas,n=e.creditContainer,i=e.creditViewport,o=He(e.contextOptions);if(!c(t))throw new L("options and options.canvas are required.");let r=c(n),s=new lE(t,o);r||(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)),c(i)||(i=t.parentNode),this._id=Hn(),this._jobScheduler=new KF,this._frameState=new HF(s,new AF(n,"\u2022",i),this._jobScheduler),this._frameState.scene3DOnly=e.scene3DOnly??!1,this._removeCreditContainer=!r,this._creditContainer=n,this._canvas=t,this._context=s,this._computeEngine=new bZ(s),this._ellipsoid=e.ellipsoid??re.default,this._globe=void 0,this._globeTranslucencyState=new zF,this._primitives=new al,this._groundPrimitives=new al,this._globeHeight=void 0,this._globeHeightDirty=!0,this._cameraUnderground=!1,this._removeUpdateHeightCallback=void 0,this._logDepthBuffer=li.defaultLogDepthBuffer&&s.fragmentDepth,this._logDepthBufferDirty=!0,this._tweens=new tS,this._shaderFrameCount=0,this._sunPostProcess=void 0,this._computeCommandList=[],this._overlayCommandList=[],this._useOIT=e.orderIndependentTranslucency??!0,this._executeOITFunction=void 0,this._depthPlane=new DF(e.depthPlaneEllipsoidOffset),this._clearColorCommand=new ti({color:new Y,stencil:0,owner:this}),this._depthClearCommand=new ti({depth:1,owner:this}),this._stencilClearCommand=new ti({stencil:0}),this._classificationStencilClearCommand=new ti({stencil:0,renderState:Oe.fromCache({stencilMask:kt.CLASSIFICATION_MASK})}),this._depthOnlyRenderStateCache={},this._transitioner=new wA(this),this._preUpdate=new ye,this._postUpdate=new ye,this._renderError=new ye,this._preRender=new ye,this._postRender=new ye,this._minimumDisableDepthTestDistance=0,this._debugInspector=new OA,this._msaaSamples=e.msaaSamples??4,this.rethrowRenderErrors=!1,this.completeMorphOnUserInput=!0,this.morphStart=new ye,this.morphComplete=new ye,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=Y.clone(Y.BLACK),this._mode=se.SCENE3D,this._mapProjection=c(e.mapProjection)?e.mapProjection:new Xi(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 C_,this.fog=new YF,this.fog.enabled=re.WGS84.equals(this._ellipsoid),re.WGS84.equals(this._ellipsoid)||(oo.DEFAULT_VIEW_RECTANGLE=de.fromDegrees(-45,-45,45,45)),this._shadowMapCamera=new oo(this),this.shadowMap=new g0({context:s,lightCamera:this._shadowMapCamera,enabled:e.shadows??!1}),this.invertClassification=!1,this.invertClassificationColor=Y.clone(Y.WHITE),this._actualInvertClassificationColor=Y.clone(this._invertClassificationColor),this._invertClassification=new fL,this.focalLength=void 0,this.eyeSeparation=void 0,this.postProcessStages=new XA,this._brdfLutGenerator=new IF,this._performanceDisplay=void 0,this._debugVolume=void 0,this._screenSpaceCameraController=new AA(this),this._cameraUnderground=!1,this._mapMode2D=e.mapMode2D??ed.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=ic.requestCompletedEvent.addEventListener(qD(this)),this._removeTaskProcessorListenerCallback=gi.taskCompletedEvent.addEventListener(qD(this)),this._removeGlobeCallbacks=[],this._removeTerrainProviderReadyListener=void 0;let a=new je(0,0,s.drawingBufferWidth,s.drawingBufferHeight),l=new oo(this);this._logDepthBuffer&&(l.frustum.near=.1,l.frustum.far=1e10),this.preloadFlightCamera=new oo(this),this.preloadFlightCullingVolume=void 0,this._picking=new cA(this),this._defaultView=new zT(this,l,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 Xp,tSe(this,0,ee.now()),this.updateFrameState(),this.initializeFrame()}li.defaultLogDepthBuffer=!0;function Jgt(e,t){for(let i=0;i<e._removeGlobeCallbacks.length;++i)e._removeGlobeCallbacks[i]();e._removeGlobeCallbacks.length=0;let n=[];c(t)&&(n.push(t.imageryLayersUpdatedEvent.addEventListener(qD(e))),n.push(t.terrainProviderChanged.addEventListener(qD(e)))),e._removeGlobeCallbacks=n}Object.defineProperties(li.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 mt.maximumAliasedLineWidth}},maximumCubeMapSize:{get:function(){return mt.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 Bm.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,Jgt(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(c(this.globe))return this.globe.imageryLayers}},terrainProvider:{get:function(){if(c(this.globe))return this.globe.terrainProvider},set:function(e){this._removeTerrainProviderReadyListener=this._removeTerrainProviderReadyListener&&this._removeTerrainProviderReadyListener(),c(this.globe)&&(this.globe.terrainProvider=e)}},terrainProviderChanged:{get:function(){if(c(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){if(this.scene3DOnly&&e!==se.SCENE3D)throw new L("Only SceneMode.SCENE3D is valid when scene3DOnly is true.");if(e===se.SCENE2D)this.morphTo2D(0);else if(e===se.SCENE3D)this.morphTo3D(0);else if(e===se.COLUMBUS_VIEW)this.morphToColumbusView(0);else throw new L("value must be a valid SceneMode enumeration.");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){if(this.camera.frustum instanceof sn)throw new L("VR is unsupported with an orthographic projection.");this._useWebVR=e,this._useWebVR?(this._frameState.creditDisplay.container.style.visibility="hidden",this._cameraVR=new oo(this),c(this._deviceOrientationCameraController)||(this._deviceOrientationCameraController=new BF(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){if(!c(e)||e<0)throw new L("minimumDisableDepthTestDistance must be greater than or equal to 0.0.");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,mt.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}}});li.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 Qgt(e,t){let n=e.pickedMetadataInfo,i=t.pickedMetadataInfo;return n?.schemaId!==i?.schemaId||n?.className!==i?.className||n?.propertyName!==i?.propertyName}function jTe(e,t,n){let i=e._frameState,o=e._context,r=e._view.oit,{lightShadowMaps:s,lightShadowsEnabled:a}=i.shadowState,l=t.derivedCommands;c(t.pickId)&&(l.picking=rp.createPickDerivedCommand(e,t,o,l.picking)),i.pickingMetadata&&t.pickMetadataAllowed&&(t.pickedMetadataInfo=i.pickedMetadataInfo,c(t.pickedMetadataInfo)&&(l.pickingMetadata=rp.createPickMetadataDerivedCommand(e,t,o,l.pickingMetadata))),t.pickOnly||(l.depth=rp.createDepthOnlyDerivedCommand(e,t,o,l.depth)),l.originalCommand=t,e._hdr&&(l.hdr=rp.createHdrCommand(t,o,l.hdr),t=l.hdr.command,l=t.derivedCommands),a&&t.receiveShadows&&(l.shadows=g0.createReceiveDerivedCommand(s,t,n,o,l.shadows)),t.pass===Xe.TRANSLUCENT&&c(r)&&r.isSupported()&&(a&&t.receiveShadows?(l.oit=c(l.oit)?l.oit:{},l.oit.shadows=r.createDerivedCommands(l.shadows.receiveCommand,o,l.oit.shadows)):l.oit=r.createDerivedCommands(t,o,l.oit))}li.prototype.updateDerivedCommands=function(e){let{derivedCommands:t}=e;if(!c(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 l=this._hdr,d=c(t.logDepth),u=c(t.hdr),f=c(t.originalCommand),p=o&&!d,y=l&&!u,h=(!o||!l)&&!f,g=n.pickingMetadata&&Qgt(e,n);if(e.dirty=e.dirty||p||y||h||g,!e.dirty)return;e.dirty=!1;let{shadowsEnabled:x,shadowMaps:S}=i;x&&e.castShadows&&(t.shadows=g0.createCastDerivedCommand(S,e,s,r,t.shadows)),(d||p)&&(t.logDepth=rp.createLogDepthCommand(e,r,t.logDepth),jTe(this,t.logDepth.command,s)),(f||h)&&jTe(this,e,s)};var jgt=new hm({pass:Fo.RENDER}),k8=new hm({pass:Fo.PRELOAD}),U8=new hm({pass:Fo.PRELOAD_FLIGHT}),qgt=new hm({pass:Fo.REQUEST_RENDER_MODE_DEFER_CHECK}),qTe=new ue,O8;function $gt(e){if(!(e._mode!==se.SCENE3D||!e.globe?.show||e._cameraUnderground||e._globeTranslucencyState.translucent))return qTe.radius=e.ellipsoid.minimumRadius+e.frameState.minimumTerrainHeight,O8=EF.fromBoundingSphere(qTe,e.camera.positionWC,O8),O8}li.prototype.clearPasses=function(e){e.render=!1,e.pick=!1,e.pickVoxel=!1,e.depth=!1,e.postProcess=!1,e.offscreen=!1};function tSe(e,t,n){let i=e._frameState;i.frameNumber=t,i.time=ee.clone(n,i.time)}li.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=$gt(this),t.minimumTerrainHeight=0,t.minimumDisableDepthTestDistance=this._minimumDisableDepthTestDistance,t.invertClassification=this.invertClassification,t.useLogDepth=this._logDepthBuffer&&!(this.camera.frustum instanceof sn||this.camera.frustum instanceof Oo),t.light=this.light,t.cameraUnderground=this._cameraUnderground,t.globeTranslucencyState=this._globeTranslucencyState;let{globe:n}=this;c(n)&&n._terrainExaggerationChanged&&(this.verticalExaggeration=n._terrainExaggeration,this.verticalExaggerationRelativeHeight=n._terrainExaggerationRelativeHeight,n._terrainExaggerationChanged=!1),t.verticalExaggeration=this.verticalExaggeration,t.verticalExaggerationRelativeHeight=this.verticalExaggerationRelativeHeight,c(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=Y.clone(this.invertClassificationColor,this._actualInvertClassificationColor),fL.isTranslucencySupported(this._context)||(this._actualInvertClassificationColor.alpha=1),t.invertClassificationColor=this._actualInvertClassificationColor,c(this.globe)?t.maximumScreenSpaceError=this.globe.maximumScreenSpaceError:t.maximumScreenSpaceError=2,this.clearPasses(t.passes),t.tilesetPassState=void 0};li.prototype.isVisible=function(e,t,n){if(!c(t))return!1;let{boundingVolume:i}=t;return!c(i)||!t.cull?!0:e.computeVisibility(i)===zt.OUTSIDE?!1:!c(n)||!t.occlude||!i.isOccluded(n)};var jD=new M(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);jD=M.inverseTransformation(jD,jD);function ext(e,t,n,i){let o=t._frameState,r=o.context,s=e.boundingVolume;c(t._debugVolume)&&t._debugVolume.destroy();let a=m.clone(s.center);if(o.mode!==se.SCENE3D){a=M.multiplyByPoint(jD,a,a);let h=o.mapProjection,g=h.unproject(a);a=h.ellipsoid.cartographicToCartesian(g)}let l,d,{radius:u}=s;c(u)?(l=Js.createGeometry(new Js({radii:new m(u,u,u),vertexFormat:an.FLAT_VERTEX_FORMAT})),d=M.fromTranslation(a)):(l=Wa.createGeometry(Wa.fromDimensions({dimensions:new m(2,2,2),vertexFormat:an.FLAT_VERTEX_FORMAT})),d=M.fromRotationTranslation(s.halfAxes,a,new M)),t._debugVolume=new In({geometryInstances:new Rt({geometry:An.toWireframe(l),modelMatrix:d,attributes:{color:new Yt(1,0,0,1)}}),appearance:new an({flat:!0,translucent:!1}),asynchronous:!1});let f=o.commandList,p=o.commandList=[];t._debugVolume.update(o),e=p[0],o.useLogDepth&&(e=rp.createLogDepthCommand(e,r).command);let y;c(i)&&(y=n.framebuffer,n.framebuffer=i),e.execute(r,n),c(y)&&(n.framebuffer=y),o.commandList=f}function hp(e,t,n,i){let o=t._frameState,r=t._context;if(c(t.debugCommandFilter)&&!t.debugCommandFilter(e))return;if(e instanceof ti){e.execute(r,n);return}e.debugShowBoundingVolume&&c(e.boundingVolume)&&ext(e,t,n,i),o.useLogDepth&&c(e.derivedCommands.logDepth)&&(e=e.derivedCommands.logDepth.command);let s=o.passes;if(!s.pick&&!s.pickVoxel&&!s.depth&&t._hdr&&c(e.derivedCommands)&&c(e.derivedCommands.hdr)&&(e=e.derivedCommands.hdr.command),s.pick||s.depth){if(s.pick&&!s.depth){if(o.pickingMetadata&&c(e.derivedCommands.pickingMetadata)){e=e.derivedCommands.pickingMetadata.pickMetadataCommand,e.execute(r,n);return}if(!o.pickingMetadata&&c(e.derivedCommands.picking)){e=e.derivedCommands.picking.pickCommand,e.execute(r,n);return}}else if(c(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&&c(e.derivedCommands.shadows)?e.derivedCommands.shadows.receiveCommand.execute(r,n):e.execute(r,n)}function $Te(e,t,n){let{derivedCommands:i}=e;if(!c(i))return;let o=t._frameState,r=t._context;o.useLogDepth&&c(i.logDepth)&&(e=i.logDepth.command);let{picking:s,pickingMetadata:a,depth:l}=e.derivedCommands;c(a)&&(e=i.pickingMetadata.pickMetadataCommand,e.execute(r,n)),c(s)?(e=s.pickCommand,e.execute(r,n)):c(l)&&(e=l.depthOnlyCommand,e.execute(r,n))}function nSe(e,t,n){return t.boundingVolume.distanceSquaredTo(n)-e.boundingVolume.distanceSquaredTo(n)}function txt(e,t,n){return e.boundingVolume.distanceSquaredTo(n)-t.boundingVolume.distanceSquaredTo(n)+w.EPSILON12}function nxt(e,t,n,i,o){h0(i,nSe,e.camera.positionWC),c(o)&&t(o.unclassifiedCommand,e,n);for(let r=0;r<i.length;++r)t(i[r],e,n)}function ixt(e,t,n,i,o){h0(i,txt,e.camera.positionWC),c(o)&&t(o.unclassifiedCommand,e,n);for(let r=0;r<i.length;++r)t(i[r],e,n)}function oxt(e,t,n){e.context.uniformState.updatePass(Xe.VOXELS);let i=n.commands[Xe.VOXELS];i.length=n.indices[Xe.VOXELS],h0(i,nSe,e.camera.positionWC);for(let o=0;o<i.length;++o)hp(i[o],e,t)}var rxt=new Ci,sxt=new hl,axt=new sn,cxt=new Oo;function lxt(e){let{frustum:t}=e;return c(t.fov)?t.clone(rxt):c(t.infiniteProjectionMatrix)?t.clone(sxt):c(t.width)?t.clone(axt):t.clone(cxt)}function dxt(e){if(e._environmentState.useOIT){if(!c(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?nxt:ixt}function uxt(e,t,n){let{frameState:i,context:o}=e,{pick:r,pickVoxel:s}=i.passes,a=r||s,l;!a&&e._environmentState.useInvertClassification&&i.invertClassificationColor.alpha<1&&(l=e._invertClassification);let d=dxt(e);o.uniformState.updatePass(Xe.TRANSLUCENT);let u=n.commands[Xe.TRANSLUCENT];u.length=n.indices[Xe.TRANSLUCENT],d(e,hp,t,u,l)}function mxt(e,t,n){let{translucentTileClassification:i,globeDepth:o}=e._view;if(!(n.indices[Xe.CESIUM_3D_TILE_CLASSIFICATION]>0)||!i.isSupported())return;let s=n.commands[Xe.TRANSLUCENT];i.executeTranslucentCommands(e,hp,t,s,o.depthStencilTexture),i.executeClassificationCommands(e,hp,t,n)}function B8(e,t){let{camera:n,context:i,frameState:o}=e,{uniformState:r}=i;r.updateCamera(n);let s=lxt(n);s.near=n.frustum.near,s.far=n.frustum.far;let a=o.passes,l=a.pick||a.pickVoxel;l||fxt(e,t);let{clearGlobeDepth:d,renderTranslucentDepthForPick:u,useDepthPlane:f,useGlobeDepthFramebuffer:p,useInvertClassification:y,usePostProcessSelected:h}=e._environmentState,{globeDepth:g,globeTranslucencyFramebuffer:x,sceneFramebuffer:S,frustumCommandsList:V}=e._view,Z=V.length,R=e._globeTranslucencyState,E=e._depthClearCommand,I=e._stencilClearCommand,v=e._classificationStencilClearCommand,P=e._depthPlane,F=n.position.z;function N(G,X){r.updatePass(X);let W=G.commands[X],A=G.indices[X];for(let k=0;k<A;++k)hp(W[k],e,t);return A}function b(G,X){r.updatePass(X);let W=G.commands[X],A=G.indices[X];for(let k=0;k<A;++k)$Te(W[k],e,t)}for(let G=0;G<Z;++G){let X=Z-G-1,W=V[X];e.mode===se.SCENE2D?(n.position.z=F-W.near+1,s.far=Math.max(1,W.far-W.near),s.near=1,r.update(o),r.updateFrustum(s)):(s.near=X!==0?W.near*e.opaqueFrustumNearOffset:W.near,s.far=W.far,r.updateFrustum(s)),E.execute(i,t),i.stencilBuffer&&I.execute(i,t),R.translucent?(r.updatePass(Xe.GLOBE),R.executeGlobeCommands(W,hp,x,e,t)):N(W,Xe.GLOBE),p&&g.executeCopyDepth(i,t),u||(R.translucent?(r.updatePass(Xe.TERRAIN_CLASSIFICATION),R.executeGlobeClassificationCommands(W,hp,x,e,t)):N(W,Xe.TERRAIN_CLASSIFICATION)),d&&(E.execute(i,t),f&&P.execute(i,t));let A;if(!y||l||u)A=N(W,Xe.CESIUM_3D_TILE),A>0&&(p&&(g.prepareColorTextures(i,d),g.executeUpdateDepth(i,t,g.depthStencilTexture)),u||(A=N(W,Xe.CESIUM_3D_TILE_CLASSIFICATION)));else{e._invertClassification.clear(i,t);let B=t.framebuffer;t.framebuffer=e._invertClassification._fbo.framebuffer,A=N(W,Xe.CESIUM_3D_TILE),p&&(e._invertClassification.prepareTextures(i),g.executeUpdateDepth(i,t,e._invertClassification._fbo.getDepthStencilTexture())),A=N(W,Xe.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW),t.framebuffer=B,e._invertClassification.executeClassified(i,t),o.invertClassificationColor.alpha===1&&e._invertClassification.executeUnclassified(i,t),A>0&&i.stencilBuffer&&v.execute(i,t),A=N(W,Xe.CESIUM_3D_TILE_CLASSIFICATION)}if(A>0&&i.stencilBuffer&&I.execute(i,t),oxt(e,t,W),N(W,Xe.OPAQUE),X!==0&&e.mode!==se.SCENE2D&&(s.near=W.near,r.updateFrustum(s)),uxt(e,t,W),mxt(e,t,W),i.depthTexture&&e.useDepthPicking&&(p||u)){let B=e._picking.getPickDepth(e,X);B.update(i,g.depthStencilTexture),B.executeCopyDepth(i,t)}if(l||!h)continue;let k=t.framebuffer;t.framebuffer=S.getIdFramebuffer(),s.near=X!==0?W.near*e.opaqueFrustumNearOffset:W.near,s.far=W.far,r.updateFrustum(s),R.translucent?(r.updatePass(Xe.GLOBE),R.executeGlobeCommands(W,$Te,x,e,t)):b(W,Xe.GLOBE),d&&(E.framebuffer=t.framebuffer,E.execute(i,t),E.framebuffer=void 0),d&&f&&P.execute(i,t),b(W,Xe.CESIUM_3D_TILE),b(W,Xe.OPAQUE),b(W,Xe.TRANSLUCENT),t.framebuffer=k}}function fxt(e,t){let{context:n,environmentState:i,view:o}=e;if(n.uniformState.updatePass(Xe.ENVIRONMENT),c(i.skyBoxCommand)&&hp(i.skyBoxCommand,e,t),i.isSkyAtmosphereVisible&&hp(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 iSe(e){e.context.uniformState.updatePass(Xe.COMPUTE);let t=e._environmentState.sunComputeCommand;c(t)&&t.execute(e._computeEngine);let n=e._computeCommandList;for(let i=0;i<n.length;++i)n[i].execute(e._computeEngine)}function hxt(e,t){e.context.uniformState.updatePass(Xe.OVERLAY);let n=e.context,i=e._overlayCommandList;for(let o=0;o<i.length;++o)i[o].execute(n,t)}function pxt(e,t,n){let{shadowMapCullingVolume:i,isPointLight:o,passes:r}=n,s=r.length,a=[Xe.GLOBE,Xe.CESIUM_3D_TILE,Xe.OPAQUE,Xe.TRANSLUCENT];for(let l=0;l<t.length;++l){let d=t[l];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 f=s-1;f>=0;--f){let p=r[f].cullingVolume;if(e.isVisible(p,d))r[f].commandList.push(d),u=!0;else if(u)break}}}}function oSe(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 l=o[a];if(l.outOfView)continue;let{passes:d}=l;for(let u=0;u<d.length;++u)d[u].commandList.length=0;pxt(e,n,l);for(let u=0;u<d.length;++u){let f=l.passes[u],{camera:p,commandList:y}=f;s.updateCamera(p),l.updatePass(r,u);for(let h=0;h<y.length;++h){let g=y[h];s.updatePass(g.pass);let x=g.derivedCommands.shadows.castCommands[a];hp(x,e,f.passState)}}}}var bxt=new m;li.prototype.updateAndExecuteCommands=function(e,t){Ext(this,e,t),this._environmentState.useWebVR?yxt(this,e,t):this._frameState.mode!==se.SCENE2D||this._mapMode2D===ed.ROTATE?kg(!0,this,e):Zxt(this,e)};function yxt(e,t){let n=e._view,i=n.camera,r=e._environmentState.renderTranslucentDepthForPick;rSe(e),n.createPotentiallyVisibleSet(e),iSe(e),r||oSe(e);let s=t.viewport;s.x=0,s.y=0,s.width=s.width*.5;let a=oo.clone(i,e._cameraVR);a.frustum=i.frustum;let l=i.frustum.near,d=l*(e.focalLength??5),u=e.eyeSeparation??d/30,f=m.multiplyByScalar(a.right,u*.5,bxt);i.frustum.aspectRatio=s.width/s.height;let p=.5*u*l/d;m.add(a.position,f,i.position),i.frustum.xOffset=p,B8(e,t),s.x=s.width,m.subtract(a.position,f,i.position),i.frustum.xOffset=-p,B8(e,t),oo.clone(a,i)}var gxt=new pe(Math.PI,w.PI_OVER_TWO),xxt=new m,_xt=new m,Txt=new M,Sxt=new M,Cxt=new m,Vxt=new m,Lxt=new je;function Zxt(e,t){let{frameState:n,camera:i}=e,{uniformState:o}=e.context,r=t.viewport,s=je.clone(r,Lxt);t.viewport=s;let a=gxt,l=xxt;e.mapProjection.project(a,l);let u=m.clone(i.position,_xt),f=M.clone(i.transform,Sxt),p=i.frustum.clone();i._setTransform(M.IDENTITY);let y=M.computeViewportTransformation(s,0,1,Txt),h=i.frustum.projectionMatrix,g=i.positionWC.y,x=m.fromElements(w.sign(g)*l.x-g,0,-i.positionWC.x,Cxt),S=wt.pointToGLWindowCoordinates(h,y,x,Vxt);S.x=Math.floor(S.x);let V=s.x,Z=s.width;if(g===0||S.x<=V||S.x>=V+Z)kg(!0,e,t);else if(Math.abs(V+Z*.5-S.x)<1)s.width=S.x-s.x,i.position.x*=w.sign(i.position.x),i.frustum.right=0,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),kg(!0,e,t),s.x=S.x,i.position.x=-i.position.x,i.frustum.right=-i.frustum.left,i.frustum.left=0,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),kg(!1,e,t);else if(S.x>V+Z*.5){s.width=S.x-V;let R=i.frustum.right;i.frustum.right=l.x-g,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),kg(!0,e,t),s.x=S.x,s.width=V+Z-S.x,i.position.x=-i.position.x,i.frustum.left=-i.frustum.right,i.frustum.right=R-i.frustum.right*2,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),kg(!1,e,t)}else{s.x=S.x,s.width=V+Z-S.x;let R=i.frustum.left;i.frustum.left=-l.x-g,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),kg(!0,e,t),s.x=V,s.width=S.x-V,i.position.x=-i.position.x,i.frustum.right=-i.frustum.left,i.frustum.left=R-i.frustum.left*2,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),kg(!1,e,t)}i._setTransform(f),m.clone(u,i.position),i.frustum=p.clone(),t.viewport=r}function kg(e,t,n){let i=t._view,{renderTranslucentDepthForPick:o}=t._environmentState;e||(t.frameState.commandList.length=0),rSe(t),i.createPotentiallyVisibleSet(t),e&&(iSe(t),o||oSe(t)),B8(t,n)}var eSe=new fs;li.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,l=this._globeTranslucencyState;if(!i||this._mode!==se.SCENE2D&&t.camera.frustum instanceof sn||!l.environmentVisible)n.skyAtmosphereCommand=void 0,n.skyBoxCommand=void 0,n.sunDrawCommand=void 0,n.sunComputeCommand=void 0,n.moonCommand=void 0;else{if(c(s)){if(c(a))s.setDynamicLighting(rb.fromGlobeFlags(a)),n.isReadyForAtmosphere=n.isReadyForAtmosphere||!a.show||a._surface._tilesToRender.length>0;else{let S=r.dynamicLighting;s.setDynamicLighting(S),n.isReadyForAtmosphere=!0}n.skyAtmosphereCommand=s.update(e,a),c(n.skyAtmosphereCommand)&&this.updateDerivedCommands(n.skyAtmosphereCommand)}else n.skyAtmosphereCommand=void 0;n.skyBoxCommand=c(this.skyBox)?this.skyBox.update(e,this._hdr):void 0;let x=c(this.sun)?this.sun.update(e,t.passState,this._hdr):void 0;n.sunDrawCommand=c(x)?x.drawCommand:void 0,n.sunComputeCommand=c(x)?x.computeCommand:void 0,n.moonCommand=c(this.moon)?this.moon.update(e):void 0}let d=n.clearGlobeDepth=c(a)&&a.show&&(!a.depthTestAgainstTerrain||this.mode===se.SCENE2D);(n.useDepthPlane=d&&this.mode===se.SCENE3D&&l.useDepthPlane)&&this._depthPlane.update(e),n.renderTranslucentDepthForPick=!1,n.useWebVR=this._useWebVR&&this.mode!==se.SCENE2D&&!o;let f=e.mode===se.SCENE3D&&!l.sunVisibleThroughGlobe?e.occluder:void 0,p=e.cullingVolume,y=eSe.planes;for(let x=0;x<5;++x)y[x]=p.planes[x];p=eSe,n.isSkyAtmosphereVisible=c(n.skyAtmosphereCommand)&&n.isReadyForAtmosphere,n.isSunVisible=this.isVisible(p,n.sunDrawCommand,f),n.isMoonVisible=this.isVisible(p,n.moonCommand,f);let h=this.specularEnvironmentMaps,g=this._specularEnvironmentCubeMap;c(h)&&g?.url!==h?(g=g&&g.destroy(),this._specularEnvironmentCubeMap=new Bm(h)):!c(h)&&c(g)&&(g.destroy(),this._specularEnvironmentCubeMap=void 0),c(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.update(e)};function Rxt(e){let t=e._frameState;e.debugShowFrustumPlanes!==e._debugShowFrustumPlanes&&(e.debugShowFrustumPlanes?e._debugFrustumPlanes=new op({camera:e.camera,updateOnChange:!1,frustumSplits:t.frustumSplits}):e._debugFrustumPlanes=e._debugFrustumPlanes&&e._debugFrustumPlanes.destroy(),e._debugShowFrustumPlanes=e.debugShowFrustumPlanes),c(e._debugFrustumPlanes)&&e._debugFrustumPlanes.update(t)}function Gxt(e){let t=e._frameState,{passes:n,shadowState:i,shadowMaps:o}=t,r=o.length,s=r>0&&!n.pick&&!n.pickVoxel&&e.mode===se.SCENE3D;if(s!==i.shadowsEnabled&&(++i.lastDirtyTime,i.shadowsEnabled=s),i.lightShadowsEnabled=!1,!!s){for(let a=0;a<r;++a)if(o[a]!==i.shadowMaps[a]){++i.lastDirtyTime;break}i.shadowMaps.length=0,i.lightShadowMaps.length=0;for(let a=0;a<r;++a){let l=o[a];l.update(t),i.shadowMaps.push(l),l.fromLightSource&&(i.lightShadowMaps.push(l),i.lightShadowsEnabled=!0),l.dirty&&(++i.lastDirtyTime,l.dirty=!1)}}}function rSe(e){let t=e._frameState;e._groundPrimitives.update(t),e._primitives.update(t),Rxt(e),Gxt(e),e._globe&&e._globe.render(t)}function Ext(e,t,n){let i=e._context,o=e._frameState,r=e._environmentState,s=e._view,a=o.passes,l=a.pick||a.pickVoxel;c(s.globeDepth)&&(s.globeDepth.picking=l);let d=r.useWebVR;r.originalFramebuffer=t.framebuffer,c(e.sun)&&e.sunBloom!==e._sunBloom?(e.sunBloom&&!d?e._sunPostProcess=new kA:c(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy()),e._sunBloom=e.sunBloom):!c(e.sun)&&c(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy(),e._sunBloom=!1);let u=e._clearColorCommand;Y.clone(n,u.color),u.execute(i,t);let f=r.useGlobeDepthFramebuffer=c(s.globeDepth);f&&(s.globeDepth.update(i,t,s.viewport,e.msaaSamples,e._hdr,r.clearGlobeDepth),s.globeDepth.clear(i,t,n));let p=s.oit,y=r.useOIT=!l&&c(p)&&p.isSupported();y&&(p.update(i,t,s.globeDepth.colorFramebufferManager,e._hdr,e.msaaSamples),p.clear(i,t,n),r.useOIT=p.isSupported());let h=e.postProcessStages,g=r.usePostProcess=!l&&(e._hdr||h.length>0||h.ambientOcclusion.enabled||h.fxaa.enabled||h.bloom.enabled);if(r.usePostProcessSelected=!1,g&&(s.sceneFramebuffer.update(i,s.viewport,e._hdr,e.msaaSamples),s.sceneFramebuffer.clear(i,t,n),h.update(i,o.useLogDepth,e._hdr),h.clear(i),g=r.usePostProcess=h.ready,r.usePostProcessSelected=g&&h.hasSelected),r.isSunVisible&&e.sunBloom&&!d?(t.framebuffer=e._sunPostProcess.update(t),e._sunPostProcess.clear(i,t,n)):f?t.framebuffer=s.globeDepth.framebuffer:g&&(t.framebuffer=s.sceneFramebuffer.framebuffer),c(t.framebuffer)&&u.execute(i,t),r.useInvertClassification=!l&&c(t.framebuffer)&&e.invertClassification){let S;if(o.invertClassificationColor.alpha===1&&f&&(S=s.globeDepth.framebuffer),c(S)||i.depthTexture){if(e._invertClassification.previousFramebuffer=S,e._invertClassification.update(i,e.msaaSamples,s.globeDepth.colorFramebufferManager),e._invertClassification.clear(i,t),o.invertClassificationColor.alpha<1&&y){let V=e._invertClassification.unclassifiedCommand,Z=V.derivedCommands;Z.oit=p.createDerivedCommands(V,i,Z.oit)}}else r.useInvertClassification=!1}e._globeTranslucencyState.translucent&&s.globeTranslucencyFramebuffer.updateAndClear(e._hdr,s.viewport,i,t)}li.prototype.resolveFramebuffers=function(e){let t=this._context,n=this._environmentState,i=this._view,{globeDepth:o,translucentTileClassification:r}=i;c(o)&&o.prepareColorTextures(t);let{useOIT:s,useGlobeDepthFramebuffer:a,usePostProcess:l,originalFramebuffer:d}=n,u=a?o.colorFramebufferManager:void 0,f=i.sceneFramebuffer._colorFramebuffer,p=i.sceneFramebuffer.idFramebuffer;if(s&&(e.framebuffer=l?f.framebuffer:d,i.oit.execute(t,e)),r.hasTranslucentDepth&&r.isSupported()&&r.execute(this,e),l){i.sceneFramebuffer.prepareColorTextures(t);let y=f;a&&!s&&(y=u);let h=this.postProcessStages,g=y.getColorTexture(0),x=p.getColorTexture(0),S=(u??f).getDepthStencilTexture();h.execute(t,g,S,x),h.copy(t,d)}!s&&!l&&a&&(e.framebuffer=d,o.executeCopyColor(t,e))};function Xxt(e){let t=e._frameState.afterRender;for(let n=0;n<t.length;++n)t[n]()&&e.requestRender();t.length=0}function Ixt(e){if(e.mode===se.MORPHING)return;let t=e.camera.positionCartographic;return e.getHeight(t)}function sSe(e,t,n){let i=Number.NEGATIVE_INFINITY;if(e instanceof al){let o=e.length;for(let r=0;r<o;++r){let s=e.get(r),a=sSe(s,t,n);c(a)&&a>i&&(i=a)}}else if(e.isCesium3DTileset&&e.show&&e.enableCollision){let o=e.getHeight(t,n);if(c(o)&&o>i)return o}return i}li.prototype.getHeight=function(e,t){if(!c(e))return;let n=t===ze.CLAMP_TO_TERRAIN||t===ze.RELATIVE_TO_TERRAIN,i=t===ze.CLAMP_TO_3D_TILE||t===ze.RELATIVE_TO_3D_TILE;if(!c(e))return;let o=Number.NEGATIVE_INFINITY;if(!n){let s=sSe(this.primitives,e,this);c(s)&&s>o&&(o=s)}let r=this._globe;if(!i&&c(r)&&r.show){let s=r.getHeight(e);s>o&&(o=s)}if(o>Number.NEGATIVE_INFINITY)return o};var D8=new pe;li.prototype.updateHeight=function(e,t,n){C.typeOf.func("callback",t);let i=this._ellipsoid,o=y=>{pe.clone(e,D8);let h;c(y)&&(h=y.height),c(h)||(h=this.getHeight(e,n)),c(h)&&(D8.height=h,t(D8))},r=n===ze.CLAMP_TO_TERRAIN||n===ze.RELATIVE_TO_TERRAIN,s=n===ze.CLAMP_TO_3D_TILE||n===ze.RELATIVE_TO_3D_TILE,a;!s&&c(this.globe)&&(a=this.globe._surface.updateHeight(e,o));let l={},d=y=>{if(r||y.isDestroyed()||!y.isCesium3DTileset)return;let h=y.updateHeight(e,o,i);l[y.id]=h};if(!r){let y=this.primitives.length;for(let h=0;h<y;++h){let g=this.primitives.get(h);d(g)}}let u=this.primitives.primitiveAdded.addEventListener(d),f=this.primitives.primitiveRemoved.addEventListener(y=>{y.isDestroyed()||!y.isCesium3DTileset||(c(l[y.id])&&l[y.id](),delete l[y.id])});return()=>{a=a&&a(),Object.values(l).forEach(y=>y()),l={},u(),f()}};function Wxt(e){let t=e.camera,n=e._mode,i=e._screenSpaceCameraController,o=t.positionCartographic;if(!c(o))return!1;if(!i.onMap()&&o.height<0)return!0;if(n===se.SCENE2D||n===se.MORPHING)return!1;let r=e._globeHeight;return c(r)&&o.height<r}li.prototype.initializeFrame=function(){if(this._shaderFrameCount++===120&&(this._shaderFrameCount=0,this._context.shaderCache.destroyReleasedShaderPrograms(),this._context.textureCache.destroyReleasedTextures()),this._tweens.update(),this._globeHeightDirty){c(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),this._globeHeight=Ixt(this),this._globeHeightDirty=!1;let e=this.camera.positionCartographic;this._removeUpdateHeightCallback=this.updateHeight(e,t=>{this.isDestroyed()||(this._globeHeight=t.height)})}this._cameraUnderground=Wxt(this),this._globeTranslucencyState.update(this),this._screenSpaceCameraController.update(),c(this._deviceOrientationCameraController)&&this._deviceOrientationCameraController.update(),this.camera.update(this._mode),this.camera._updateCameraChanged()};function wxt(e,t){if(e.debugShowFramesPerSecond){if(!c(e._performanceDisplay)){let n=document.createElement("div");n.className="cesium-performanceDisplay-defaultContainer",e._canvas.parentNode.appendChild(n);let o=new p0({container:n});e._performanceDisplay=o,e._performanceContainer=n}e._performanceDisplay.throttled=e.requestRenderMode,e._performanceDisplay.update(t)}else c(e._performanceDisplay)&&(e._performanceDisplay=e._performanceDisplay&&e._performanceDisplay.destroy(),e._performanceContainer.parentNode.removeChild(e._performanceContainer))}function Pxt(e){e._jobScheduler.resetBudgets();let t=e._frameState;e.primitives.prePassesUpdate(t),c(e.globe)&&e.globe.update(t),e._picking.update(),t.creditDisplay.update()}function vxt(e){e.primitives.postPassesUpdate(e._frameState),ic.update()}var Fxt=new Y;function Axt(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=jgt;let r=e.backgroundColor??Y.BLACK;e._hdr&&(r=Y.clone(r,Fxt),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;c(s)&&s.enabled&&(!c(e.light)||e.light instanceof Xp?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 l=o.passState;l.framebuffer=void 0,l.blendingEnabled=void 0,l.scissorTest=void 0,l.viewport=je.clone(a,l.viewport),c(e.globe)&&e.globe.beginFrame(t),e.updateEnvironment(),e.updateAndExecuteCommands(l,r),e.resolveFramebuffers(l),l.framebuffer=void 0,hxt(e,l),c(e.globe)&&(e.globe.endFrame(t),e.globe.tilesLoaded||(e._renderRequested=!0)),n.endFrame()}function hS(e,t){try{t(e)}catch(n){if(e._renderError.raiseEvent(e,n),e.rethrowRenderErrors)throw n}}function Mxt(e){return e._picking.updateMostDetailedRayPicks(e)}li.prototype.render=function(e){this._preUpdate.raiseEvent(this,e);let t=this._frameState;t.newFrame=!1,c(e)||(e=ee.now());let n=this._view.checkForCameraUpdates(this);n&&(this._globeHeightDirty=!0);let i=!this.requestRenderMode||this._renderRequested||n||this._logDepthBufferDirty||this._hdrDirty||this.mode===se.MORPHING;if(!i&&c(this.maximumRenderTimeChange)&&c(this._lastRenderTime)){let o=Math.abs(ee.secondsDifference(this._lastRenderTime,e));i=i||o>this.maximumRenderTimeChange}if(i){this._lastRenderTime=ee.clone(e,this._lastRenderTime),this._renderRequested=!1,this._logDepthBufferDirty=!1,this._hdrDirty=!1;let o=w.incrementWrap(t.frameNumber,15e6,1);tSe(this,o,e),t.newFrame=!0}hS(this,Pxt),this.primitives.show&&(hS(this,Mxt),hS(this,Nxt),hS(this,kxt),i||hS(this,Uxt)),this._postUpdate.raiseEvent(this,e),i&&(this._preRender.raiseEvent(this,e),t.creditDisplay.beginFrame(),hS(this,Axt)),wxt(this,i),hS(this,vxt),Xxt(this),i&&(this._postRender.raiseEvent(this,e),t.creditDisplay.endFrame())};li.prototype.forceRender=function(e){this._renderRequested=!0,this.render(e)};li.prototype.requestRender=function(){this._renderRequested=!0};li.prototype.clampLineWidth=function(e){return Math.max(mt.minimumAliasedLineWidth,Math.min(e,mt.maximumAliasedLineWidth))};li.prototype.pick=function(e,t,n){return this._picking.pick(this,e,t,n)};li.prototype.pickVoxel=function(e,t,n){let i=this.pick(e,t,n);if(!c(i))return;let o=i.primitive;if(!(o instanceof Ng))return;let r=this._picking.pickVoxelCoordinate(this,e,t,n),s=255*r[0]+r[1],a=o._traversal.findKeyframeNode(s);if(!c(a))return;let l=255*r[2]+r[3];return DA.fromKeyframeNode(o,s,l,a)};li.prototype.pickMetadata=function(e,t,n,i){C.typeOf.object("windowPosition",e),C.typeOf.string("className",n),C.typeOf.string("propertyName",i);let o=this.pick(e);if(!c(o))return;let r=o.detail?.model?.structuralMetadata;if(!c(r))return;let s=r.schema,a=p9(s,t,n,i);if(!c(a))return;let l=y9(r,n,i);if(!c(l))return;let d=new b9(t,n,i,a,l);return this._picking.pickMetadata(this,e,d)};li.prototype.pickMetadataSchema=function(e){C.typeOf.object("windowPosition",e);let t=this.pick(e);return c(t)?t.detail?.model?.structuralMetadata?.schema:void 0};li.prototype.pickPositionWorldCoordinates=function(e,t){return this._picking.pickPositionWorldCoordinates(this,e,t)};li.prototype.pickPosition=function(e,t){return this._picking.pickPosition(this,e,t)};li.prototype.drillPick=function(e,t,n,i){return this._picking.drillPick(this,e,t,n,i)};function Nxt(e){let t=e._frameState;k8.camera=t.camera,k8.cullingVolume=t.cullingVolume,e.primitives.updateForPass(t,k8)}function kxt(e){let t=e._frameState;if(!t.camera.canPreloadFlight())return;U8.camera=e.preloadFlightCamera,U8.cullingVolume=e.preloadFlightCullingVolume,e.primitives.updateForPass(t,U8)}function Uxt(e){e.primitives.updateForPass(e._frameState,qgt)}li.prototype.pickFromRay=function(e,t,n){return this._picking.pickFromRay(this,e,t,n)};li.prototype.drillPickFromRay=function(e,t,n,i){return this._picking.drillPickFromRay(this,e,t,n,i)};li.prototype.pickFromRayMostDetailed=function(e,t,n){return this._picking.pickFromRayMostDetailed(this,e,t,n)};li.prototype.drillPickFromRayMostDetailed=function(e,t,n,i){return this._picking.drillPickFromRayMostDetailed(this,e,t,n,i)};li.prototype.sampleHeight=function(e,t,n){return this._picking.sampleHeight(this,e,t,n)};li.prototype.clampToHeight=function(e,t,n,i){return this._picking.clampToHeight(this,e,t,n,i)};li.prototype.sampleHeightMostDetailed=function(e,t,n){return this._picking.sampleHeightMostDetailed(this,e,t,n)};li.prototype.clampToHeightMostDetailed=function(e,t,n){return this._picking.clampToHeightMostDetailed(this,e,t,n)};li.prototype.cartesianToCanvasCoordinates=function(e,t){return Oi.worldToWindowCoordinates(this,e,t)};li.prototype.completeMorph=function(){this._transitioner.completeMorph()};li.prototype.morphTo2D=function(e){e=e??2,this._transitioner.morphTo2D(e,this._ellipsoid)};li.prototype.morphToColumbusView=function(e){e=e??2,this._transitioner.morphToColumbusView(e,this._ellipsoid)};li.prototype.morphTo3D=function(e){e=e??2,this._transitioner.morphTo3D(e,this._ellipsoid)};function Oxt(e,t){if(e._removeTerrainProviderReadyListener=e._removeTerrainProviderReadyListener&&e._removeTerrainProviderReadyListener(),t.ready){c(e.globe)&&(e.globe.terrainProvider=t.provider);return}e.globe.terrainProvider=void 0,e._removeTerrainProviderReadyListener=t.readyEvent.addEventListener(n=>{c(e)&&c(e.globe)&&(e.globe.terrainProvider=n),e._removeTerrainProviderReadyListener()})}li.prototype.setTerrain=function(e){return C.typeOf.object("terrain",e),Oxt(this,e),e};li.prototype.isDestroyed=function(){return!1};li.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(),c(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,c(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),he(this)};var g9=li;var w6i=_(T(),1);function SL(e){e=e??re.WGS84,this.show=!0,this.perFragmentAtmosphere=!1,this._ellipsoid=e;let t=1.025,n=m.multiplyByScalar(e.radii,t,new m);this._scaleMatrix=M.fromScale(n),this._modelMatrix=new M,this._command=new et({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(SL.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});SL.prototype.setDynamicLighting=function(e){this._radiiAndDynamicAtmosphereColor.z=e};var Y8=new M;SL.prototype.update=function(e,t){if(!this.show)return;let n=e.mode;if(n!==se.SCENE3D&&n!==se.MORPHING||!e.passes.render)return;let i=M.fromRotationTranslation(e.context.uniformState.inverseViewRotation,m.ZERO,Y8),o=M.multiplyTransformation(i,Po.Y_UP_TO_Z_UP,Y8),r=M.multiply(this._scaleMatrix,o,Y8);M.clone(r,this._modelMatrix);let s=e.context,a=Dxt(this),l=e.globeTranslucencyState.translucent,d=this.perFragmentAtmosphere||l||!c(t)||!t.show,u=this._command;if(!c(u.vertexArray)){let p=Js.createGeometry(new Js({radii:new m(1,1,1),slicePartitions:256,stackPartitions:256,vertexFormat:We.POSITION_ONLY}));u.vertexArray=ni.fromGeometry({context:s,geometry:p,attributeLocations:An.createAttributeLocations(p),bufferUsage:Ne.STATIC_DRAW}),u.renderState=Oe.fromCache({cull:{enabled:!0,face:_i.FRONT},blending:un.ALPHA_BLEND,depthMask:!1})}let f=a|d<<2|l<<3;if(f!==this._flags){this._flags=f;let p=[];a&&p.push("COLOR_CORRECT"),d&&p.push("PER_FRAGMENT_ATMOSPHERE"),l&&p.push("GLOBE_TRANSLUCENT");let y=new Be({defines:p,sources:[$m,BV,Bv]}),h=new Be({defines:p,sources:[$m,BV,Dv]});this._spSkyAtmosphere=tn.fromCache({context:s,vertexShaderSource:y,fragmentShaderSource:h}),u.shaderProgram=this._spSkyAtmosphere}return u};function Dxt(e){return!(w.equalsEpsilon(e.hueShift,0,w.EPSILON7)&&w.equalsEpsilon(e.saturationShift,0,w.EPSILON7)&&w.equalsEpsilon(e.brightnessShift,0,w.EPSILON7))}SL.prototype.isDestroyed=function(){return!1};SL.prototype.destroy=function(){let e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),this._spSkyAtmosphere=this._spSkyAtmosphere&&this._spSkyAtmosphere.destroy(),he(this)};var x9=SL;var iqi=_(T(),1);function VL(e){this.sources=e.sources,this._sources=void 0,this.show=e.show??!0,this._command=new et({modelMatrix:M.clone(M.IDENTITY),owner:this}),this._cubeMap=void 0,this._attributeLocations=void 0,this._useHdr=void 0,this._hasError=!1,this._error=void 0}VL.prototype.update=function(e,t){let n=this,{mode:i,passes:o,context:r}=e;if(!this.show||i!==se.SCENE3D&&i!==se.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;if(C.defined("this.sources",a),Object.values(Uo.FaceName).some(d=>!c(a[d])))throw new L("this.sources must have positiveX, negativeX, positiveY, negativeY, positiveZ, and negativeZ properties.");let l=typeof a.positiveX;if(Object.values(Uo.FaceName).some(d=>typeof a[d]!==l))throw new L("this.sources properties must all be the same type.");typeof a.positiveX=="string"?mE(r,this._sources).then(function(d){n._cubeMap=n._cubeMap&&n._cubeMap.destroy(),n._cubeMap=d}).catch(d=>{this._hasError=!0,this._error=d}):(this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),this._cubeMap=new Uo({context:r,source:a}))}let s=this._command;if(!c(s.vertexArray)){s.uniformMap={u_cubeMap:function(){return n._cubeMap}};let a=Wa.createGeometry(Wa.fromDimensions({dimensions:new m(2,2,2),vertexFormat:We.POSITION_ONLY})),l=this._attributeLocations=An.createAttributeLocations(a);s.vertexArray=ni.fromGeometry({context:r,geometry:a,attributeLocations:l,bufferUsage:Ne.STATIC_DRAW}),s.renderState=Oe.fromCache({blending:un.ALPHA_BLEND})}if(!c(s.shaderProgram)||this._useHdr!==t){let a=new Be({defines:[t?"HDR":""],sources:[Yv]});s.shaderProgram=tn.fromCache({context:r,vertexShaderSource:Hv,fragmentShaderSource:a,attributeLocations:this._attributeLocations}),this._useHdr=t}if(c(this._cubeMap))return s};VL.prototype.isDestroyed=function(){return!1};VL.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(),he(this)};function CL(e){return on(`Assets/Textures/SkyBox/tycho2t3_80_${e}.jpg`)}VL.createEarthSkyBox=function(){return new VL({sources:{positiveX:CL("px"),negativeX:CL("mx"),positiveY:CL("py"),negativeY:CL("my"),positiveZ:CL("pz"),negativeZ:CL("mz")}})};var _9=VL;var Wqi=_(T(),1);function S9(){this.show=!0,this._drawCommand=new et({primitiveType:ve.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(S9.prototype,{glowFactor:{get:function(){return this._glowFactor},set:function(e){e=Math.max(e,0),this._glowFactor=e,this._glowFactorDirty=!0}}});var Bxt=new D,Yxt=new D,Hxt=new ce,T9=new ce;S9.prototype.update=function(e,t,n){if(!this.show)return;let i=e.mode;if(i===se.SCENE2D||i===se.MORPHING||!e.passes.render)return;let o=e.context,r=t.viewport.width,s=t.viewport.height;if(!c(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 R=Math.max(r,s);R=Math.pow(2,Math.ceil(Math.log(R)/Math.log(2))-2),R=Math.max(1,R);let E=n?o.halfFloatingPointTexture?Ue.HALF_FLOAT:Ue.FLOAT:Ue.UNSIGNED_BYTE;this._texture=new Pt({context:o,width:R,height:R,pixelFormat:ke.RGBA,pixelDatatype:E}),this._glowLengthTS=this._glowFactor*5,this._radiusTS=1/(1+2*this._glowLengthTS)*.5;let I=this,v={u_radiusTS:function(){return I._radiusTS}};this._commands.computeCommand=new vc({fragmentShaderSource:Kv,outputTexture:this._texture,uniformMap:v,persists:!1,owner:this,postExecute:function(){I._commands.computeCommand=void 0}})}let a=this._drawCommand;if(!c(a.vertexArray)){let R={direction:0},E=new Uint8Array(4*2);E[0]=0,E[1]=0,E[2]=255,E[3]=0,E[4]=255,E[5]=255,E[6]=0,E[7]=255;let I=_t.createVertexBuffer({context:o,typedArray:E,usage:Ne.STATIC_DRAW}),v=[{index:R.direction,vertexBuffer:I,componentsPerAttribute:2,normalize:!0,componentDatatype:q.UNSIGNED_BYTE}],P=_t.createIndexBuffer({context:o,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT});a.vertexArray=new ni({context:o,attributes:v,indexBuffer:P}),a.shaderProgram=tn.fromCache({context:o,vertexShaderSource:Jv,fragmentShaderSource:zv,attributeLocations:R}),a.renderState=Oe.fromCache({blending:un.ALPHA_BLEND}),a.uniformMap=this._uniformMap}let l=o.uniformState.sunPositionWC,d=o.uniformState.sunPositionColumbusView,u=this._boundingVolume,f=this._boundingVolume2D;m.clone(l,u.center),f.center.x=d.z,f.center.y=d.x,f.center.z=d.y,u.radius=w.SOLAR_RADIUS+w.SOLAR_RADIUS*this._glowLengthTS,f.radius=u.radius,i===se.SCENE3D?ue.clone(u,a.boundingVolume):i===se.COLUMBUS_VIEW&&ue.clone(f,a.boundingVolume);let p=Oi.computeActualEllipsoidPosition(e,l,T9),y=m.magnitude(m.subtract(p,e.camera.position,T9)),h=o.uniformState.projection,g=Hxt;g.x=0,g.y=0,g.z=-y,g.w=1;let x=M.multiplyByVector(h,g,T9),S=Oi.clipToGLWindowCoordinates(t.viewport,x,Bxt);g.x=w.SOLAR_RADIUS;let V=M.multiplyByVector(h,g,T9),Z=Oi.clipToGLWindowCoordinates(t.viewport,V,Yxt);return this._size=D.magnitude(D.subtract(Z,S,T9)),this._size=2*this._size*(1+2*this._glowLengthTS),this._size=Math.ceil(this._size),this._commands};S9.prototype.isDestroyed=function(){return!1};S9.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(),he(this)};var C9=S9;var k$i=_(T(),1);var T$i=_(T(),1);var lSe=_(oN(),1);var vqi=_(T(),1);function zxt(e,t,n){return C.typeOf.string("samplerUniformName",e),C.typeOf.string("matrixUniformName",t),C.typeOf.string("styleUniformName",n),` 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 V9=zxt;var Mqi=_(T(),1);var Kxt={modifyFragmentShader:function(t){return t=Be.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}}},LL=Kxt;var pS={NEEDS_DECODE:0,DECODING:1,READY:2,FAILED:3};function L9(e){C.typeOf.object("options",e),C.typeOf.object("options.arrayBuffer",e.arrayBuffer),this._parsedContent=void 0,this._drawCommand=void 0,this._isTranslucent=!1,this._styleTranslucent=!1,this._constantColor=Y.clone(Y.DARKGRAY),this._highlightColor=Y.clone(Y.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=pS.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??Xe.OPAQUE,this._cull=e.cull??!0,this.style=void 0,this._style=void 0,this.styleDirty=!1,this.modelMatrix=M.clone(M.IDENTITY),this._modelMatrix=M.clone(M.IDENTITY),this.time=0,this.shadows=Sn.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??Ar.NONE,this._splittingEnabled=!1,this._error=void 0,Jxt(this,e)}Object.defineProperties(L9.prototype,{pointsLength:{get:function(){return this._pointsLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}},color:{get:function(){return Y.clone(this._highlightColor)},set:function(e){this._highlightColor=Y.clone(e,this._highlightColor)}},boundingSphere:{get:function(){if(c(this._drawCommand))return this._drawCommand.boundingVolume},set:function(e){this._boundingSphere=ue.clone(e,this._boundingSphere)}}});function Jxt(e,t){let n=I_.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&&c(n.batchTableBinary)&&(n.styleableProperties=zp.getBinaryProperties(n.pointsLength,n.batchTableJson,n.batchTableBinary)),c(n.draco)){let a=n.draco;e._decodingState=pS.NEEDS_DECODE,a.dequantizeInShader=e._dequantizeInShader}let i=n.positions;c(i)&&(e._isQuantized=i.isQuantized,e._quantizedVolumeScale=i.quantizedVolumeScale,e._quantizedVolumeOffset=i.quantizedVolumeOffset,e._quantizedRange=i.quantizedRange);let o=n.normals;c(o)&&(e._isOctEncoded16P=o.octEncoded);let r=n.colors;c(r)&&(c(r.constantColor)&&(e._constantColor=Y.clone(r.constantColor,e._constantColor),e._hasColors=!1),e._isRGB565=r.isRGB565);let s=n.batchIds;c(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 Qxt=new m,jxt=new m,qxt=new m,aSe,$D;function $xt(e){if(!c($D)){aSe=new lSe.default(0),$D=new Array(e);for(let t=0;t<e;++t)$D[t]=aSe.random()}return $D}function e_t(e){let n=e.length/3,i=Math.min(n,20),o=$xt(20),r=Number.MAX_VALUE,s=-Number.MAX_VALUE,a=m.fromElements(r,r,r,Qxt),l=m.fromElements(s,s,s,jxt);for(let u=0;u<i;++u){let f=Math.floor(o[u]*n),p=m.unpack(e,f*3,qxt);m.minimumByComponent(a,p,a),m.maximumByComponent(l,p,l)}let d=ue.fromCornerPoints(a,l);return d.radius+=w.EPSILON2,d}function cSe(e,t){let n=q.fromTypedArray(e);return n===q.INT||n===q.UNSIGNED_INT||n===q.DOUBLE?(ht("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 t_t=new ce,n_t=new ce,i_t=new Y,dSe=0,eB=1,Q8=2,uSe=3,o_t=4,H8=new M,r_t=new M;function s_t(e,t){let n=t.context,i=e._parsedContent,o=e._pointsLength,r=i.positions,s=i.colors,a=i.normals,l=i.batchIds,d=i.styleableProperties,u=c(d),f=e._isQuantized,p=e._isQuantizedDraco,y=e._isOctEncoded16P,h=e._isOctEncodedDraco,g=e._quantizedRange,x=e._octEncodedRange,S=e._isRGB565,V=e._isTranslucent,Z=e._hasColors,R=e._hasNormals,E=e._hasBatchIds,I,v,P=[],F={};if(e._styleableShaderAttributes=F,u){let O=o_t;for(let H in d)if(d.hasOwnProperty(H)){let U=d[H],K=cSe(U.typedArray,H);I=U.componentCount,v=q.fromTypedArray(K);let Q=_t.createVertexBuffer({context:n,typedArray:K,usage:Ne.STATIC_DRAW});e._geometryByteLength+=Q.sizeInBytes;let ie={index:O,vertexBuffer:Q,componentsPerAttribute:I,componentDatatype:v,normalize:!1,offsetInBytes:0,strideInBytes:0};P.push(ie),F[H]={location:O,componentCount:I},++O}}let N=_t.createVertexBuffer({context:n,typedArray:r.typedArray,usage:Ne.STATIC_DRAW});e._geometryByteLength+=N.sizeInBytes;let b;Z&&(b=_t.createVertexBuffer({context:n,typedArray:s.typedArray,usage:Ne.STATIC_DRAW}),e._geometryByteLength+=b.sizeInBytes);let G;R&&(G=_t.createVertexBuffer({context:n,typedArray:a.typedArray,usage:Ne.STATIC_DRAW}),e._geometryByteLength+=G.sizeInBytes);let X;E&&(l.typedArray=cSe(l.typedArray,"batchIds"),X=_t.createVertexBuffer({context:n,typedArray:l.typedArray,usage:Ne.STATIC_DRAW}),e._geometryByteLength+=X.sizeInBytes);let W=[];if(f?v=q.UNSIGNED_SHORT:p?v=g<=255?q.UNSIGNED_BYTE:q.UNSIGNED_SHORT:v=q.FLOAT,W.push({index:dSe,vertexBuffer:N,componentsPerAttribute:3,componentDatatype:v,normalize:!1,offsetInBytes:0,strideInBytes:0}),e._cull&&(f||p?e._boundingSphere=ue.fromCornerPoints(m.ZERO,e._quantizedVolumeScale):e._boundingSphere=e_t(r.typedArray)),Z)if(S)W.push({index:eB,vertexBuffer:b,componentsPerAttribute:1,componentDatatype:q.UNSIGNED_SHORT,normalize:!1,offsetInBytes:0,strideInBytes:0});else{let O=V?4:3;W.push({index:eB,vertexBuffer:b,componentsPerAttribute:O,componentDatatype:q.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0})}R&&(y?(I=2,v=q.UNSIGNED_BYTE):h?(I=2,v=x<=255?q.UNSIGNED_BYTE:q.UNSIGNED_SHORT):(I=3,v=q.FLOAT),W.push({index:Q8,vertexBuffer:G,componentsPerAttribute:I,componentDatatype:v,normalize:!1,offsetInBytes:0,strideInBytes:0})),E&&W.push({index:uSe,vertexBuffer:X,componentsPerAttribute:1,componentDatatype:q.fromTypedArray(l.typedArray),normalize:!1,offsetInBytes:0,strideInBytes:0}),u&&(W=W.concat(P));let A=new ni({context:n,attributes:W}),k={depthTest:{enabled:!0}},B={depthTest:{enabled:!0},depthMask:!1,blending:un.ALPHA_BLEND};e._opaquePass===Xe.CESIUM_3D_TILE&&(k.stencilTest=kt.setCesium3DTileBit(),k.stencilMask=kt.CESIUM_3D_TILE_MASK,B.stencilTest=kt.setCesium3DTileBit(),B.stencilMask=kt.CESIUM_3D_TILE_MASK),e._opaqueRenderState=Oe.fromCache(k),e._translucentRenderState=Oe.fromCache(B),e._drawCommand=new et({boundingVolume:new ue,cull:e._cull,modelMatrix:new M,primitiveType:ve.POINTS,vertexArray:A,count:o,shaderProgram:void 0,uniformMap:void 0,renderState:V?e._translucentRenderState:e._opaqueRenderState,pass:V?Xe.TRANSLUCENT:e._opaquePass,owner:e,castShadows:!1,receiveShadows:!1,pickId:e._pickIdLoaded()})}function a_t(e,t){let n=t.context,i=e._isQuantized,o=e._isQuantizedDraco,r=e._isOctEncodedDraco,s={u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier:function(){let a=t_t;if(a.x=e._attenuation?e.maximumAttenuation:e._pointSize,a.x*=t.pixelRatio,a.y=e.time,e._attenuation){let l=t.camera.frustum,d;t.mode===se.SCENE2D||l instanceof sn?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(!c(a))return Y.TRANSPARENT;let l=Y.clone(a.edgeColor,i_t);return l.alpha=a.edgeWidth,l},u_clippingPlanesMatrix:function(){let a=e.clippingPlanes;if(!c(a))return M.IDENTITY;let l=e.clippingPlanesOriginMatrix??e._modelMatrix;M.multiply(n.uniformState.view3D,l,H8);let d=M.multiply(H8,a.modelMatrix,H8);return M.inverseTranspose(d,r_t)}};LL.addUniforms(e,s),(i||o||r)&&(s=St(s,{u_quantizedVolumeScaleAndOctEncodedRange:function(){let a=n_t;if(c(e._quantizedVolumeScale)){let l=m.clone(e._quantizedVolumeScale,a);m.divideByScalar(l,e._quantizedRange,a)}return a.w=e._octEncodedRange,a}})),c(e._uniformMapLoaded)&&(s=e._uniformMapLoaded(s)),e._drawCommand.uniformMap=s}function z8(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 K8(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 J8(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 c_t={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 l_t(e,t,n){let i,o,r,s=t.context,a=c(n),l=e._isQuantized,d=e._isQuantizedDraco,u=e._isOctEncoded16P,f=e._isOctEncodedDraco,p=e._isRGB565,y=e._isTranslucent,h=e._hasColors,g=e._hasNormals,x=e._hasBatchIds,S=e._backFaceCulling,V=e._normalShading,Z=e._drawCommand.vertexArray,R=e.clippingPlanes,E=e._attenuation,I,v,P,F=y,N=He(c_t),b={},G=e._styleableShaderAttributes;for(o in G)G.hasOwnProperty(o)&&(r=G[o],N[o]=`czm_3dtiles_property_${r.location}`,b[r.location]=r);if(a){let me={translucent:!1},_e="(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)";I=n.getColorShaderFunction(`getColorFromStyle${_e}`,N,me),v=n.getShowShaderFunction(`getShowFromStyle${_e}`,N,me),P=n.getPointSizeShaderFunction(`getPointSizeFromStyle${_e}`,N,me),c(I)&&me.translucent&&(F=!0)}e._styleTranslucent=F;let X=c(I),W=c(v),A=c(P),k=e.isClipped,B=[],O=[];X&&(z8(I,B),K8(I,O)),W&&(z8(v,B),K8(v,O)),A&&(z8(P,B),K8(P,O));let H=O.indexOf("COLOR")>=0,U=O.indexOf("NORMAL")>=0;if(U&&!g)throw new le("Style references the NORMAL semantic but the point cloud does not have normals");for(o in G)if(G.hasOwnProperty(o)){r=G[o];let me=B.indexOf(r.location)>=0,_e=J8(Z,r.location);_e.enabled=me}let K=h&&(!X||H);if(h){let me=J8(Z,eB);me.enabled=K}let Q=g&&(V||S||U);if(g){let me=J8(Z,Q8);me.enabled=Q}let ie={a_position:dSe};K&&(ie.a_color=eB),Q&&(ie.a_normal=Q8),x&&(ie.a_batchId=uSe);let j="",$=B.length;for(i=0;i<$;++i){let me=B[i];r=b[me];let _e=r.componentCount,Ve=`czm_3dtiles_property_${me}`,Ie;_e===1?Ie="float":Ie=`vec${_e}`,j+=`in ${Ie} ${Ve}; `,ie[Ve]=r.location}a_t(e,t);let ne=`in vec3 a_position; out vec4 v_color; uniform vec4 u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier; uniform vec4 u_constantColor; uniform vec4 u_highlightColor; `;ne+=`float u_pointSize; float tiles3d_tileset_time; `,E&&(ne+=`float u_geometricError; float u_depthMultiplier; `),ne+=j,K&&(y?ne+=`in vec4 a_color; `:p?ne+=`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; `:ne+=`in vec3 a_color; `),Q&&(u||f?ne+=`in vec2 a_normal; `:ne+=`in vec3 a_normal; `),x&&(ne+=`in float a_batchId; `),(l||d||f)&&(ne+=`uniform vec4 u_quantizedVolumeScaleAndOctEncodedRange; `),X&&(ne+=I),W&&(ne+=v),A&&(ne+=P),ne+=`void main() { u_pointSize = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.x; tiles3d_tileset_time = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.y; `,E&&(ne+=` u_geometricError = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.z; u_depthMultiplier = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.w; `),K?y?ne+=` vec4 color = a_color; `:p?ne+=` 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); `:ne+=` vec4 color = vec4(a_color, 1.0); `:ne+=` vec4 color = u_constantColor; `,l||d?ne+=` vec3 position = a_position * u_quantizedVolumeScaleAndOctEncodedRange.xyz; `:ne+=` vec3 position = a_position; `,ne+=` vec3 position_absolute = vec3(czm_model * vec4(position, 1.0)); `,Q?(u?ne+=` vec3 normal = czm_octDecode(a_normal); `:f?ne+=` vec3 normal = czm_octDecode(a_normal, u_quantizedVolumeScaleAndOctEncodedRange.w).zxy; `:ne+=` vec3 normal = a_normal; `,ne+=` vec3 normalEC = czm_normal * normal; `):ne+=` vec3 normal = vec3(1.0); `,X&&(ne+=` color = getColorFromStyle(position, position_absolute, color, normal); `),W&&(ne+=` float show = float(getShowFromStyle(position, position_absolute, color, normal)); `),A?ne+=` gl_PointSize = getPointSizeFromStyle(position, position_absolute, color, normal) * czm_pixelRatio; `:E?ne+=` vec4 positionEC = czm_modelView * vec4(position, 1.0); float depth = -positionEC.z; gl_PointSize = min((u_geometricError / depth) * u_depthMultiplier, u_pointSize); `:ne+=` gl_PointSize = u_pointSize; `,ne+=` color = color * u_highlightColor; `,Q&&V&&(ne+=` float diffuseStrength = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC); diffuseStrength = max(diffuseStrength, 0.4); color.xyz *= diffuseStrength * czm_lightColor; `),ne+=` v_color = color; gl_Position = czm_modelViewProjection * vec4(position, 1.0); `,Q&&S&&(ne+=` float visible = step(-normalEC.z, 0.0); gl_Position *= visible; gl_PointSize *= visible; `),W&&(ne+=` gl_Position.w *= float(show); gl_PointSize *= float(show); `),ne+=`} `;let be=`in vec4 v_color; `;k&&(be+=`uniform highp sampler2D u_clippingPlanes; uniform mat4 u_clippingPlanesMatrix; uniform vec4 u_clippingPlanesEdgeStyle; `,be+=` `,be+=c0(R,s),be+=` `),be+=`void main() { out_FragColor = czm_gammaCorrect(v_color); `,k&&(be+=V9("u_clippingPlanes","u_clippingPlanesMatrix","u_clippingPlanesEdgeStyle")),be+=`} `,e.splitDirection!==Ar.NONE&&(be=LL.modifyFragmentShader(be)),c(e._vertexShaderLoaded)&&(ne=e._vertexShaderLoaded(ne)),c(e._fragmentShaderLoaded)&&(be=e._fragmentShaderLoaded(be));let Ce=e._drawCommand;c(Ce.shaderProgram)&&Ce.shaderProgram.destroy(),Ce.shaderProgram=tn.fromCache({context:s,vertexShaderSource:ne,fragmentShaderSource:be,attributeLocations:ie});try{Ce.shaderProgram._bind()}catch{throw new le("Error generating style shader: this may be caused by a type mismatch, index out-of-bounds, or other syntax error.")}}function d_t(e,t){if(e._decodingState===pS.READY)return!1;if(e._decodingState===pS.NEEDS_DECODE){let n=e._parsedContent,i=n.draco,o=eb.decodePointCloud(i,t);c(o)&&(e._decodingState=pS.DECODING,o.then(function(r){e._decodingState=pS.READY;let s=c(r.POSITION)?r.POSITION.array:void 0,a=c(r.RGB)?r.RGB.array:void 0,l=c(r.RGBA)?r.RGBA.array:void 0,d=c(r.NORMAL)?r.NORMAL.array:void 0,u=c(r.BATCH_ID)?r.BATCH_ID.array:void 0,f=c(s)&&c(r.POSITION.data.quantization),p=c(d)&&c(r.NORMAL.data.quantization);if(f){let x=r.POSITION.data.quantization,S=x.range;e._quantizedVolumeScale=m.fromElements(S,S,S),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 y=n.styleableProperties,h=i.batchTableProperties;for(let x in h)if(h.hasOwnProperty(x)){let S=r[x];c(y)||(y={}),y[x]={typedArray:S.array,componentCount:S.data.componentsPerAttribute}}c(s)&&(n.positions={typedArray:s});let g=l??a;c(g)&&(n.colors={typedArray:g}),c(d)&&(n.normals={typedArray:d}),c(u)&&(n.batchIds={typedArray:u}),n.styleableProperties=y}).catch(function(r){e._decodingState=pS.FAILED,e._error=r}))}return!0}var u_t=new ce,m_t=new m;L9.prototype.update=function(e){let t=e.context;if(c(this._error)){let d=this._error;throw this._error=void 0,d}if(d_t(this,t))return;let i=!1,o=!M.equals(this._modelMatrix,this.modelMatrix);if(this._mode!==e.mode&&(this._mode=e.mode,o=!0),c(this._drawCommand)||(s_t(this,e),o=!0,i=!0,this._ready=!0,this._parsedContent=void 0),o){M.clone(this.modelMatrix,this._modelMatrix);let d=this._drawCommand.modelMatrix;if(M.clone(this._modelMatrix,d),c(this._rtcCenter)&&M.multiplyByTranslation(d,this._rtcCenter,d),c(this._quantizedVolumeOffset)&&M.multiplyByTranslation(d,this._quantizedVolumeOffset,d),e.mode!==se.SCENE3D){let f=e.mapProjection,p=M.getColumn(d,3,u_t);ce.equals(p,ce.UNIT_W)||wt.basisTo2D(f,d,d)}let u=this._drawCommand.boundingVolume;if(ue.clone(this._boundingSphere,u),this._cull){let f=u.center;M.multiplyByPoint(d,f,f);let p=M.getScale(d,m_t);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!==Ar.NONE;this._splittingEnabled!==r&&(this._splittingEnabled=r,i=!0),i&&l_t(this,e,this._style),this._drawCommand.castShadows=Sn.castShadows(this.shadows),this._drawCommand.receiveShadows=Sn.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?Xe.TRANSLUCENT:this._opaquePass;let a=e.commandList,l=e.passes;(l.render||l.pick)&&a.push(this._drawCommand)};L9.prototype.isDestroyed=function(){return!1};L9.prototype.destroy=function(){let e=this._drawCommand;return c(e)&&(e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy()),he(this)};var Z9=L9;function yS(e){e=e??z.EMPTY_OBJECT,C.typeOf.object("options.clock",e.clock),C.typeOf.object("options.intervals",e.intervals),this.show=e.show??!0,this.modelMatrix=M.clone(e.modelMatrix??M.IDENTITY),this.shadows=e.shadows??Sn.ENABLED,this.maximumMemoryUsage=e.maximumMemoryUsage??256,this.shading=new Vh(e.shading),this.style=e.style,this.frameFailed=new ye,this.frameChanged=new ye,this._clock=e.clock,this._intervals=e.intervals,this._clippingPlanes=void 0,this.clippingPlanes=e.clippingPlanes,this._pointCloudEyeDomeLighting=new lb,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(yS.prototype,{clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){hs.setOwner(e,this,"_clippingPlanes")}},totalMemoryUsageInBytes:{get:function(){return this._totalMemoryUsageInBytes}},boundingSphere:{get:function(){if(c(this._lastRenderedFrame))return this._lastRenderedFrame.pointCloud.boundingSphere}}});function f_t(e){return`uniform vec4 czm_pickColor; ${e}`}function h_t(e){return function(t){return St(t,{czm_pickColor:function(){return e._pickId.color}})}}function p_t(){return"czm_pickColor"}yS.prototype.makeStyleDirty=function(){this._styleDirty=!0};yS.prototype._getAverageLoadTime=function(){return this._runningLength===0?.05:this._runningAverage};var b_t=new ee;function q8(e){let t=e._clock,n=t.canAnimate&&t.shouldAnimate,i=t.multiplier;return n?i:0}function bS(e,t){return e._intervals.indexOf(t.start)}function y_t(e,t){let n=e._intervals,i=e._clock,o=q8(e);if(o===0)return;let r=e._getAverageLoadTime(),s=ee.addSeconds(i.currentTime,r*o,b_t),a=n.indexOf(s),l=bS(e,t);return a===l&&(o>=0?++a:--a),n.get(a)}function g_t(e){let t=e._intervals,i=e._clock.currentTime,o=t.indexOf(i);return t.get(o)}function x_t(e,t,n){let i=q8(e),o=bS(e,t),r=bS(e,n);return i>=0?o>=r:o<=r}function fSe(e,t){return function(n){let i=c(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 __t(e,t,n){let i=bS(e,t),o=e._frames,r=o[i];if(!c(r)){let s=t.data.transform,a=c(s)?M.fromArray(s):void 0,l=t.data.uri;r={pointCloud:void 0,transform:a,timestamp:Ti(),sequential:!0,ready:!1,touchedFrameNumber:n.frameNumber,uri:l},o[i]=r,Ge.fetchArrayBuffer({url:l}).then(function(d){r.pointCloud=new Z9({arrayBuffer:d,cull:!0,fragmentShaderLoaded:f_t,uniformMapLoaded:h_t(e),pickIdLoaded:p_t})}).catch(fSe(e,l))}return r}function T_t(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 S_t(e,t,n,i){t.touchedFrameNumber<i.frameNumber-1&&(t.sequential=!1);let o=t.pointCloud;if(c(o)&&!t.ready){let r=i.commandList,s=r.length;if(hSe(e,t,n,i),o.ready&&(t.ready=!0,e._totalMemoryUsageInBytes+=o.geometryByteLength,r.length=s,t.sequential)){let a=(Ti()-t.timestamp)/1e3;T_t(e,a)}}t.touchedFrameNumber=i.frameNumber}var C_t=new M;function V_t(e,t){let n=e.shading;return c(n)&&c(n.baseResolution)?n.baseResolution:c(t.boundingSphere)?w.cbrt(t.boundingSphere.volume()/t.pointsLength):0}function L_t(e){let t=e.shading;return c(t)&&c(t.maximumAttenuation)?t.maximumAttenuation:10}var Z_t=new Vh;function hSe(e,t,n,i){let o=e.shading??Z_t,r=t.pointCloud,s=t.transform??M.IDENTITY;r.modelMatrix=M.multiplyTransformation(e.modelMatrix,s,C_t),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=V_t(e,r),r.geometricErrorScale=o.geometricErrorScale,r.maximumAttenuation=L_t(e);try{r.update(i)}catch(a){fSe(e,t.uri)(a)}t.touchedFrameNumber=i.frameNumber}function j8(e,t,n,i){let o=__t(e,t,i);S_t(e,o,n,i)}function R_t(e){return function(t){return t.touchedFrameNumber<e.frameNumber}}function pSe(e,t){let n=e._frames,i=n.length;for(let o=0;o<i;++o){let r=n[o];if(c(r)&&(!c(t)||t(r))){let s=r.pointCloud;r.ready&&(e._totalMemoryUsageInBytes-=s.geometryByteLength),c(s)&&s.destroy(),r===e._lastRenderedFrame&&(e._lastRenderedFrame=void 0),n[o]=void 0}}}function G_t(e,t){let n=bS(e,t),i=e._frames[n];if(c(i)&&i.ready)return i}function mSe(e,t,n,i,o){return c(n)?n.ready?!0:(j8(e,t,i,o),n.ready):!1}function E_t(e,t,n,i,o){let r,s,a,l=e._intervals,d=e._frames,u=bS(e,n),f=bS(e,t);if(u>=f){for(r=u;r>=f;--r)if(s=l.get(r),a=d[r],mSe(e,s,a,i,o))return s}else for(r=u;r<=f;++r)if(s=l.get(r),a=d[r],mSe(e,s,a,i,o))return s;return t}function X_t(e,t,n){let i=e._frames,o=i.length;for(let r=0;r<o;++r){let s=i[r];c(s)&&c(s.pointCloud)&&(s.pointCloud.clippingPlanesDirty=t,s.pointCloud.styleDirty=n)}}var ZL={timeSinceLoad:0,isClipped:!1,clippingPlanesDirty:!1};yS.prototype.update=function(e){if(e.mode===se.MORPHING||!this.show)return;c(this._pickId)||(this._pickId=e.context.createPickId({primitive:this})),c(this._loadTimestamp)||(this._loadTimestamp=ee.clone(e.time));let t=Math.max(ee.secondsDifference(e.time,this._loadTimestamp)*1e3,0),n=this._clippingPlanes,i=0,o=!1,r=c(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)&&X_t(this,o,s),ZL.timeSinceLoad=t,ZL.isClipped=r;let a=this.shading,l=this._pointCloudEyeDomeLighting,d=e.commandList,u=d.length,f=this._previousInterval,p=this._nextInterval,y=g_t(this);if(!c(y))return;let h=!1,g=q8(this),x=g===0;g!==this._clockMultiplier&&(h=!0,this._clockMultiplier=g),(!c(f)||x)&&(f=y),(!c(p)||h||x_t(this,y,p))&&(p=y_t(this,y)),f=E_t(this,f,y,ZL,e);let S=G_t(this,f);c(S)||(j8(this,f,ZL,e),S=this._lastRenderedFrame),c(S)&&hSe(this,S,ZL,e),c(p)&&j8(this,p,ZL,e);let V=this;c(S)&&!c(this._lastRenderedFrame)&&e.afterRender.push(function(){return!0}),c(S)&&S!==this._lastRenderedFrame&&V.frameChanged.numberOfListeners>0&&e.afterRender.push(function(){return V.frameChanged.raiseEvent(V),!0}),this._previousInterval=f,this._nextInterval=p,this._lastRenderedFrame=S;let Z=this._totalMemoryUsageInBytes,R=this.maximumMemoryUsage*1024*1024;Z>R&&pSe(this,R_t(e));let I=d.length-u;c(a)&&a.attenuation&&a.eyeDomeLighting&&I>0&&l.update(e,u,a,this.boundingSphere)};yS.prototype.isDestroyed=function(){return!1};yS.prototype.destroy=function(){return pSe(this),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),he(this)};var RL=yS;function gSe(e,t){if(c(t)){let n=t.clock;c(n)&&n.getValue(e)}}function I_t(e){e._renderLoopRunning=!0;let t=0;function n(i){if(!e.isDestroyed())if(e._useDefaultRenderLoop)try{let o=e._targetFrameRate;if(!c(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 xSe(e){let t=e._useBrowserRecommendedResolution?1:window.devicePixelRatio;return t*=e._resolutionScale,c(e._scene)&&(e._scene.pixelRatio=t),t}function _Se(e){let t=e._canvas,n=t.clientWidth,i=t.clientHeight,o=xSe(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 TSe(e){let t=e._canvas,n=t.width,i=t.height;if(n!==0&&i!==0){let o=e._scene.camera.frustum;c(o.aspectRatio)?o.aspectRatio=n/i:(o.top=o.right*(i/n),o.bottom=-o.top)}}function Go(e,t){if(!c(e))throw new L("container is required.");e=Wn(e),t=t??z.EMPTY_OBJECT;let n=document.createElement("div");n.className="cesium-widget",e.appendChild(n);let i=document.createElement("canvas"),o=Ot.supportsImageRenderingPixelated();this._supportsImageRenderingPixelated=o,o&&(i.style.imageRendering=Ot.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 l=c(t.creditContainer)?Wn(t.creditContainer):n;l.appendChild(a);let d=c(t.creditViewport)?Wn(t.creditViewport):n,u=t.showRenderLoopErrors??!0,f=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=l,this._innerCreditContainer=a,this._canRender=!1,this._renderLoopRunning=!1,this._showRenderLoopErrors=u,this._resolutionScale=1,this._useBrowserRecommendedResolution=f,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 ye,this._allowDataSourcesToSuspendAnimation=!0,this._clock=c(t.clock)?t.clock:new _f,c(t.shouldAnimate)&&(this._clock.shouldAnimate=t.shouldAnimate),_Se(this);try{let p=t.ellipsoid??re.default,y=new g9({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=y,y.camera.constrainedAxis=m.UNIT_Z,xSe(this),TSe(this);let h=t.globe;c(h)||(h=new SF(p)),h!==!1&&(y.globe=h,y.globe.shadows=t.terrainShadows??Sn.RECEIVE_ONLY);let g=t.skyBox;!c(g)&&re.WGS84.equals(p)&&(g=_9.createEarthSkyBox()),g!==!1&&(y.skyBox=g,y.sun=new C9,re.WGS84.equals(p)&&(y.moon=new GF));let x=t.skyAtmosphere;!c(x)&&re.WGS84.equals(p)&&(x=new x9(p),x.show=t.globe!==!1&&h.show),x!==!1&&(y.skyAtmosphere=x);let S=t.baseLayer;if(t.globe!==!1&&S!==!1&&(c(S)||(S=Ya.fromWorldImagery()),y.imageryLayers.add(S)),c(t.terrainProvider)&&t.globe!==!1&&(y.terrainProvider=t.terrainProvider),c(t.terrain)&&t.globe!==!1){if(c(t.terrainProvider))throw new L("Specify either options.terrainProvider or options.terrain.");y.setTerrain(t.terrain)}this._screenSpaceEventHandler=new tu(i),c(t.sceneMode)&&(t.sceneMode===se.SCENE2D&&this._scene.morphTo2D(0),t.sceneMode===se.COLUMBUS_VIEW&&this._scene.morphToColumbusView(0)),this._useDefaultRenderLoop=void 0,this.useDefaultRenderLoop=t.useDefaultRenderLoop??!0,this._targetFrameRate=void 0,this.targetFrameRate=t.targetFrameRate;let V=this;this._onRenderError=function(P,F){V._useDefaultRenderLoop=!1,V._renderLoopRunning=!1,V._showRenderLoopErrors&&V.showErrorPanel("An error occurred while rendering. Rendering has stopped.",void 0,F)},y.renderError.addEventListener(this._onRenderError);let Z=t.dataSources,R=!1;c(Z)||(Z=new l2,R=!0);let E=new z2({scene:y,dataSourceCollection:Z}),I=new hr;this._dataSourceChangedListeners={},this._automaticallyTrackDataSourceClocks=t.automaticallyTrackDataSourceClocks??!0,this._dataSourceCollection=Z,this._destroyDataSourceCollection=R,this._dataSourceDisplay=E,this._eventHelper=I,this._canAnimateUpdateCallback=this._updateCanAnimate,I.add(this._clock.onTick,Go.prototype._onTick,this),I.add(y.morphStart,Go.prototype._clearTrackedObject,this),I.add(Z.dataSourceAdded,Go.prototype._onDataSourceAdded,this),I.add(Z.dataSourceRemoved,Go.prototype._onDataSourceRemoved,this),I.add(y.postRender,Go.prototype._postRender,this);let v=Z.length;for(let P=0;P<v;P++)this._dataSourceAdded(Z,Z.get(P));this._dataSourceAdded(void 0,E.defaultDataSource),I.add(Z.dataSourceAdded,Go.prototype._dataSourceAdded,this),I.add(Z.dataSourceRemoved,Go.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(Go.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){if(e<=0)throw new L("targetFrameRate must be greater than 0, or undefined.");this._targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._useDefaultRenderLoop},set:function(e){this._useDefaultRenderLoop!==e&&(this._useDefaultRenderLoop=e,e&&!this._renderLoopRunning&&I_t(this))}},resolutionScale:{get:function(){return this._resolutionScale},set:function(e){if(e<=0)throw new L("resolutionScale must be greater than 0.");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,$8(this);let t=this.scene,n=t.mode;!c(e)||!c(e.position)?(this._needTrackedEntityUpdate=!1,(n===se.COLUMBUS_VIEW||n===se.SCENE2D)&&(t.screenSpaceCameraController.enableTranslate=!0),(n===se.COLUMBUS_VIEW||n===se.SCENE3D)&&(t.screenSpaceCameraController.enableTilt=!0),this._entityView=void 0,this.camera.lookAtTransform(M.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,gSe(this.clock,e))}}});Go.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 l(){a.style.maxHeight=`${Math.max(Math.round(i.clientHeight*.9-100),30)}px`}l(),c(window.addEventListener)&&window.addEventListener("resize",l,!1);let d=c(t),u=c(n);if(d||u){let y=document.createElement("div");if(y.className="cesium-widget-errorPanel-message",a.appendChild(y),u){let h=qh(n);d||(typeof n=="string"&&(n=new Error(n)),t=qh({name:n.name,message:n.message}),h=n.stack),typeof console<"u"&&console.error(`${e} ${t} ${h}`);let g=document.createElement("div");g.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...")),g.appendChild(x),g.onclick=function(S){g.removeChild(x),g.appendChild(document.createTextNode(h)),g.className="cesium-widget-errorPanel-message-details",r.className="cesium-widget-errorPanel-content expanded",g.onclick=void 0},a.appendChild(g)}y.innerHTML=`<p>${t}</p>`}let f=document.createElement("div");f.className="cesium-widget-errorPanel-buttonPanel",r.appendChild(f);let p=document.createElement("button");p.setAttribute("type","button"),p.className="cesium-button",p.appendChild(document.createTextNode("OK")),p.onclick=function(){c(l)&&c(window.removeEventListener)&&window.removeEventListener("resize",l,!1),i.removeChild(o)},f.appendChild(p),i.appendChild(o)};Go.prototype.isDestroyed=function(){return!1};Go.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(),c(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()),he(this)};Go.prototype.resize=function(){let e=this._canvas;!this._forceResize&&this._canvasClientWidth===e.clientWidth&&this._canvasClientHeight===e.clientHeight&&this._lastDevicePixelRatio===window.devicePixelRatio||(this._forceResize=!1,_Se(this),TSe(this),this._scene.requestRender())};Go.prototype.render=function(){if(this._canRender){this._scene.initializeFrame();let e=this._clock.tick();this._scene.render(e)}else this._clock.tick()};Go.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(Go.prototype._onEntityCollectionChanged,this)};Go.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener(Go.prototype._onEntityCollectionChanged,this),c(this.trackedEntity)&&n.getById(this.trackedEntity.id)===this.trackedEntity&&(this.trackedEntity=void 0)};Go.prototype._updateCanAnimate=function(e){this._clock.canAnimate=e};var W_t=new ue;Go.prototype._onTick=function(e){let t=e.currentTime,n=this._dataSourceDisplay.update(t);this._allowDataSourcesToSuspendAnimation&&this._canAnimateUpdateCallback(n);let i=this._entityView;if(c(i)){let o=this._trackedEntity;this._dataSourceDisplay.getBoundingSphere(o,!1,i.boundingSphere??W_t)===ut.DONE&&i.update(t)}};Go.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)}};Go.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};Go.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&gSe(this.clock,e)};Go.prototype._onDataSourceAdded=function(e,t){this._automaticallyTrackDataSourceClocks&&(this.clockTrackedDataSource=t);let n=t.entities.id,i=this._eventHelper.add(t.changedEvent,Go.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};Go.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}};Go.prototype.zoomTo=function(e,t){return SSe(this,e,{offset:t},!1)};Go.prototype.flyTo=function(e,t){return SSe(this,e,t,!0)};function SSe(e,t,n,i){if(!c(t))throw new L("zoomTarget is required.");$8(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 Ya){let s;c(r.imageryProvider)?s=Promise.resolve(r.getImageryRectangle()):s=new Promise(a=>{let l=r.readyEvent.addEventListener(()=>{l(),a(r.getImageryRectangle())})}),s.then(function(a){return WT(a,e.scene)}).then(function(a){e._zoomPromise===o&&(e._zoomTarget=a)});return}if(r instanceof bs||r instanceof RL||r instanceof Ng){e._zoomTarget=r;return}if(r.isLoading&&c(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,c(r.entities)&&(r=r.entities.values),Array.isArray(r)?e._zoomTarget=r.slice(0):e._zoomTarget=[r]}}),e.scene.requestRender(),o}function R9(e){e._zoomPromise=void 0,e._zoomTarget=void 0,e._zoomOptions=void 0}function $8(e){let t=e._zoomPromise;c(t)&&(R9(e),e._completeZoom(!1))}Go.prototype._postRender=function(){w_t(this),P_t(this)};var bSe=new ue;function w_t(e){let t=e._zoomTarget;if(!c(t)||e.scene.mode===se.MORPHING)return;let n=e.scene,i=n.camera,o=e._zoomOptions??{},r;function s(u){c(o.offset)||(o.offset=new rm(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(M.IDENTITY),e._completeZoom(!0)),R9(e)}if(t instanceof RL){if(c(t.boundingSphere)){s(t.boundingSphere);return}let u=t.frameChanged.addEventListener(function(f){s(f.boundingSphere),u()});return}if(t instanceof bs||t instanceof Ng){s(t.boundingSphere);return}if(t instanceof pe){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)),R9(e);return}let a=t,l=[];for(let u=0,f=a.length;u<f;u++){let p=e._dataSourceDisplay.getBoundingSphere(a[u],!1,bSe);if(p===ut.PENDING)return;p!==ut.FAILED&&l.push(ue.clone(bSe))}if(l.length===0){$8(e);return}e.trackedEntity=void 0;let d=ue.fromBoundingSpheres(l);e._zoomIsFlight?(R9(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(M.IDENTITY),R9(e),e._completeZoom(!0))}var ySe=new ue;function P_t(e){if(!e._needTrackedEntityUpdate)return;let t=e._trackedEntity,n=e.clock.currentTime,i=J.getValueOrUndefined(t.position,n);if(!c(i))return;let o=e.scene,r=e._dataSourceDisplay.getBoundingSphere(t,!1,ySe);if(r===ut.PENDING)return;let s=o.mode;(s===se.COLUMBUS_VIEW||s===se.SCENE2D)&&(o.screenSpaceCameraController.enableTranslate=!1),(s===se.COLUMBUS_VIEW||s===se.SCENE3D)&&(o.screenSpaceCameraController.enableTilt=!1);let a=r!==ut.FAILED?ySe:void 0;e._entityView=new J2(t,o,o.ellipsoid),e._entityView.update(n,a),e._needTrackedEntityUpdate=!1}var G9=Go;var jeo=_(T(),1);var Eeo=_(T(),1);function XL(e,t){this._tilingScheme=e,this._maximumLevel=t,this._rootNodes=[]}var gS=new de;function v_t(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}XL.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 y=t;y<=i;++y)v_t(e,y,p,s)||s.push(new GL(r,void 0,0,y,p));r.tileXYToRectangle(t,n,e,gS);let a=gS.west,l=gS.north;r.tileXYToRectangle(i,o,e,gS);let d=gS.east,u=gS.south,f=new k_t(e,a,u,d,l);for(let p=0;p<s.length;++p){let y=s[p];e7(y.extent,f)&&U_t(this._maximumLevel,y,f)}};XL.prototype.computeMaximumLevelAtPosition=function(e){let t;for(let n=0;n<this._rootNodes.length;++n){let i=this._rootNodes[n];if(EL(i.extent,e)){t=i;break}}return c(t)?E9(void 0,t,e):-1};var F_t=[],A_t=[],M_t=new de,N_t=new de;XL.prototype.computeBestAvailableLevelOverRectangle=function(e){let t=F_t;t.length=0,e.east<e.west?(t.push(de.fromRadians(-Math.PI,e.south,e.east,e.north,M_t)),t.push(de.fromRadians(e.west,e.south,Math.PI,e.north,N_t))):t.push(e);let n=A_t;n.length=0;let i;for(i=0;i<this._rootNodes.length;++i)X9(n,this._rootNodes[i],t);for(i=n.length-1;i>=0;--i)if(c(n[i])&&n[i].length===0)return i;return 0};var CSe=new pe;XL.prototype.isTileAvailable=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(t,n,e,gS);return de.center(i,CSe),this.computeMaximumLevelAtPosition(CSe)>=e};XL.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 GL(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(GL.prototype,{nw:{get:function(){return this._nw||(this._nw=new GL(this.tilingScheme,this,this.level+1,this.x*2,this.y*2)),this._nw}},ne:{get:function(){return this._ne||(this._ne=new GL(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2)),this._ne}},sw:{get:function(){return this._sw||(this._sw=new GL(this.tilingScheme,this,this.level+1,this.x*2,this.y*2+1)),this._sw}},se:{get:function(){return this._se||(this._se=new GL(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2+1)),this._se}}});function k_t(e,t,n,i,o){this.level=e,this.west=t,this.south=n,this.east=i,this.north=o}function e7(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 U_t(e,t,n){for(;t.level<e;)if(tB(t.nw.extent,n))t=t.nw;else if(tB(t.ne.extent,n))t=t.ne;else if(tB(t.sw.extent,n))t=t.sw;else if(tB(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=Wo(t.rectangles,n.level,O_t);i<0&&(i=~i),t.rectangles.splice(i,0,n)}}function O_t(e,t){return e.level-t}function tB(e,t){return t.west>=e.west&&t.east<=e.east&&t.south>=e.south&&t.north<=e.north}function EL(e,t){return t.longitude>=e.west&&t.longitude<=e.east&&t.latitude>=e.south&&t.latitude<=e.north}function E9(e,t,n){let i=0,o=!1;for(;!o;){let r=t._nw&&EL(t._nw.extent,n),s=t._ne&&EL(t._ne.extent,n),a=t._sw&&EL(t._sw.extent,n),l=t._se&&EL(t._se.extent,n);if(r+s+a+l>1){r&&(i=Math.max(i,E9(t,t._nw,n))),s&&(i=Math.max(i,E9(t,t._ne,n))),a&&(i=Math.max(i,E9(t,t._sw,n))),l&&(i=Math.max(i,E9(t,t._se,n)));break}else r?t=t._nw:s?t=t._ne:a?t=t._sw:l?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];EL(a,n)&&(i=a.level)}t=t.parent}return i}function X9(e,t,n){if(!t)return;let i,o=!1;for(i=0;i<n.length;++i)o=o||e7(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]=D_t(e[s.level],s)}X9(e,t._nw,n),X9(e,t._ne,n),X9(e,t._sw,n),X9(e,t._se,n)}function D_t(e,t){let n=[];for(let i=0;i<e.length;++i){let o=e[i];e7(o,t)?(o.west<t.west&&n.push(new de(o.west,o.south,t.west,o.north)),o.east>t.east&&n.push(new de(t.east,o.south,o.east,o.north)),o.south<t.south&&n.push(new de(Math.max(t.west,o.west),o.south,Math.min(t.east,o.east),t.south)),o.north>t.north&&n.push(new de(Math.max(t.west,o.west),t.north,Math.min(t.east,o.east),o.north))):n.push(o)}return n}var Hf=XL;var B_t=15;function VSe(e){this.ellipsoid=e.ellipsoid??re.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}VSe.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 Y_t(e,t){let n=t.copyrightText;c(n)&&(e.credit=new Ct(n));let i=t.spatialReference,o=i.latestWkid??i.wkid,r=t.extent,s={ellipsoid:e.ellipsoid};if(o===4326)s.rectangle=de.fromDegrees(r.xmin,r.ymin,r.xmax,r.ymax),e.tilingScheme=new Ki(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 ss(s)}else throw new le("Invalid spatial reference");let a=t.tileInfo;if(!c(a))throw new le("tileInfo is required");e.width=a.rows+1,e.height=a.cols+1,e.encoding=a.format==="LERC"?cm.LERC:cm.NONE,e.lodCount=a.lods.length-1,(e.hasAvailability=t.capabilities.indexOf("Tilemap")!==-1)&&(e.tilesAvailable=new Hf(e.tilingScheme,e.lodCount),e.tilesAvailable.addAvailableTileRange(0,0,0,e.tilingScheme.getNumberOfXTilesAtLevel(0),e.tilingScheme.getNumberOfYTilesAtLevel(0)),e.tilesAvailabilityLoaded=new Hf(e.tilingScheme,e.lodCount)),e.levelZeroMaximumGeometricError=rs.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."),c(t.minValues)&&c(t.maxValues)?e.terrainDataStructure={elementMultiplier:1,lowestEncodedHeight:t.minValues[0],highestEncodedHeight:t.maxValues[0]}:e.terrainDataStructure={elementMultiplier:1}}async function H_t(e,t,n){try{let i=await t.fetchJson();Y_t(e,i)}catch(i){let o=`An error occurred while accessing ${t}.`;throw Ro.reportError(void 0,n,c(n)?n._errorEvent:void 0,o),i}}function Ug(e){e=e??z.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 ye}Object.defineProperties(Ug.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}}});Ug.fromUrl=async function(e,t){C.defined("url",e),t=t??z.EMPTY_OBJECT,e=await Promise.resolve(e);let n=Ge.createIfNeeded(e);n.appendForwardSlash(),c(t.token)&&(n=n.getDerivedResource({queryParameters:{token:t.token}}));let i=n.getDerivedResource({queryParameters:{f:"pjson"}}),o=new VSe(t);await H_t(o,i);let r=new Ug(t);return o.build(r),r._resource=n,r};Ug.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&&!c(t7(this,n+1,e*2,t*2))){let f=LSe(this,n+1,e*2,t*2);s=f.promise,a=f.request}let l=o.fetchArrayBuffer();if(!c(l)||!c(s))return;let d=this,u=this._tilesAvailable;return Promise.all([l,s]).then(function(f){return new Da({buffer:f[0],width:d._width,height:d._height,childTileMask:r?u.computeChildMaskForTile(n,e,t):B_t,structure:d._terrainDataStructure,encoding:d._encoding})}).catch(async function(f){if(c(a)&&a.state===jn.CANCELLED){i.cancel();try{await i.deferred?.promise}catch{}return i.state=jn.CANCELLED,Promise.reject(f)}return Promise.reject(f)})};function t7(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}Ug.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};Ug.prototype.getTileDataAvailable=function(e,t,n){if(!this._hasAvailability)return;let i=t7(this,n,e,t);if(c(i))return i;LSe(this,n,e,t)};Ug.prototype.loadTileDataAvailability=function(e,t,n){};function z_t(e,t,n,i){let o=t-1,r=n-1,s=i[e.y*t+e.x],a=[],l={startX:e.x,startY:e.y,endX:0,endY:0},d=new D(e.x+1,e.y+1),u=!1,f=!1;for(;!(u&&f);){let p=d.x,y=f?d.y+1:d.y;if(!u){for(let h=e.y;h<y;++h)if(i[h*t+d.x]!==s){u=!0;break}u?(a.push(new D(d.x,e.y)),--d.x,--p,l.endX=d.x):d.x===o?(l.endX=d.x,u=!0):++d.x}if(!f){let h=d.y*t;for(let g=e.x;g<=p;++g)if(i[h+g]!==s){f=!0;break}f?(a.push(new D(e.x,d.y)),--d.y,l.endY=d.y):d.y===r?(l.endY=d.y,f=!0):++d.y}}return{endingIndices:a,range:l,value:s}}function K_t(e,t,n,i,o){let r=[];if(o.every(function(l){return l===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 l=a.pop(),d=z_t(l,n,i,o);if(d.value===1){let f=d.range;f.startX+=e,f.endX+=e,f.startY+=t,f.endY+=t,r.push(f)}let u=d.endingIndices;u.length>0&&(a=a.concat(u))}return r}function LSe(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}`,l=e._availableCache;if(c(l[a]))return l[a];let d=new Jo({throttle:!1,throttleByServer:!0,type:us.TERRAIN}),f=e._resource.getDerivedResource({url:a,request:d}).fetchJson();return c(f)?(f=f.then(function(p){let y=K_t(o,r,s,s,p.data);e._tilesAvailabilityLoaded.addAvailableTileRange(t,o,r,o+s,r+s);let h=e._tilesAvailable;for(let g=0;g<y.length;++g){let x=y[g];h.addAvailableTileRange(t,x.startX,x.startY,x.endX,x.endY)}return t7(e,t,n,i)}),l[a]={promise:f,request:d},f=f.finally(function(p){return delete l[a],p}),{promise:f,request:d}):{}}var n7=Ug;var sto=_(T(),1);var ZSe="https://dev.virtualearth.net/REST/v1/Locations";function i7(e){e=e??z.EMPTY_OBJECT;let t=e.key;if(!c(t))throw new L("options.key is required.");this._key=t;let n={key:t};c(e.culture)&&(n.culture=e.culture),this._resource=new Ge({url:ZSe,queryParameters:n}),this._credit=new Ct('<img src="http://dev.virtualearth.net/Branding/logo_powered_by.png"/>',!1)}Object.defineProperties(i7.prototype,{url:{get:function(){return ZSe}},key:{get:function(){return this._key}},credit:{get:function(){return this._credit}}});i7.prototype.geocode=async function(e){return C.typeOf.string("query",e),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],l=r[2],d=r[3];return{displayName:o.name,destination:de.fromDegrees(a,s,d,l)}})})};var o7=i7;var dto=_(T(),1);function r7(){}Object.defineProperties(r7.prototype,{credit:{get:function(){}}});r7.prototype.geocode=function(e){C.typeOf.string("query",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 s7=r7;var _to=_(T(),1);var J_t=new ce,RSe=new m,IL=new m;function Q_t(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,l){c(l)||(l=new m);let d=(a-i)*o;return m.lerp(r,s,d,l)}}return function(i,o){c(o)||(o=new m);let r=e._lastTimeIndex=e.findTimeInterval(i,e._lastTimeIndex),s=(i-n[r])/(n[r+1]-n[r]),a=J_t;a.z=s,a.y=s*s,a.x=a.y*s,a.w=1;let l,d,u,f,p;return r===0?(l=t[0],d=t[1],u=e.firstTangent,f=m.subtract(t[2],l,RSe),m.multiplyByScalar(f,.5,f),p=M.multiplyByVector(Ry.hermiteCoefficientMatrix,a,a)):r===t.length-2?(l=t[r],d=t[r+1],f=e.lastTangent,u=m.subtract(d,t[r-1],RSe),m.multiplyByScalar(u,.5,u),p=M.multiplyByVector(Ry.hermiteCoefficientMatrix,a,a)):(l=t[r-1],d=t[r],u=t[r+1],f=t[r+2],p=M.multiplyByVector(Og.catmullRomCoefficientMatrix,a,a)),o=m.multiplyByScalar(l,p.x,o),m.multiplyByScalar(d,p.y,IL),m.add(o,IL,o),m.multiplyByScalar(u,p.z,IL),m.add(o,IL,o),m.multiplyByScalar(f,p.w,IL),m.add(o,IL,o)}}var j_t=new m,q_t=new m;function Og(e){e=e??z.EMPTY_OBJECT;let t=e.points,n=e.times,i=e.firstTangent,o=e.lastTangent;if(C.defined("points",t),C.defined("times",n),C.typeOf.number.greaterThanOrEquals("points.length",t.length,2),C.typeOf.number.equals("times.length","points.length",n.length,t.length),t.length>2&&(c(i)||(i=j_t,m.multiplyByScalar(t[1],2,i),m.subtract(i,t[2],i),m.subtract(i,t[0],i),m.multiplyByScalar(i,.5,i)),!c(o))){let r=t.length-1;o=q_t,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=Q_t(this),this._lastTimeIndex=0}Object.defineProperties(Og.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}}});Og.catmullRomCoefficientMatrix=new M(-.5,1,-.5,0,1.5,-2.5,0,1,-1.5,2,.5,0,.5,-.5,0,0);Og.prototype.findTimeInterval=Pi.prototype.findTimeInterval;Og.prototype.wrapTime=Pi.prototype.wrapTime;Og.prototype.clampTime=Pi.prototype.clampTime;Og.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)};var a7=Og;var bno=_(T(),1);var Bto=_(T(),1);var Rto=_(T(),1);var nB={};nB.clipTriangleAtAxisAlignedThreshold=function(e,t,n,i,o,r){if(!c(e))throw new L("threshold is required.");if(!c(t))throw new L("keepAbove is required.");if(!c(n))throw new L("u0 is required.");if(!c(i))throw new L("u1 is required.");if(!c(o))throw new L("u2 is required.");c(r)?r.length=0:r=[];let s,a,l;t?(s=n<e,a=i<e,l=o<e):(s=n>e,a=i>e,l=o>e);let d=s+a+l,u,f,p,y,h,g;return d===1?s?(u=(e-n)/(i-n),f=(e-n)/(o-n),r.push(1),r.push(2),f!==1&&(r.push(-1),r.push(0),r.push(2),r.push(f)),u!==1&&(r.push(-1),r.push(0),r.push(1),r.push(u))):a?(p=(e-i)/(o-i),y=(e-i)/(n-i),r.push(2),r.push(0),y!==1&&(r.push(-1),r.push(1),r.push(0),r.push(y)),p!==1&&(r.push(-1),r.push(1),r.push(2),r.push(p))):l&&(h=(e-o)/(n-o),g=(e-o)/(i-o),r.push(0),r.push(1),g!==1&&(r.push(-1),r.push(2),r.push(1),r.push(g)),h!==1&&(r.push(-1),r.push(2),r.push(0),r.push(h))):d===2?!s&&n!==e?(y=(e-i)/(n-i),h=(e-o)/(n-o),r.push(0),r.push(-1),r.push(1),r.push(0),r.push(y),r.push(-1),r.push(2),r.push(0),r.push(h)):!a&&i!==e?(g=(e-o)/(i-o),u=(e-n)/(i-n),r.push(1),r.push(-1),r.push(2),r.push(1),r.push(g),r.push(-1),r.push(0),r.push(1),r.push(u)):!l&&o!==e&&(f=(e-n)/(o-n),p=(e-i)/(o-i),r.push(2),r.push(-1),r.push(0),r.push(2),r.push(f),r.push(-1),r.push(1),r.push(2),r.push(p)):d!==3&&(r.push(0),r.push(1),r.push(2)),r};nB.computeBarycentricCoordinates=function(e,t,n,i,o,r,s,a,l){if(!c(e))throw new L("x is required.");if(!c(t))throw new L("y is required.");if(!c(n))throw new L("x1 is required.");if(!c(i))throw new L("y1 is required.");if(!c(o))throw new L("x2 is required.");if(!c(r))throw new L("y2 is required.");if(!c(s))throw new L("x3 is required.");if(!c(a))throw new L("y3 is required.");let d=n-s,u=s-o,f=r-a,p=i-a,y=1/(f*d+u*p),h=t-a,g=e-s,x=(f*g+u*h)*y,S=(-p*g+d*h)*y,V=1-x-S;return c(l)?(l.x=x,l.y=S,l.z=V,l):new m(x,S,V)};nB.computeLineSegmentLineSegmentIntersection=function(e,t,n,i,o,r,s,a,l){C.typeOf.number("x00",e),C.typeOf.number("y00",t),C.typeOf.number("x01",n),C.typeOf.number("y01",i),C.typeOf.number("x10",o),C.typeOf.number("y10",r),C.typeOf.number("x11",s),C.typeOf.number("y11",a);let d=(s-o)*(t-r)-(a-r)*(e-o),u=(n-e)*(t-r)-(i-t)*(e-o),f=(a-r)*(n-e)-(s-o)*(i-t);if(f===0)return;let p=d/f,y=u/f;if(p>=0&&p<=1&&y>=0&&y<=1)return c(l)||(l=new D),l.x=e+p*(n-e),l.y=t+p*(i-t),l};var Z0=nB;function Dg(e){if(!c(e)||!c(e.quantizedVertices))throw new L("options.quantizedVertices is required.");if(!c(e.indices))throw new L("options.indices is required.");if(!c(e.minimumHeight))throw new L("options.minimumHeight is required.");if(!c(e.maximumHeight))throw new L("options.maximumHeight is required.");if(!c(e.maximumHeight))throw new L("options.maximumHeight is required.");if(!c(e.boundingSphere))throw new L("options.boundingSphere is required.");if(!c(e.horizonOcclusionPoint))throw new L("options.horizonOcclusionPoint is required.");if(!c(e.westIndices))throw new L("options.westIndices is required.");if(!c(e.southIndices))throw new L("options.southIndices is required.");if(!c(e.eastIndices))throw new L("options.eastIndices is required.");if(!c(e.northIndices))throw new L("options.northIndices is required.");if(!c(e.westSkirtHeight))throw new L("options.westSkirtHeight is required.");if(!c(e.southSkirtHeight))throw new L("options.southSkirtHeight is required.");if(!c(e.eastSkirtHeight))throw new L("options.eastSkirtHeight is required.");if(!c(e.northSkirtHeight))throw new L("options.northSkirtHeight is required.");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=oB(e.westIndices,o,t),this._southIndices=oB(e.southIndices,r,t),this._eastIndices=oB(e.eastIndices,o,t),this._northIndices=oB(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(Dg.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){return this._waterMask}},childTileMask:{get:function(){return this._childTileMask}},canUpsample:{get:function(){return c(this._mesh)}}});var iB=[];function oB(e,t,n){iB.length=e.length;let i=!1;for(let o=0,r=e.length;o<r;++o)iB[o]=e[o],i=i||o>0&&t(e[o-1],e[o])>0;return i?(iB.sort(t),Me.createTypedArray(n,iB)):e}var GSe="createVerticesFromQuantizedTerrainMesh",$_t=new gi(GSe),eTt=new gi(GSe,Ff.maximumAsynchronousTasks);Dg.prototype.createMesh=function(e){e=e??z.EMPTY_OBJECT,C.typeOf.object("options.tilingScheme",e.tilingScheme),C.typeOf.number("options.x",e.x),C.typeOf.number("options.y",e.y),C.typeOf.number("options.level",e.level);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,l=t.ellipsoid,d=t.tileXYToRectangle(n,i,o),f=(a?eTt:$_t).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:l,exaggeration:r,exaggerationRelativeHeight:s});if(!c(f))return;let p=this;return Promise.resolve(f).then(function(y){let h=p._quantizedVertices.length/3,g=h+p._westIndices.length+p._southIndices.length+p._eastIndices.length+p._northIndices.length,x=Me.createTypedArray(g,y.indices),S=new Float32Array(y.vertices),V=y.center,Z=y.minimumHeight,R=y.maximumHeight,E=p._boundingSphere,I=p._orientedBoundingBox,v=m.clone(y.occludeePointInScaledSpace)??p._horizonOcclusionPoint,P=y.vertexStride,F=Rc.clone(y.encoding);return p._mesh=new dm(V,S,x,y.indexCountWithoutSkirts,h,Z,R,E,v,P,I,F,y.westIndicesSouthToNorth,y.southIndicesEastToWest,y.eastIndicesNorthToSouth,y.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 tTt=new gi("upsampleQuantizedTerrainMesh",Ff.maximumAsynchronousTasks);Dg.prototype.upsample=function(e,t,n,i,o,r,s){if(!c(e))throw new L("tilingScheme is required.");if(!c(t))throw new L("thisX is required.");if(!c(n))throw new L("thisY is required.");if(!c(i))throw new L("thisLevel is required.");if(!c(o))throw new L("descendantX is required.");if(!c(r))throw new L("descendantY is required.");if(!c(s))throw new L("descendantLevel is required.");if(s-i>1)throw new L("Upsampling through more than one level at a time is not currently supported.");let l=this._mesh;if(!c(this._mesh))return;let d=t*2!==o,u=n*2===r,f=e.ellipsoid,p=e.tileXYToRectangle(o,r,s),y=tTt.scheduleTask({vertices:l.vertices,vertexCountWithoutSkirts:l.vertexCountWithoutSkirts,indices:l.indices,indexCountWithoutSkirts:l.indexCountWithoutSkirts,encoding:l.encoding,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,isEastChild:d,isNorthChild:u,childRectangle:p,ellipsoid:f});if(!c(y))return;let h=Math.min(this._westSkirtHeight,this._eastSkirtHeight);h=Math.min(h,this._southSkirtHeight),h=Math.min(h,this._northSkirtHeight);let g=d?h*.5:this._westSkirtHeight,x=u?h*.5:this._southSkirtHeight,S=d?this._eastSkirtHeight:h*.5,V=u?this._northSkirtHeight:h*.5,Z=this._credits;return Promise.resolve(y).then(function(R){let E=new Uint16Array(R.vertices),I=Me.createTypedArray(E.length/3,R.indices),v;return c(R.encodedNormals)&&(v=new Uint8Array(R.encodedNormals)),new Dg({quantizedVertices:E,indices:I,encodedNormals:v,minimumHeight:R.minimumHeight,maximumHeight:R.maximumHeight,boundingSphere:ue.clone(R.boundingSphere),orientedBoundingBox:Xn.clone(R.orientedBoundingBox),horizonOcclusionPoint:m.clone(R.horizonOcclusionPoint),westIndices:R.westIndices,southIndices:R.southIndices,eastIndices:R.eastIndices,northIndices:R.northIndices,westSkirtHeight:g,southSkirtHeight:x,eastSkirtHeight:S,northSkirtHeight:V,childTileMask:0,credits:Z,createdByUpsampling:!0})})};var c7=32767,ESe=new m;Dg.prototype.interpolateHeight=function(e,t,n){let i=w.clamp((t-e.west)/e.width,0,1);i*=c7;let o=w.clamp((n-e.south)/e.height,0,1);return o*=c7,c(this._mesh)?rTt(this,i,o):sTt(this,i,o)};function XSe(e,t,n,i,o,r,s,a){let l=Math.min(n,o,s),d=Math.max(n,o,s),u=Math.min(i,r,a),f=Math.max(i,r,a);return e>=l&&e<=d&&t>=u&&t<=f}var nTt=new D,iTt=new D,oTt=new D;function rTt(e,t,n){let i=e._mesh,o=i.vertices,r=i.encoding,s=i.indices;for(let a=0,l=s.length;a<l;a+=3){let d=s[a],u=s[a+1],f=s[a+2],p=r.decodeTextureCoordinates(o,d,nTt),y=r.decodeTextureCoordinates(o,u,iTt),h=r.decodeTextureCoordinates(o,f,oTt);if(XSe(t,n,p.x,p.y,y.x,y.y,h.x,h.y)){let g=Z0.computeBarycentricCoordinates(t,n,p.x,p.y,y.x,y.y,h.x,h.y,ESe);if(g.x>=-1e-15&&g.y>=-1e-15&&g.z>=-1e-15){let x=r.decodeHeight(o,d),S=r.decodeHeight(o,u),V=r.decodeHeight(o,f);return g.x*x+g.y*S+g.z*V}}}}function sTt(e,t,n){let i=e._uValues,o=e._vValues,r=e._heightValues,s=e._indices;for(let a=0,l=s.length;a<l;a+=3){let d=s[a],u=s[a+1],f=s[a+2],p=i[d],y=i[u],h=i[f],g=o[d],x=o[u],S=o[f];if(XSe(t,n,p,g,y,x,h,S)){let V=Z0.computeBarycentricCoordinates(t,n,p,g,y,x,h,S,ESe);if(V.x>=-1e-15&&V.y>=-1e-15&&V.z>=-1e-15){let Z=V.x*r[d]+V.y*r[u]+V.z*r[f];return w.lerp(e._minimumHeight,e._maximumHeight,Z/c7)}}}}Dg.prototype.isChildAvailable=function(e,t,n,i){if(!c(e))throw new L("thisX is required.");if(!c(t))throw new L("thisY is required.");if(!c(n))throw new L("childX is required.");if(!c(i))throw new L("childY is required.");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};var xS=Dg;function aTt(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 WSe(e){this.requestVertexNormals=e.requestVertexNormals??!1,this.requestWaterMask=e.requestWaterMask??!1,this.requestMetadata=e.requestMetadata??!0,this.ellipsoid=e.ellipsoid??re.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=[]}WSe.prototype.build=function(e){e._heightmapWidth=this.heightmapWidth,e._scheme=this.scheme;let t=c(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 wSe(e,t,n){if(!t.format){let g="The tile format is not specified in the layer.json file.";throw e.previousError=Ro.reportError(e.previousError,n,c(n)?n._errorEvent:void 0,g),new le(g)}if(!t.tiles||t.tiles.length===0){let g="The layer.json file does not specify any tile URL templates.";throw e.previousError=Ro.reportError(e.previousError,n,c(n)?n._errorEvent:void 0,g),new le(g)}let i=!1,o=!1,r=!1,s=!0,a=!1;if(t.format==="heightmap-1.0")a=!0,c(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 g=`The tile format "${t.format}" is invalid or not supported.`;throw e.previousError=Ro.reportError(e.previousError,n,c(n)?n._errorEvent:void 0,g),new le(g)}let l=t.tiles,d=t.maxzoom;if(e.overallMaxZoom=Math.max(e.overallMaxZoom,d),!t.projection||t.projection==="EPSG:4326")e.tilingScheme=new Ki({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});else if(t.projection==="EPSG:3857")e.tilingScheme=new ss({numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});else{let g=`The projection "${t.projection}" is invalid or not supported.`;throw e.previousError=Ro.reportError(e.previousError,n,c(n)?n._errorEvent:void 0,g),new le(g)}if(e.levelZeroMaximumGeometricError=rs.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.tilingScheme.ellipsoid,e.heightmapWidth,e.tilingScheme.getNumberOfXTilesAtLevel(0)),!t.scheme||t.scheme==="tms"||t.scheme==="slippyMap")e.scheme=t.scheme;else{let g=`The scheme "${t.scheme}" is invalid or not supported.`;throw e.previousError=Ro.reportError(e.previousError,n,c(n)?n._errorEvent:void 0,g),new le(g)}let u;c(t.extensions)&&t.extensions.indexOf("octvertexnormals")!==-1?i=!0:c(t.extensions)&&t.extensions.indexOf("vertexnormals")!==-1&&(i=!0,s=!1),c(t.extensions)&&t.extensions.indexOf("watermask")!==-1&&(o=!0),c(t.extensions)&&t.extensions.indexOf("metadata")!==-1&&(r=!0);let f=t.metadataAvailability,p=t.available,y;if(c(p)&&!c(f)){y=new Hf(e.tilingScheme,p.length);for(let g=0;g<p.length;++g){let x=p[g],S=e.tilingScheme.getNumberOfYTilesAtLevel(g);c(e.overallAvailability[g])||(e.overallAvailability[g]=[]);for(let V=0;V<x.length;++V){let Z=x[V],R=S-Z.endY-1,E=S-Z.startY-1;e.overallAvailability[g].push([Z.startX,R,Z.endX,E]),y.addAvailableTileRange(g,Z.startX,R,Z.endX,E)}}}else c(f)&&(u=new Hf(e.tilingScheme,d),y=new Hf(e.tilingScheme,d),e.overallAvailability[0]=[[0,0,1,0]],y.addAvailableTileRange(0,0,0,1,0));e.hasWaterMask=e.hasWaterMask||o,e.hasVertexNormals=e.hasVertexNormals||i,e.hasMetadata=e.hasMetadata||r,c(t.attribution)&&(e.attribution.length>0&&(e.attribution+=" "),e.attribution+=t.attribution),e.layers.push(new aTt({resource:e.lastResource,version:t.version,isHeightmap:a,tileUrlTemplates:l,availability:y,hasVertexNormals:i,hasWaterMask:o,hasMetadata:r,availabilityLevels:f,availabilityTilesLoaded:u,littleEndianExtensionSize:s}));let h=t.parentUrl;return c(h)?c(y)?(e.lastResource=e.lastResource.getDerivedResource({url:h}),e.lastResource.appendForwardSlash(),e.layerJsonResource=e.lastResource.getDerivedResource({url:"layer.json"}),await u7(e),!0):(console.log("A layer.json can't have a parentUrl if it does't have an available array."),!0):!0}function cTt(e,t,n){let i=`An error occurred while accessing ${e.layerJsonResource.url}.`;if(c(t)&&(i+=` ${t.message}`),e.previousError=Ro.reportError(e.previousError,n,c(n)?n._errorEvent:void 0,i),e.previousError.retry)return u7(e,n);throw new le(i)}async function lTt(e,t,n){await wSe(e,t,n);let i=e.overallAvailability.length;if(i>0){let o=e.availability=new Hf(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 l=s[a];o.addAvailableTileRange(r,l[0],l[1],l[2],l[3])}}}if(e.attribution.length>0){let o=new Ct(e.attribution);e.tileCredits.push(o)}return!0}async function u7(e,t){try{let n=await e.layerJsonResource.fetchJson();return lTt(e,n,t)}catch(n){return c(n)&&n.statusCode===404?(await wSe(e,{tilejson:"2.1.0",format:"heightmap-1.0",version:"1.0.0",scheme:"tms",tiles:["{z}/{x}/{y}.terrain?v={version}"]},t),!0):cTt(e,n,t)}}function zf(e){e=e??z.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 ye;let t=e.credit;typeof t=="string"&&(t=new Ct(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 l7={OCT_VERTEX_NORMALS:1,WATER_MASK:2,METADATA:4};function ISe(e){return!c(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 dTt(e,t,n,i,o){let r=new Uint16Array(t,0,e._heightmapWidth*e._heightmapWidth);return new Da({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 uTt(e,t,n,i,o,r){let s=r.littleEndianExtensionSize,a=0,l=3,d=l+1,u=Float64Array.BYTES_PER_ELEMENT*l,f=Float64Array.BYTES_PER_ELEMENT*d,y=Uint16Array.BYTES_PER_ELEMENT*3,h=3,g=Uint16Array.BYTES_PER_ELEMENT,x=g*h,S=new DataView(t),V=new m(S.getFloat64(a,!0),S.getFloat64(a+8,!0),S.getFloat64(a+16,!0));a+=u;let Z=S.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let R=S.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let E=new ue(new m(S.getFloat64(a,!0),S.getFloat64(a+8,!0),S.getFloat64(a+16,!0)),S.getFloat64(a+u,!0));a+=f;let I=new m(S.getFloat64(a,!0),S.getFloat64(a+8,!0),S.getFloat64(a+16,!0));a+=u;let v=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let P=new Uint16Array(t,a,v*3);a+=v*y,v>64*1024&&(g=Uint32Array.BYTES_PER_ELEMENT,x=g*h);let F=P.subarray(0,v),N=P.subarray(v,2*v),b=P.subarray(v*2,3*v);Fn.zigZagDeltaDecode(F,N,b),a%g!==0&&(a+=g-a%g);let G=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let X=Me.createTypedArrayFromArrayBuffer(v,t,a,G*h);a+=G*x;let W=0,A=X.length;for(let me=0;me<A;++me){let _e=X[me];X[me]=W-_e,_e===0&&++W}let k=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let B=Me.createTypedArrayFromArrayBuffer(v,t,a,k);a+=k*g;let O=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let H=Me.createTypedArrayFromArrayBuffer(v,t,a,O);a+=O*g;let U=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let K=Me.createTypedArrayFromArrayBuffer(v,t,a,U);a+=U*g;let Q=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let ie=Me.createTypedArrayFromArrayBuffer(v,t,a,Q);a+=Q*g;let j,$;for(;a<S.byteLength;){let me=S.getUint8(a,!0);a+=Uint8Array.BYTES_PER_ELEMENT;let _e=S.getUint32(a,s);if(a+=Uint32Array.BYTES_PER_ELEMENT,me===l7.OCT_VERTEX_NORMALS&&e._requestVertexNormals)j=new Uint8Array(t,a,v*2);else if(me===l7.WATER_MASK&&e._requestWaterMask)$=new Uint8Array(t,a,_e);else if(me===l7.METADATA&&e._requestMetadata){let Ve=S.getUint32(a,!0);if(Ve>0){let Ze=er(new Uint8Array(t),a+Uint32Array.BYTES_PER_ELEMENT,Ve).available;if(c(Ze))for(let De=0;De<Ze.length;++De){let Ke=n+De+1,rt=Ze[De],Xt=e._tilingScheme.getNumberOfYTilesAtLevel(Ke);for(let Ht=0;Ht<rt.length;++Ht){let qe=rt[Ht],mn=Xt-qe.endY-1,Dt=Xt-qe.startY-1;e.availability.addAvailableTileRange(Ke,qe.startX,mn,qe.endX,Dt),r.availability.addAvailableTileRange(Ke,qe.startX,mn,qe.endX,Dt)}}}r.availabilityTilesLoaded.addAvailableTileRange(n,i,o,i,o)}a+=_e}let ne=e.getLevelMaximumGeometricError(n)*5,be=e._tilingScheme.tileXYToRectangle(i,o,n),Ce=Xn.fromRectangle(be,Z,R,e._tilingScheme.ellipsoid);return new xS({center:V,minimumHeight:Z,maximumHeight:R,boundingSphere:E,orientedBoundingBox:Ce,horizonOcclusionPoint:I,quantizedVertices:P,encodedNormals:j,indices:X,westIndices:B,southIndices:H,eastIndices:K,northIndices:ie,westSkirtHeight:ne,southSkirtHeight:ne,eastSkirtHeight:ne,northSkirtHeight:ne,childTileMask:e.availability.computeChildMaskForTile(n,i,o),waterMask:$,credits:e._tileCredits})}zf.prototype.requestTileGeometry=function(e,t,n,i){let o=this._layers,r,s=o.length,a=!1,l=Promise.resolve();if(s===1)r=o[0];else for(let d=0;d<s;++d){let u=o[d];if(!c(u.availability)||u.availability.isTileAvailable(n,e,t)){r=u;break}let f=m7(this,e,t,n,u,d===0);f.result&&(a=!0,l=l.then(()=>f.promise))}return!c(r)&&a?l.then(()=>new Promise(d=>{setTimeout(()=>{let u=this.requestTileGeometry(e,t,n,i);d(u)},0)})):PSe(this,e,t,n,r,i)};function PSe(e,t,n,i,o,r){if(!c(o))return Promise.reject(new le("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 l=[];e._requestVertexNormals&&o.hasVertexNormals&&l.push(o.littleEndianExtensionSize?"octvertexnormals":"vertexnormals"),e._requestWaterMask&&o.hasWaterMask&&l.push("watermask"),e._requestMetadata&&o.hasMetadata&&l.push("metadata");let d,u,f=s[(t+a+i)%s.length],p=o.resource;c(p._ionEndpoint)&&!c(p._ionEndpoint.externalType)?(l.length!==0&&(u={extensions:l.join("-")}),d=ISe(void 0)):d=ISe(l);let y=p.getDerivedResource({url:f,templateValues:{version:o.version,z:i,x:t,y:a},queryParameters:u,headers:d,request:r}).fetchArrayBuffer();if(c(y))return y.then(function(h){return c(h)?c(e._heightmapStructure)?dTt(e,h,i,t,n):uTt(e,h,i,t,n,o):Promise.reject(new le("Mesh buffer doesn't exist."))})}Object.defineProperties(zf.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}}});zf.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};zf.fromIonAssetId=async function(e,t){C.defined("assetId",e);let n=await xd.fromAssetId(e);return zf.fromUrl(n,t)};zf.fromUrl=async function(e,t){C.defined("url",e),t=t??z.EMPTY_OBJECT,e=await Promise.resolve(e);let n=Ge.createIfNeeded(e);n.appendForwardSlash();let i=new WSe(t);i.lastResource=n,i.layerJsonResource=i.lastResource.getDerivedResource({url:"layer.json"}),await u7(i);let o=new zf(t);return i.build(o),o};zf.prototype.getTileDataAvailable=function(e,t,n){if(!c(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(m7(this,e,t,n,i[r],r===0).result)return;return!1};zf.prototype.loadTileDataAvailability=function(e,t,n){if(!c(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=m7(this,e,t,n,i[r],r===0);if(c(s.promise))return s.promise}};function d7(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,l=n/s|0;return{level:r,x:a,y:l}}function m7(e,t,n,i,o,r){if(!c(o.availabilityLevels))return{result:!1};let s,a=function(){delete o.availabilityPromiseCache[s]},l=o.availabilityTilesLoaded,d=o.availability,u=d7(o,t,n,i);for(;c(u);){if(d.isTileAvailable(u.level,u.x,u.y)&&!l.isTileAvailable(u.level,u.x,u.y)){let f;if(!r&&(s=`${u.level}-${u.x}-${u.y}`,f=o.availabilityPromiseCache[s],!c(f))){let p=new Jo({throttle:!1,throttleByServer:!0,type:us.TERRAIN});f=PSe(e,u.x,u.y,u.level,o,p),c(f)&&(o.availabilityPromiseCache[s]=f,f.then(a))}return{result:!0,promise:f}}u=d7(o,u.x,u.y,u.level)}return{result:!1}}zf._getAvailabilityTile=d7;var _S=zf;var Lno=_(T(),1);function R0(e){e=e??z.EMPTY_OBJECT;let t=e.radius;C.typeOf.number("radius",t);let 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 cl(n),this._workerName="createCircleGeometry"}R0.packedLength=cl.packedLength;R0.pack=function(e,t,n){return C.typeOf.object("value",e),cl.pack(e._ellipseGeometry,t,n)};var vSe=new cl({center:new m,semiMajorAxis:1,semiMinorAxis:1}),za={center:new m,radius:void 0,ellipsoid:re.clone(re.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};R0.unpack=function(e,t,n){let i=cl.unpack(e,t,vSe);return za.center=m.clone(i._center,za.center),za.ellipsoid=re.clone(i._ellipsoid,za.ellipsoid),za.ellipsoid=re.clone(i._ellipsoid,vSe._ellipsoid),za.height=i._height,za.extrudedHeight=i._extrudedHeight,za.granularity=i._granularity,za.vertexFormat=We.clone(i._vertexFormat,za.vertexFormat),za.stRotation=i._stRotation,za.shadowVolume=i._shadowVolume,c(n)?(za.semiMajorAxis=i._semiMajorAxis,za.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new cl(za),n):(za.radius=i._semiMajorAxis,new R0(za))};R0.createGeometry=function(e){return cl.createGeometry(e._ellipseGeometry)};R0.createShadowVolume=function(e,t,n){let i=e._ellipseGeometry._granularity,o=e._ellipseGeometry._ellipsoid,r=t(i,o),s=n(i,o);return new R0({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(R0.prototype,{rectangle:{get:function(){return this._ellipseGeometry.rectangle}},textureCoordinateRotationPoints:{get:function(){return this._ellipseGeometry.textureCoordinateRotationPoints}}});var f7=R0;var wno=_(T(),1);function WL(e){e=e??z.EMPTY_OBJECT;let t=e.radius;C.typeOf.number("radius",t);let 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 Md(n),this._workerName="createCircleOutlineGeometry"}WL.packedLength=Md.packedLength;WL.pack=function(e,t,n){return C.typeOf.object("value",e),Md.pack(e._ellipseGeometry,t,n)};var mTt=new Md({center:new m,semiMajorAxis:1,semiMinorAxis:1}),ru={center:new m,radius:void 0,ellipsoid:re.clone(re.UNIT_SPHERE),height:void 0,extrudedHeight:void 0,granularity:void 0,numberOfVerticalLines:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0};WL.unpack=function(e,t,n){let i=Md.unpack(e,t,mTt);return ru.center=m.clone(i._center,ru.center),ru.ellipsoid=re.clone(i._ellipsoid,ru.ellipsoid),ru.height=i._height,ru.extrudedHeight=i._extrudedHeight,ru.granularity=i._granularity,ru.numberOfVerticalLines=i._numberOfVerticalLines,c(n)?(ru.semiMajorAxis=i._semiMajorAxis,ru.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new Md(ru),n):(ru.radius=i._semiMajorAxis,new WL(ru))};WL.createGeometry=function(e){return Md.createGeometry(e._ellipseGeometry)};var h7=WL;var Ano=_(T(),1);function fTt(e){return e=e??z.EMPTY_OBJECT,_S.fromIonAssetId(2426648,{requestVertexNormals:e.requestVertexNormals??!1})}var I9=fTt;var Ono=_(T(),1);function hTt(e){return e=e??z.EMPTY_OBJECT,_S.fromIonAssetId(1,{requestVertexNormals:e.requestVertexNormals??!1,requestWaterMask:e.requestWaterMask??!1,ellipsoid:re.WGS84})}var TS=hTt;var $no=_(T(),1);function wL(e){e=e??z.EMPTY_OBJECT,C.defined("options.callback",e.callback),C.defined("options.width",e.width),C.defined("options.height",e.height),this._callback=e.callback,this._tilingScheme=e.tilingScheme,c(this._tilingScheme)||(this._tilingScheme=new Ki({ellipsoid:e.ellipsoid??re.default})),this._width=e.width,this._height=e.height;let t=Math.max(this._width,this._height);this._levelZeroMaximumGeometricError=rs.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,t,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new ye;let n=e.credit;typeof n=="string"&&(n=new Ct(n)),this._credit=n}Object.defineProperties(wL.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}}});wL.prototype.requestTileGeometry=function(e,t,n,i){let o=this._callback(e,t,n);if(!c(o))return;let r=this._width,s=this._height;return Promise.resolve(o).then(function(a){let l=a;return Array.isArray(l)&&(l=new Float64Array(l)),new Da({buffer:l,width:r,height:s})})};wL.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};wL.prototype.getTileDataAvailable=function(e,t,n){};wL.prototype.loadTileDataAvailability=function(e,t,n){};var p7=wL;var iio=_(T(),1);var pTt=1953029805,bTt=2917034100;function b7(e,t){if(b7.passThroughDataForTesting)return t;C.typeOf.object("key",e),C.typeOf.object("data",t);let n=e.byteLength;if(n===0||n%4!==0)throw new le("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===pTt||o===bTt)return t;let r=new DataView(e),s=0,a=t.byteLength,l=a-a%8,d=n,u,f=8;for(;s<l;)for(f=(f+8)%24,u=f;s<l&&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&&(f=(f+8)%24,u=f);s<a;)i.setUint8(s,i.getUint8(s)^r.getUint8(u)),s++,u++}b7.passThroughDataForTesting=!1;var W9=b7;var rio=_(T(),1);function FSe(e){this.proxy=e}FSe.prototype.getURL=function(e){let t=this.proxy.indexOf("?")===-1?"?":"";return this.proxy+t+encodeURIComponent(e)};var y7=FSe;var lio=_(T(),1);function ASe(e,t){return Cs("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(ASe,"EMPTY_OBJECT",{get:function(){return Cs("defaultValue.EMPTY_OBJECT","defaultValue.EMPTY_OBJECT has been deprecated and will be removed in Cesium 1.134. Use Frozen.EMPTY_OBJECT instead"),z.EMPTY_OBJECT}});var g7=ASe;var hio=_(T(),1);function rB(){L.throwInstantiationError()}Object.defineProperties(rB.prototype,{credit:{get:L.throwInstantiationError}});rB.getCreditsFromResult=function(e){if(c(e.attributions))return e.attributions.map(Ct.getIonCredit)};rB.prototype.geocode=L.throwInstantiationError;var PL=rB;var bio=_(T(),1),yTt={SEARCH:0,AUTOCOMPLETE:1},Bg=Object.freeze(yTt);var xio=_(T(),1);function MSe(){L.throwInstantiationError()}MSe.createGeometry=function(e){L.throwInstantiationError()};var x7=MSe;var kio=_(T(),1),CTt=_(_7(),1);var Zio=_(T(),1);var Sio=_(T(),1);function gTt(e,t){return(e&t)!==0}var Wc=gTt;var xTt=[1,2,4,8],NSe=15,_Tt=16,TTt=64,STt=128;function pp(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}pp.clone=function(e,t){return c(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 pp(e._bits,e.cnodeVersion,e.imageryVersion,e.terrainVersion,e.imageryProvider,e.terrainProvider),t.ancestorHasTerrain=e.ancestorHasTerrain,t.terrainState=e.terrainState,t};pp.prototype.setParent=function(e){this.ancestorHasTerrain=e.ancestorHasTerrain||this.hasTerrain()};pp.prototype.hasSubtree=function(){return Wc(this._bits,_Tt)};pp.prototype.hasImagery=function(){return Wc(this._bits,TTt)};pp.prototype.hasTerrain=function(){return Wc(this._bits,STt)};pp.prototype.hasChildren=function(){return Wc(this._bits,NSe)};pp.prototype.hasChild=function(e){return Wc(this._bits,xTt[e])};pp.prototype.getChildBitmask=function(){return this._bits&NSe};var w9=pp;function VTt(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 LTt=VTt(`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 su(e){this.imageryPresent=!0,this.protoImagery=void 0,this.terrainPresent=!0,this.negativeAltitudeExponentBias=32,this.negativeAltitudeThreshold=w.EPSILON12,this.providers={},this.key=void 0,this._resource=void 0,this._quadPacketVersion=1,this._tileInfo={},this._subtreePromises={}}Object.defineProperties(su.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},resource:{get:function(){return this._resource}}});su.fromUrl=async function(e){C.defined("resourceOrUrl",e);let t=e;typeof t!="string"&&!(t instanceof Ge)&&(C.typeOf.string("resourceOrUrl.url",e.url),t=e.url);let n=Ge.createIfNeeded(t);n.appendForwardSlash();let i=new su;i._resource=n;try{await ZTt(i),await i.getQuadTreePacket("",i._quadPacketVersion)}catch(o){let r=`An error occurred while accessing ${USe(i,"",1).url}: ${o}`;throw new le(r)}return i};su.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<<o,s=0;Wc(t,r)?Wc(e,r)&&(s|=1):(s|=2,Wc(e,r)||(s|=1)),i+=s}return i};su.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];Wc(s,2)?Wc(s,1)||(t|=r):(n|=r,Wc(s,1)&&(t|=r))}return{x:t,y:n,level:i}};su.prototype.isValid=function(e){let t=this.getTileInformationFromQuadKey(e);if(c(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),c(t)){!t.hasSubtree()&&!t.hasChild(parseInt(o))&&(n=!1);break}else if(t===null){n=!1;break}return n};var kSe=new gi("decodeGoogleEarthEnterprisePacket");su.prototype.getQuadTreePacket=function(e,t,n){t=t??1,e=e??"";let o=USe(this,e,t,n).fetchArrayBuffer();if(!c(o))return;let r=this._tileInfo,s=this.key;return o.then(function(a){return kSe.scheduleTask({buffer:a,quadKey:e,type:"Metadata",key:s},[a]).then(function(d){let u,f=-1;if(e!==""){f=e.length+1;let h=d[e];u=r[e],u._bits|=h._bits,delete d[e]}let p=Object.keys(d);p.sort(function(h,g){return h.length-g.length});let y=p.length;for(let h=0;h<y;++h){let g=p[h];if(d[g]!==null){let S=w9.clone(d[g]),V=g.length;if(V===f)S.setParent(u);else if(V>1){let Z=r[g.substring(0,g.length-1)];S.setParent(Z)}r[g]=S}else r[g]=null}})})};su.prototype.populateSubtree=function(e,t,n,i){let o=su.tileXYToQuadKey(e,t,n);return C7(this,o,i)};function C7(e,t,n){let i=e._tileInfo,o=t,r=i[o];if(c(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,l=a[o];if(c(l))return l.then(function(){return s=new Jo({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),C7(e,t,s)});if(!c(r)||!r.hasSubtree())return Promise.reject(new le(`Couldn't load metadata for tile ${t}`));if(l=e.getQuadTreePacket(o,r.cnodeVersion,n),!!c(l))return a[o]=l,l.then(function(){return s=new Jo({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),C7(e,t,s)}).finally(function(){delete a[o]})}su.prototype.getTileInformation=function(e,t,n){let i=su.tileXYToQuadKey(e,t,n);return this._tileInfo[i]};su.prototype.getTileInformationFromQuadKey=function(e){return this._tileInfo[e]};function USe(e,t,n,i){return e._resource.getDerivedResource({url:`flatfile?q2-0${t}-q.${n.toString()}`,request:i})}var T7,S7;function ZTt(e){let t=e._resource.getDerivedResource({url:"dbRoot.v5",queryParameters:{output:"proto"}});if(!c(S7)){let n=on("ThirdParty/google-earth-dbroot-parser.js"),i=window.cesiumGoogleEarthDbRootParser;S7=sx(n).then(function(){T7=window.cesiumGoogleEarthDbRootParser(CTt),c(i)?window.cesiumGoogleEarthDbRootParser=i:delete window.cesiumGoogleEarthDbRootParser})}return S7.then(function(){return t.fetchArrayBuffer()}).then(function(n){let i=T7.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 l=o.buffer.slice(r,s);return kSe.scheduleTask({buffer:l,type:"DbRoot",key:a},[l])}).then(function(n){let i=T7.DbRootProto.decode(new Uint8Array(n.buffer));if(e.imageryPresent=i.imageryPresent??e.imageryPresent,e.protoImagery=i.protoImagery,e.terrainPresent=i.terrainPresent??e.terrainPresent,c(i.endSnippet)&&c(i.endSnippet.model)){let a=i.endSnippet.model;e.negativeAltitudeExponentBias=a.negativeAltitudeExponentBias??e.negativeAltitudeExponentBias,e.negativeAltitudeThreshold=a.compressedNegativeAltitudeThreshold??e.negativeAltitudeThreshold}c(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 l=r[a],d=l.copyrightString;c(d)&&(o[l.providerId]=new Ct(d.value))}}).catch(function(){console.log(`Failed to retrieve ${t.url}. Using defaults.`),e.key=LTt})}var G0=su;var roo=_(T(),1);function SS(e){e=e??z.EMPTY_OBJECT,C.typeOf.object("options.buffer",e.buffer),C.typeOf.number("options.negativeAltitudeExponentBias",e.negativeAltitudeExponentBias),C.typeOf.number("options.negativeElevationThreshold",e.negativeElevationThreshold),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(SS.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){}}});var BSe="createVerticesFromGoogleEarthEnterpriseBuffer",RTt=new gi(BSe),GTt=new gi(BSe,Ff.maximumAsynchronousTasks),OSe=new de,V7=new de;SS.prototype.createMesh=function(e){e=e??z.EMPTY_OBJECT,C.typeOf.object("options.tilingScheme",e.tilingScheme),C.typeOf.number("options.x",e.x),C.typeOf.number("options.y",e.y),C.typeOf.number("options.level",e.level);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,l=t.ellipsoid;t.tileXYToNativeRectangle(n,i,o,OSe),t.tileXYToRectangle(n,i,o,V7);let d=l.cartographicToCartesian(de.center(V7)),f=40075.16/(1<<o);this._skirtHeight=Math.min(f*8,1e3);let y=(a?GTt:RTt).scheduleTask({buffer:this._buffer,nativeRectangle:OSe,rectangle:V7,relativeToCenter:d,ellipsoid:l,skirtHeight:this._skirtHeight,exaggeration:r,exaggerationRelativeHeight:s,includeWebMercatorT:!0,negativeAltitudeExponentBias:this._negativeAltitudeExponentBias,negativeElevationThreshold:this._negativeElevationThreshold});if(!c(y))return;let h=this;return y.then(function(g){return h._mesh=new dm(d,new Float32Array(g.vertices),new Uint16Array(g.indices),g.indexCountWithoutSkirts,g.vertexCountWithoutSkirts,g.minimumHeight,g.maximumHeight,ue.clone(g.boundingSphere3D),m.clone(g.occludeePointInScaledSpace),g.numberOfAttributes,Xn.clone(g.orientedBoundingBox),Rc.clone(g.encoding),g.westIndicesSouthToNorth,g.southIndicesEastToWest,g.eastIndicesNorthToSouth,g.northIndicesWestToEast),h._minimumHeight=g.minimumHeight,h._maximumHeight=g.maximumHeight,h._buffer=void 0,h._mesh})};SS.prototype.interpolateHeight=function(e,t,n){let i=w.clamp((t-e.west)/e.width,0,1),o=w.clamp((n-e.south)/e.height,0,1);return c(this._mesh)?wTt(this,i,o):FTt(this,i,o,e)};var ETt=new gi("upsampleQuantizedTerrainMesh",Ff.maximumAsynchronousTasks);SS.prototype.upsample=function(e,t,n,i,o,r,s){if(C.typeOf.object("tilingScheme",e),C.typeOf.number("thisX",t),C.typeOf.number("thisY",n),C.typeOf.number("thisLevel",i),C.typeOf.number("descendantX",o),C.typeOf.number("descendantY",r),C.typeOf.number("descendantLevel",s),s-i>1)throw new L("Upsampling through more than one level at a time is not currently supported.");let l=this._mesh;if(!c(this._mesh))return;let d=t*2!==o,u=n*2===r,f=e.ellipsoid,p=e.tileXYToRectangle(o,r,s),y=ETt.scheduleTask({vertices:l.vertices,indices:l.indices,indexCountWithoutSkirts:l.indexCountWithoutSkirts,vertexCountWithoutSkirts:l.vertexCountWithoutSkirts,encoding:l.encoding,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,isEastChild:d,isNorthChild:u,childRectangle:p,ellipsoid:f});if(!c(y))return;let h=this;return y.then(function(g){let x=new Uint16Array(g.vertices),S=Me.createTypedArray(x.length/3,g.indices),V=h._skirtHeight;return new xS({quantizedVertices:x,indices:S,minimumHeight:g.minimumHeight,maximumHeight:g.maximumHeight,boundingSphere:ue.clone(g.boundingSphere),orientedBoundingBox:Xn.clone(g.orientedBoundingBox),horizonOcclusionPoint:m.clone(g.horizonOcclusionPoint),westIndices:g.westIndices,southIndices:g.southIndices,eastIndices:g.eastIndices,northIndices:g.northIndices,westSkirtHeight:V,southSkirtHeight:V,eastSkirtHeight:V,northSkirtHeight:V,childTileMask:0,createdByUpsampling:!0,credits:h._credits})})};SS.prototype.isChildAvailable=function(e,t,n,i){C.typeOf.number("thisX",e),C.typeOf.number("thisY",t),C.typeOf.number("childX",n),C.typeOf.number("childY",i);let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};SS.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var XTt=new D,ITt=new D,WTt=new D,YSe=new m;function wTt(e,t,n){let i=e._mesh,o=i.vertices,r=i.encoding,s=i.indices;for(let a=0,l=s.length;a<l;a+=3){let d=s[a],u=s[a+1],f=s[a+2],p=r.decodeTextureCoordinates(o,d,XTt),y=r.decodeTextureCoordinates(o,u,ITt),h=r.decodeTextureCoordinates(o,f,WTt),g=Z0.computeBarycentricCoordinates(t,n,p.x,p.y,y.x,y.y,h.x,h.y,YSe);if(g.x>=-1e-15&&g.y>=-1e-15&&g.z>=-1e-15){let x=r.decodeHeight(o,d),S=r.decodeHeight(o,u),V=r.decodeHeight(o,f);return g.x*x+g.y*S+g.z*V}}}var PTt=Uint16Array.BYTES_PER_ELEMENT,DSe=Uint32Array.BYTES_PER_ELEMENT,L7=Int32Array.BYTES_PER_ELEMENT,vTt=Float32Array.BYTES_PER_ELEMENT,Z7=Float64Array.BYTES_PER_ELEMENT;function FTt(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 l=new DataView(o),d=0;for(let E=0;E<r;++E)d+=l.getUint32(d,!0),d+=DSe;d+=DSe,d+=2*Z7;let u=w.toRadians(l.getFloat64(d,!0)*180);d+=Z7;let f=w.toRadians(l.getFloat64(d,!0)*180);d+=Z7;let p=i.width/u/2,y=i.height/f/2,h=l.getInt32(d,!0);d+=L7;let g=l.getInt32(d,!0)*3;d+=L7,d+=L7;let x=new Array(h),S=new Array(h),V=new Array(h),Z;for(Z=0;Z<h;++Z)x[Z]=s+l.getUint8(d++)*p,S[Z]=a+l.getUint8(d++)*y,V[Z]=l.getFloat32(d,!0)*6371010,d+=vTt;let R=new Array(g);for(Z=0;Z<g;++Z)R[Z]=l.getUint16(d,!0),d+=PTt;for(Z=0;Z<g;Z+=3){let E=R[Z],I=R[Z+1],v=R[Z+2],P=x[E],F=x[I],N=x[v],b=S[E],G=S[I],X=S[v],W=Z0.computeBarycentricCoordinates(t,n,P,b,F,G,N,X,YSe);if(W.x>=-1e-15&&W.y>=-1e-15&&W.z>=-1e-15)return W.x*V[E]+W.y*V[I]+W.z*V[v]}}var vL=SS;var Voo=_(T(),1);var _m={UNKNOWN:0,NONE:1,SELF:2,PARENT:3},sB=new ee;function aB(){this._terrainCache={},this._lastTidy=ee.now()}aB.prototype.add=function(e,t){this._terrainCache[e]={buffer:t,timestamp:ee.now()}};aB.prototype.get=function(e){let n=this._terrainCache[e];if(c(n))return delete this._terrainCache[e],n.buffer};aB.prototype.tidy=function(){if(ee.now(sB),ee.secondsDifference(sB,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];ee.secondsDifference(sB,r.timestamp)>10&&delete e[o]}ee.clone(sB,this._lastTidy)}};function Yg(e){e=e??z.EMPTY_OBJECT,this._tilingScheme=new Ki({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new de(-w.PI,-w.PI,w.PI,w.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new Ct(t)),this._credit=t,this._levelZeroMaximumGeometricError=40075.16,this._terrainCache=new aB,this._terrainPromises={},this._terrainRequests={},this._errorEvent=new ye}Object.defineProperties(Yg.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(){}}});Yg.fromMetadata=function(e,t){if(C.defined("metadata",e),!e.terrainPresent)throw new le(`The server ${e.url} doesn't have terrain`);let n=new Yg(t);return n._metadata=e,n};var ATt=new gi("decodeGoogleEarthEnterprisePacket");function HSe(e,t,n){let i=t.getChildBitmask();if(t.terrainState===_m.PARENT){i=0;for(let o=0;o<4;++o){let r=n.getTileInformationFromQuadKey(e+o.toString());c(r)&&r.hasTerrain()&&(i|=1<<o)}}return i}Yg.prototype.requestTileGeometry=function(e,t,n,i){let o=G0.tileXYToQuadKey(e,t,n),r=this._terrainCache,s=this._metadata,a=s.getTileInformationFromQuadKey(o);if(!c(a))return Promise.reject(new le("Terrain tile doesn't exist"));let l=a.terrainState;c(l)||(l=a.terrainState=_m.UNKNOWN);let d=r.get(o);if(c(d)){let S=s.providers[a.terrainProvider];return Promise.resolve(new vL({buffer:d,childTileMask:HSe(o,a,s),credits:c(S)?[S]:void 0,negativeAltitudeExponentBias:s.negativeAltitudeExponentBias,negativeElevationThreshold:s.negativeAltitudeThreshold}))}if(r.tidy(),a.ancestorHasTerrain){if(l===_m.NONE)return Promise.reject(new le("Terrain tile doesn't exist"))}else return Promise.resolve(new Da({buffer:new Uint8Array(16*16),width:16,height:16}));let u,f=o,p=-1;switch(l){case _m.SELF:p=a.terrainVersion;break;case _m.PARENT:f=f.substring(0,f.length-1),u=s.getTileInformationFromQuadKey(f),p=u.terrainVersion;break;case _m.UNKNOWN:a.hasTerrain()?p=a.terrainVersion:(f=f.substring(0,f.length-1),u=s.getTileInformationFromQuadKey(f),c(u)&&u.hasTerrain()&&(p=u.terrainVersion));break}if(p<0)return Promise.reject(new le("Terrain tile doesn't exist"));let y=this._terrainPromises,h=this._terrainRequests,g,x;if(c(y[f]))g=y[f],x=h[f];else{x=i;let S=MTt(this,f,p,x).fetchArrayBuffer();if(!c(S))return;g=S.then(function(V){return c(V)?ATt.scheduleTask({buffer:V,type:"Terrain",key:s.key},[V]).then(function(Z){let R=s.getTileInformationFromQuadKey(f);R.terrainState=_m.SELF,r.add(f,Z[0]);let E=R.terrainProvider,I=Z.length-1;for(let v=0;v<I;++v){let P=f+v.toString(),F=s.getTileInformationFromQuadKey(P);c(F)&&(r.add(P,Z[v+1]),F.terrainState=_m.PARENT,F.terrainProvider===0&&(F.terrainProvider=E))}}):Promise.reject(new le("Failed to load terrain."))}),y[f]=g,h[f]=x,g=g.finally(function(){delete y[f],delete h[f]})}return g.then(function(){let S=r.get(o);if(c(S)){let V=s.providers[a.terrainProvider];return new vL({buffer:S,childTileMask:HSe(o,a,s),credits:c(V)?[V]:void 0,negativeAltitudeExponentBias:s.negativeAltitudeExponentBias,negativeElevationThreshold:s.negativeAltitudeThreshold})}return Promise.reject(new le("Failed to load terrain."))}).catch(function(S){return x.state===jn.CANCELLED?(i.state=x.state,Promise.reject(S)):(a.terrainState=_m.NONE,Promise.reject(S))})};Yg.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};Yg.prototype.getTileDataAvailable=function(e,t,n){let i=this._metadata,o=G0.tileXYToQuadKey(e,t,n),r=i.getTileInformation(e,t,n);if(r===null)return!1;if(c(r)){if(!r.ancestorHasTerrain)return!0;let s=r.terrainState;if(s===_m.NONE)return!1;if((!c(s)||s===_m.UNKNOWN)&&(r.terrainState=_m.UNKNOWN,!r.hasTerrain())){o=o.substring(0,o.length-1);let a=i.getTileInformationFromQuadKey(o);if(!c(a)||!a.hasTerrain())return!1}return!0}if(i.isValid(o)){let s=new Jo({throttle:!1,throttleByServer:!0,type:us.TERRAIN});i.populateSubtree(e,t,n,s)}return!1};Yg.prototype.loadTileDataAvailability=function(e,t,n){};function MTt(e,t,n,i){return n=c(n)&&n>0?n:1,e._metadata.resource.getDerivedResource({url:`flatfile?f1c-0${t}-t.${n.toString()}`,request:i})}var R7=Yg;var Poo=_(T(),1);var NTt="https://maps.googleapis.com/maps/api/geocode/json",zSe='<img alt="Google" src="https://assets.ion.cesium.com/google-credit.png" style="vertical-align:-5px">';function G7(e){e=e??z.EMPTY_OBJECT;let t=e.key;if(!c(t))throw new L("options.key is required.");this._resource=new Ge({url:NTt,queryParameters:{key:t}}),this._credit=new Ct(zSe,!0)}Object.defineProperties(G7.prototype,{credit:{get:function(){return this._credit}}});G7.prototype.geocode=async function(e){C.typeOf.string("query",e);let n=await this._resource.getDerivedResource({queryParameters:{address:e}}).fetchJson();if(n.status==="ZERO_RESULTS")return[];if(n.status!=="OK")throw new le(`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:de.fromDegrees(r.lng,r.lat,s.lng,s.lat),attribution:{html:zSe,collapsible:!1}}})};var E7=G7;var Moo=_(T(),1);var cB={};cB.defaultApiKey=void 0;cB.mapTilesApiEndpoint=new Ge({url:"https://tile.googleapis.com/v1/"});cB.getDefaultCredit=function(){return new Ct('<img src="https://assets.ion.cesium.com/google-credit.png" style="vertical-align: -5px" alt="Google">',!0)};var CS=cB;var Uoo=_(T(),1);var P9={};P9.type=void 0;P9.getRequiredDataPoints=L.throwInstantiationError;P9.interpolateOrderZero=L.throwInstantiationError;P9.interpolate=L.throwInstantiationError;var X7=P9;var Doo=_(T(),1),kTt={GOOGLE:"GOOGLE",BING:"BING",DEFAULT:"DEFAULT"},E0=Object.freeze(kTt);var cro=_(T(),1);var joo=_(T(),1);function I7(e){C.defined("url",e),this._url=Ge.createIfNeeded(e),this._url.appendForwardSlash()}Object.defineProperties(I7.prototype,{url:{get:function(){return this._url}},credit:{get:function(){}}});I7.prototype.geocode=async function(e,t){return C.typeOf.string("query",e),this._url.getDerivedResource({url:t===Bg.AUTOCOMPLETE?"autocomplete":"search",queryParameters:{text:e}}).fetchJson().then(function(i){return i.features.map(function(o){let r,s=o.bbox;if(c(s))r=de.fromDegrees(s[0],s[1],s[2],s[3]);else{let a=o.geometry.coordinates[0],l=o.geometry.coordinates[1];r=m.fromDegrees(a,l)}return{displayName:o.properties.label,destination:r,attributions:i.attributions}})})};var v9=I7;function KSe(e){if(!Object.values(E0).some(t=>t===e))throw new L(`Invalid geocodeProviderType: "${e}"`)}var JSe=Object.freeze({[E0.GOOGLE]:"google",[E0.BING]:"bing",[E0.DEFAULT]:void 0});function UTt(e){return JSe[e]}function OTt(e){return Object.entries(JSe).find(t=>t[1]===e)[0]}function W7(e){e=e??z.EMPTY_OBJECT,C.typeOf.object("options.scene",e.scene);let t=e.geocodeProviderType??E0.DEFAULT;KSe(t);let n=e.accessToken??Ym.defaultAccessToken,i=Ge.createIfNeeded(e.server??Ym.defaultServer);i.appendForwardSlash();let o=Ym.getDefaultTokenCredit(n);c(o)&&e.scene.frameState.creditDisplay.addStaticCredit(Ct.clone(o));let r=i.getDerivedResource({url:"v1/geocode"});c(n)&&r.appendQueryParameters({access_token:n}),this._accessToken=n,this._server=i,this._pelias=new v9(r),this.geocodeProviderType=t}Object.defineProperties(W7.prototype,{credit:{get:function(){}},geocodeProviderType:{get:function(){return OTt(this._pelias.url.queryParameters.geocoder)},set:function(e){KSe(e);let t={...this._pelias.url.queryParameters,geocoder:UTt(e)};c(t.geocoder)||delete t.geocoder,this._pelias.url.setQueryParameters(t)}}});W7.prototype.geocode=async function(e,t){return this._pelias.geocode(e,t)};var VS=W7;var pro=_(T(),1);var Eo={};Eo.ExportStatus=Object.freeze({NotStarted:"NotStarted",InProgress:"InProgress",Complete:"Complete",Invalid:"Invalid"});Eo.ExportType=Object.freeze({IMODEL:"IMODEL",CESIUM:"CESIUM","3DTILES":"3DTILES"});Eo.RealityDataType=Object.freeze({Cesium3DTiles:"Cesium3DTiles",PNTS:"PNTS",RealityMesh3DTiles:"RealityMesh3DTiles",Terrain3DTiles:"Terrain3DTiles",KML:"KML",GeoJSON:"GeoJSON",Unstructured:"Unstructured"});Eo.defaultAccessToken=void 0;Eo.defaultShareKey=void 0;Eo._getAuthorizationHeader=function(){if(!c(Eo.defaultAccessToken)&&!c(Eo.defaultShareKey))throw new L("Must set ITwinPlatform.defaultAccessToken or ITwinPlatform.defaultShareKey first");return c(Eo.defaultShareKey)?`Basic ${Eo.defaultShareKey}`:`Bearer ${Eo.defaultAccessToken}`};Eo.apiEndpoint=new Ge({url:"https://api.bentley.com"});Eo.getExports=async function(e){if(C.typeOf.string("iModelId",e),!c(Eo.defaultAccessToken)&&!c(Eo.defaultShareKey))throw new L("Must set ITwinPlatform.defaultAccessToken or ITwinPlatform.defaultShareKey first");let t=new Ge({url:`${Eo.apiEndpoint}mesh-export`,headers:{Authorization:Eo._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json",Prefer:"return=representation"},queryParameters:{iModelId:e,exportType:Eo.ExportType["3DTILES"],$top:"5",client:"CesiumJS"}});typeof CESIUM_VERSION<"u"&&t.appendQueryParameters({clientVersion:CESIUM_VERSION});try{return await t.fetchJson()}catch(n){let i=JSON.parse(n.response);if(n.statusCode===401){let o=i.error.details?.[0].code??"";throw new le(`Unauthorized, bad token, wrong scopes or headers bad. ${o}`)}else{if(n.statusCode===403)throw console.error(i.error.code,i.error.message),new le("Not allowed, forbidden");if(n.statusCode===422)throw new le(`Unprocessable Entity:${i.error.code} ${i.error.message}`);if(n.statusCode===429)throw new le("Too many requests")}throw new le(`Unknown request failure ${n.statusCode}`)}};Eo.getRealityDataMetadata=async function(e,t){if(C.typeOf.string("iTwinId",e),C.typeOf.string("realityDataId",t),!c(Eo.defaultAccessToken)&&!c(Eo.defaultShareKey))throw new L("Must set ITwinPlatform.defaultAccessToken or ITwinPlatform.defaultShareKey first");let n=new Ge({url:`${Eo.apiEndpoint}reality-management/reality-data/${t}`,headers:{Authorization:Eo._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 le(`Unauthorized, bad token, wrong scopes or headers bad. ${r}`)}else{if(i.statusCode===403)throw console.error(o.error.code,o.error.message),new le("Not allowed, forbidden");if(i.statusCode===404)throw new le(`Reality data not found: ${e}, ${t}`);if(i.statusCode===422)throw new le(`Unprocessable Entity:${o.error.code} ${o.error.message}`);if(i.statusCode===429)throw new le("Too many requests")}throw new le(`Unknown request failure ${i.statusCode}`)}};Eo.getRealityDataURL=async function(e,t,n){if(C.typeOf.string("iTwinId",e),C.typeOf.string("realityDataId",t),C.typeOf.string("rootDocument",n),!c(Eo.defaultAccessToken)&&!c(Eo.defaultShareKey))throw new L("Must set ITwinPlatform.defaultAccessToken or ITwinPlatform.defaultShareKey first");let i=new Ge({url:`${Eo.apiEndpoint}reality-management/reality-data/${t}/readaccess`,headers:{Authorization:Eo._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 le(`Unauthorized, bad token, wrong scopes or headers bad. ${s}`)}else{if(o.statusCode===403)throw console.error(r.error.code,r.error.message),new le("Not allowed, forbidden");if(o.statusCode===404)throw new le(`Reality data not found: ${e}, ${t}`);if(o.statusCode===422)throw new le(`Unprocessable Entity:${r.error.code} ${r.error.message}`);if(o.statusCode===429)throw new le("Too many requests")}throw new le(`Unknown request failure ${o.statusCode}`)}};var as=Eo;var gro=_(T(),1);function lB(){L.throwInstantiationError()}Object.defineProperties(lB.prototype,{ellipsoid:{get:L.throwInstantiationError}});lB.prototype.project=L.throwInstantiationError;lB.prototype.unproject=L.throwInstantiationError;var w7=lB;var Lro=_(T(),1);function FL(e){e=e??z.EMPTY_OBJECT;let t=e.weights,n=e.times;if(C.defined("weights",t),C.defined("times",n),C.typeOf.number.greaterThanOrEquals("weights.length",t.length,3),t.length%n.length!==0)throw new L("times.length must be a factor of weights.length.");this._times=n,this._weights=t,this._count=t.length/n.length,this._lastTimeIndex=0}Object.defineProperties(FL.prototype,{times:{get:function(){return this._times}},weights:{get:function(){return this._weights}}});FL.prototype.findTimeInterval=Pi.prototype.findTimeInterval;FL.prototype.wrapTime=Pi.prototype.wrapTime;FL.prototype.clampTime=Pi.prototype.clampTime;FL.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]);c(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 P7=FL;var Pro=_(T(),1);function v7(e,t,n){C.defined("url",e),C.defined("apiKey",t),c(n)&&C.typeOf.object("params",n),e=Ge.createIfNeeded(e),e.appendForwardSlash(),e.setQueryParameters({key:t}),this._url=e,this._params=n??{},this._credit=new Ct('Geodata copyright <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors',!1)}Object.defineProperties(v7.prototype,{url:{get:function(){return this._url}},params:{get:function(){return this._params}},credit:{get:function(){return this._credit}}});v7.prototype.geocode=async function(e){return C.typeOf.string("query",e),this._url.getDerivedResource({url:"json",queryParameters:St(this._params,{q:e})}).fetchJson().then(function(n){return n.results.map(function(i){let o,r=i.bounds;if(c(r))o=de.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 F7=v7;var Aro=_(T(),1);var DTt={packedLength:void 0,pack:L.throwInstantiationError,unpack:L.throwInstantiationError},A7=DTt;var kro=_(T(),1);var BTt={packedInterpolationLength:void 0,convertPackedArrayForInterpolation:L.throwInstantiationError,unpackInterpolationResult:L.throwInstantiationError},M7=BTt;var Yro=_(T(),1);var YTt=new m;function HTt(e,t,n,i){let o=px(e,t,n,i,YTt);return c(o)?o.x>0&&o.y>0&&o.z>0:!1}var N7=HTt;var Kro=_(T(),1);function QSe(){L.throwInstantiationError()}QSe.prototype.getURL=L.throwInstantiationError;var k7=QSe;var mso=_(T(),1);function zTt(e,t,n,i,o,r,s){let a=vi.numberOfPoints(e,t,o),l,d=n.red,u=n.green,f=n.blue,p=n.alpha,y=i.red,h=i.green,g=i.blue,x=i.alpha;if(Y.equals(n,i)){for(l=0;l<a;l++)r[s++]=Y.floatToByte(d),r[s++]=Y.floatToByte(u),r[s++]=Y.floatToByte(f),r[s++]=Y.floatToByte(p);return s}let S=(y-d)/a,V=(h-u)/a,Z=(g-f)/a,R=(x-p)/a,E=s;for(l=0;l<a;l++)r[E++]=Y.floatToByte(d+l*S),r[E++]=Y.floatToByte(u+l*V),r[E++]=Y.floatToByte(f+l*Z),r[E++]=Y.floatToByte(p+l*R);return E}function F9(e){e=e??z.EMPTY_OBJECT;let t=e.positions,n=e.colors,i=e.colorsPerVertex??!1;if(!c(t)||t.length<2)throw new L("At least two positions are required.");if(c(n)&&(i&&n.length<t.length||!i&&n.length<t.length-1))throw new L("colors has an invalid length.");this._positions=t,this._colors=n,this._colorsPerVertex=i,this._arcType=e.arcType??Kt.GEODESIC,this._granularity=e.granularity??w.RADIANS_PER_DEGREE,this._ellipsoid=e.ellipsoid??re.default,this._workerName="createSimplePolylineGeometry";let o=1+t.length*m.packedLength;o+=c(n)?1+n.length*Y.packedLength:1,this.packedLength=o+re.packedLength+3}F9.pack=function(e,t,n){if(!c(e))throw new L("value is required");if(!c(t))throw new L("array is required");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=c(s)?s.length:0,t[n++]=r,i=0;i<r;++i,n+=Y.packedLength)Y.pack(s[i],t,n);return re.pack(e._ellipsoid,t,n),n+=re.packedLength,t[n++]=e._colorsPerVertex?1:0,t[n++]=e._arcType,t[n]=e._granularity,t};F9.unpack=function(e,t,n){if(!c(e))throw new L("array is required");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+=Y.packedLength)s[i]=Y.unpack(e,t);let a=re.unpack(e,t);t+=re.packedLength;let l=e[t++]===1,d=e[t++],u=e[t];return c(n)?(n._positions=r,n._colors=s,n._ellipsoid=a,n._colorsPerVertex=l,n._arcType=d,n._granularity=u,n):new F9({positions:r,colors:s,ellipsoid:a,colorsPerVertex:l,arcType:d,granularity:u})};var dB=new Array(2),uB=new Array(2),KTt={positions:dB,height:uB,ellipsoid:void 0,minDistance:void 0,granularity:void 0};F9.createGeometry=function(e){let t=e._positions,n=e._colors,i=e._colorsPerVertex,o=e._arcType,r=e._granularity,s=e._ellipsoid,a=w.chordLength(r,s.maximumRadius),l=c(n)&&!i,d,u=t.length,f,p,y,h,g=0;if(o===Kt.GEODESIC||o===Kt.RHUMB){let R,E,I;o===Kt.GEODESIC?(R=w.chordLength(r,s.maximumRadius),E=vi.numberOfPoints,I=vi.generateArc):(R=r,E=vi.numberOfPointsRhumbLine,I=vi.generateRhumbArc);let v=vi.extractHeights(t,s),P=KTt;if(o===Kt.GEODESIC?P.minDistance=a:P.granularity=r,P.ellipsoid=s,l){let F=0;for(d=0;d<u-1;d++)F+=E(t[d],t[d+1],R)+1;f=new Float64Array(F*3),y=new Uint8Array(F*4),P.positions=dB,P.height=uB;let N=0;for(d=0;d<u-1;++d){dB[0]=t[d],dB[1]=t[d+1],uB[0]=v[d],uB[1]=v[d+1];let b=I(P);if(c(n)){let G=b.length/3;h=n[d];for(let X=0;X<G;++X)y[N++]=Y.floatToByte(h.red),y[N++]=Y.floatToByte(h.green),y[N++]=Y.floatToByte(h.blue),y[N++]=Y.floatToByte(h.alpha)}f.set(b,g),g+=b.length}}else if(P.positions=t,P.height=v,f=new Float64Array(I(P)),c(n)){for(y=new Uint8Array(f.length/3*4),d=0;d<u-1;++d){let N=t[d],b=t[d+1],G=n[d],X=n[d+1];g=zTt(N,b,G,X,a,y,g)}let F=n[u-1];y[g++]=Y.floatToByte(F.red),y[g++]=Y.floatToByte(F.green),y[g++]=Y.floatToByte(F.blue),y[g++]=Y.floatToByte(F.alpha)}}else{p=l?u*2-2:u,f=new Float64Array(p*3),y=c(n)?new Uint8Array(p*4):void 0;let R=0,E=0;for(d=0;d<u;++d){let I=t[d];if(l&&d>0&&(m.pack(I,f,R),R+=3,h=n[d-1],y[E++]=Y.floatToByte(h.red),y[E++]=Y.floatToByte(h.green),y[E++]=Y.floatToByte(h.blue),y[E++]=Y.floatToByte(h.alpha)),l&&d===u-1)break;m.pack(I,f,R),R+=3,c(n)&&(h=n[d],y[E++]=Y.floatToByte(h.red),y[E++]=Y.floatToByte(h.green),y[E++]=Y.floatToByte(h.blue),y[E++]=Y.floatToByte(h.alpha))}}let x=new fn;x.position=new Ee({componentDatatype:q.DOUBLE,componentsPerAttribute:3,values:f}),c(n)&&(x.color=new Ee({componentDatatype:q.UNSIGNED_BYTE,componentsPerAttribute:4,values:y,normalize:!0})),p=f.length/3;let S=(p-1)*2,V=Me.createTypedArray(p,S),Z=0;for(d=0;d<p-1;++d)V[Z++]=d,V[Z++]=d+1;return new dt({attributes:x,indices:V,primitiveType:ve.LINES,boundingSphere:ue.fromPoints(t)})};var U7=F9;var xso=_(T(),1);function AL(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 Js(i),this._workerName="createSphereGeometry"}AL.packedLength=Js.packedLength;AL.pack=function(e,t,n){return C.typeOf.object("value",e),Js.pack(e._ellipsoidGeometry,t,n)};var JTt=new Js,Hg={radius:void 0,radii:new m,vertexFormat:new We,stackPartitions:void 0,slicePartitions:void 0};AL.unpack=function(e,t,n){let i=Js.unpack(e,t,JTt);return Hg.vertexFormat=We.clone(i._vertexFormat,Hg.vertexFormat),Hg.stackPartitions=i._stackPartitions,Hg.slicePartitions=i._slicePartitions,c(n)?(m.clone(i._radii,Hg.radii),n._ellipsoidGeometry=new Js(Hg),n):(Hg.radius=i._radii.x,new AL(Hg))};AL.createGeometry=function(e){return Js.createGeometry(e._ellipsoidGeometry)};var O7=AL;var Sso=_(T(),1);function QTt(e){return C.defined("value",e),e<=.04045?e*.07739938080495357:Math.pow((e+.055)*.9478672985781991,2.4)}var LS=QTt;var Lso=_(T(),1);function zg(e){throw new L("This type should not be instantiated directly. Instead, use WebMercatorTilingScheme or GeographicTilingScheme.")}Object.defineProperties(zg.prototype,{ellipsoid:{get:L.throwInstantiationError},rectangle:{get:L.throwInstantiationError},projection:{get:L.throwInstantiationError}});zg.prototype.getNumberOfXTilesAtLevel=L.throwInstantiationError;zg.prototype.getNumberOfYTilesAtLevel=L.throwInstantiationError;zg.prototype.rectangleToNativeRectangle=L.throwInstantiationError;zg.prototype.tileXYToNativeRectangle=L.throwInstantiationError;zg.prototype.tileXYToRectangle=L.throwInstantiationError;zg.prototype.positionToTileXY=L.throwInstantiationError;var D7=zg;var Wso=_(T(),1);function ZS(e){e=e??z.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??Ye.MINIMUM_VALUE,this.tolerance=e.tolerance??1,this._seeking=!1,this._seekFunction=void 0,this._firstTickAfterSeek=!1}Object.defineProperties(ZS.prototype,{clock:{get:function(){return this._clock},set:function(e){let t=this._clock;t!==e&&(c(t)&&(this._clockSubscription(),this._clockSubscription=void 0),c(e)&&(this._clockSubscription=e.onTick.addEventListener(ZS.prototype._onTick,this)),this._clock=e)}},element:{get:function(){return this._element},set:function(e){let t=this._element;t!==e&&(c(t)&&t.removeEventListener("seeked",this._seekFunction,!1),c(e)&&(this._seeking=!1,this._seekFunction=jTt(this),e.addEventListener("seeked",this._seekFunction,!1)),this._element=e,this._seeking=!1,this._firstTickAfterSeek=!1)}}});ZS.prototype.destroy=function(){return this.element=void 0,this.clock=void 0,he(this)};ZS.prototype.isDestroyed=function(){return!1};ZS.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};ZS.prototype._onTick=function(e){let t=this._element;if(!c(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??Ye.MINIMUM_VALUE,s=ee.secondsDifference(o,r),a=t.duration,l,d=t.currentTime;t.loop?(s=s%a,s<0&&(s=a-s),l=s):s>a?l=a:s<0?l=0:l=s;let u=i?this.tolerance??1:.001;Math.abs(l-d)>u&&(this._seeking=!0,t.currentTime=l)};function jTt(e){return function(){e._seeking=!1,e._firstTickAfterSeek=!0}}var B7=ZS;var Jso=_(T(),1);function qTt(e,t){this.rectangle=e,this.maxLevel=t}function jSe(e){this.ellipsoid=e.ellipsoid??re.default,this.tilingScheme=void 0,this.heightmapWidth=void 0,this.heightmapHeight=void 0,this.levelZeroMaximumGeometricError=void 0,this.rectangles=[]}jSe.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 $Tt(e,t){let n=t.getElementsByTagName("SRS")[0].textContent;if(n==="EPSG:4326")e.tilingScheme=new Ki({ellipsoid:e.ellipsoid});else throw new le(`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=rs.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=w.toRadians(parseFloat(s.getAttribute("minx"))),l=w.toRadians(parseFloat(s.getAttribute("miny"))),d=w.toRadians(parseFloat(s.getAttribute("maxx"))),u=w.toRadians(parseFloat(s.getAttribute("maxy"))),f=parseInt(s.getAttribute("maxlevel"),10);e.rectangles.push(new qTt(new de(a,l,d,u),f))}}function eSt(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw c(t)&&c(t.message)&&(i=`${i}: ${t.message}`),Ro.reportError(void 0,n,c(n)?n._errorEvent:void 0,i),new le(i)}async function tSt(e,t,n){try{let i=await t.fetchXML();$Tt(e,i)}catch(i){eSt(t,i,n)}}function Kg(e){e=e??z.EMPTY_OBJECT,this._errorEvent=new ye,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 Ct(t)),this._credit=t,this._tilingScheme=void 0,this._rectangles=[]}Object.defineProperties(Kg.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(){}}});Kg.fromUrl=async function(e,t){C.defined("url",e),t=t??z.EMPTY_OBJECT;let n=new jSe(t),i=Ge.createIfNeeded(e);await tSt(n,i);let o=new Kg(t);return n.build(o),o._resource=i,o};Kg.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(!c(s))return;let a=this;return Promise.resolve(s).then(function(l){return new Da({buffer:Rm(l),width:a._heightmapWidth,height:a._heightmapHeight,childTileMask:nSt(a,e,t,n),structure:a._terrainDataStructure})})};Kg.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};var qSe=new de;function nSt(e,t,n,i){let o=e._tilingScheme,r=e._rectangles,s=o.tileXYToRectangle(t,n,i),a=0;for(let l=0;l<r.length&&a!==15;++l){let d=r[l];if(d.maxLevel<=i)continue;let u=d.rectangle,f=de.intersection(u,s,qSe);c(f)&&(mB(o,u,t*2,n*2,i+1)&&(a|=4),mB(o,u,t*2+1,n*2,i+1)&&(a|=8),mB(o,u,t*2,n*2+1,i+1)&&(a|=1),mB(o,u,t*2+1,n*2+1,i+1)&&(a|=2))}return a}function mB(e,t,n,i,o){let r=e.tileXYToRectangle(n,i,o);return c(de.intersection(r,t,qSe))}Kg.prototype.getTileDataAvailable=function(e,t,n){};Kg.prototype.loadTileDataAvailability=function(e,t,n){};var Y7=Kg;var jso=_(T(),1),iSt={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},H7=Object.freeze(iSt);var eao=_(T(),1);function oSt(e){switch(e){case oe.FLOAT:return"float";case oe.FLOAT_VEC2:return"vec2";case oe.FLOAT_VEC3:return"vec3";case oe.FLOAT_VEC4:return"vec4";case oe.FLOAT_MAT2:return"mat2";case oe.FLOAT_MAT3:return"mat3";case oe.FLOAT_MAT4:return"mat4";case oe.SAMPLER_2D:return"sampler2D";case oe.BOOL:return"bool"}}var z7=oSt;var iao=_(T(),1);function rSt(e,t,n){if(typeof t!="function")throw new L("oldFunction is required to be a function.");if(typeof n!="function")throw new L("oldFunction is required to be a function.");return function(){n.apply(e,arguments),t.apply(e,arguments)}}var A9=rSt;var cao=_(T(),1);var sSt=new m(1,1,1);function K7(e){e=e??sSt,C.defined("dimensions",e),C.typeOf.number.greaterThanOrEquals("dimensions.x",e.x,0),C.typeOf.number.greaterThanOrEquals("dimensions.y",e.y,0),C.typeOf.number.greaterThanOrEquals("dimensions.z",e.z,0),this._dimensions=m.clone(e)}Object.defineProperties(K7.prototype,{dimensions:{get:function(){return this._dimensions},set:function(e){C.defined("value",e),C.typeOf.number.greaterThanOrEquals("value.x",e.x,0),C.typeOf.number.greaterThanOrEquals("value.y",e.y,0),C.typeOf.number.greaterThanOrEquals("value.z",e.z,0),m.clone(e,this._dimensions)}}});var aSt=new m;K7.prototype.emit=function(e){let t=this._dimensions,n=m.multiplyByScalar(t,.5,aSt),i=w.randomBetween(-n.x,n.x),o=w.randomBetween(-n.y,n.y),r=w.randomBetween(-n.z,n.z);e.position=m.fromElements(i,o,r,e.position),e.velocity=m.normalize(e.position,e.velocity)};var J7=K7;var uao=_(T(),1);function bp(){this.featurePropertiesDirty=!1}Object.defineProperties(bp.prototype,{featuresLength:{get:function(){L.throwInstantiationError()}},pointsLength:{get:function(){L.throwInstantiationError()}},trianglesLength:{get:function(){L.throwInstantiationError()}},geometryByteLength:{get:function(){L.throwInstantiationError()}},texturesByteLength:{get:function(){L.throwInstantiationError()}},batchTableByteLength:{get:function(){L.throwInstantiationError()}},innerContents:{get:function(){L.throwInstantiationError()}},ready:{get:function(){L.throwInstantiationError()}},tileset:{get:function(){L.throwInstantiationError()}},tile:{get:function(){L.throwInstantiationError()}},url:{get:function(){L.throwInstantiationError()}},batchTable:{get:function(){L.throwInstantiationError()}},metadata:{get:function(){L.throwInstantiationError()},set:function(e){L.throwInstantiationError()}},group:{get:function(){L.throwInstantiationError()},set:function(e){L.throwInstantiationError()}}});bp.prototype.hasProperty=function(e,t){L.throwInstantiationError()};bp.prototype.getFeature=function(e){L.throwInstantiationError()};bp.prototype.applyDebugSettings=function(e,t){L.throwInstantiationError()};bp.prototype.applyStyle=function(e){L.throwInstantiationError()};bp.prototype.update=function(e,t){L.throwInstantiationError()};bp.prototype.pick=function(e,t,n){L.throwInstantiationError()};bp.prototype.isDestroyed=function(){L.throwInstantiationError()};bp.prototype.destroy=function(){L.throwInstantiationError()};var Q7=bp;var Lao=_(T(),1);var bao=_(T(),1);function ML(e,t){this._conditionsExpression=He(e,!0),this._conditions=e.conditions,this._runtimeConditions=void 0,lSt(this,t)}Object.defineProperties(ML.prototype,{conditionsExpression:{get:function(){return this._conditionsExpression}}});function cSt(e,t){this.condition=e,this.expression=t}function lSt(e,t){let n=[],i=e._conditions;if(!c(i))return;let o=i.length;for(let r=0;r<o;++r){let s=i[r],a=String(s[0]),l=String(s[1]);n.push(new cSt(new Iu(a,t),new Iu(l,t)))}e._runtimeConditions=n}ML.prototype.evaluate=function(e,t){let n=this._runtimeConditions;if(!c(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)}};ML.prototype.evaluateColor=function(e,t){let n=this._runtimeConditions;if(!c(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)}};ML.prototype.getShaderFunction=function(e,t,n,i){let o=this._runtimeConditions;if(!c(o)||o.length===0)return;let r="",s=o.length;for(let a=0;a<s;++a){let l=o[a],d=l.condition.getShaderExpression(t,n),u=l.expression.getShaderExpression(t,n);r+=` ${a===0?"if":"else if"} (${d}) { return ${u}; } `}return r=`${i} ${e} { ${r} return ${i}(1.0); } `,r};ML.prototype.getVariables=function(){let e=[],t=this._runtimeConditions;if(!c(t)||t.length===0)return e;let n=t.length;for(let i=0;i<n;++i){let o=t[i];e.push.apply(e,o.condition.getVariables()),e.push.apply(e,o.expression.getVariables())}return e=e.filter(function(i,o,r){return r.indexOf(i)===o}),e};var M9=ML;function Jg(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,dSt(this,e)}function dSt(e,t){t=He(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(c(t.meta)){let i=t.defines,o=t.meta??z.EMPTY_OBJECT;for(let r in o)o.hasOwnProperty(r)&&(n[r]=new Iu(o[r],i))}e._meta=n,e._ready=!0}function cr(e,t){let n=(e._style??z.EMPTY_OBJECT).defines;if(c(t)){if(typeof t=="boolean"||typeof t=="number")return new Iu(String(t));if(typeof t=="string")return new Iu(t,n);if(c(t.conditions))return new M9(t,n)}else return;return t}function lr(e){if(c(e)){if(c(e.expression))return e.expression;if(c(e.conditionsExpression))return He(e.conditionsExpression,!0)}else return;return e}Object.defineProperties(Jg.prototype,{style:{get:function(){return this._style}},show:{get:function(){return this._show},set:function(e){this._show=cr(this,e),this._style.show=lr(this._show),this._showShaderFunctionReady=!1}},color:{get:function(){return this._color},set:function(e){this._color=cr(this,e),this._style.color=lr(this._color),this._colorShaderFunctionReady=!1}},pointSize:{get:function(){return this._pointSize},set:function(e){this._pointSize=cr(this,e),this._style.pointSize=lr(this._pointSize),this._pointSizeShaderFunctionReady=!1}},pointOutlineColor:{get:function(){return this._pointOutlineColor},set:function(e){this._pointOutlineColor=cr(this,e),this._style.pointOutlineColor=lr(this._pointOutlineColor)}},pointOutlineWidth:{get:function(){return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=cr(this,e),this._style.pointOutlineWidth=lr(this._pointOutlineWidth)}},labelColor:{get:function(){return this._labelColor},set:function(e){this._labelColor=cr(this,e),this._style.labelColor=lr(this._labelColor)}},labelOutlineColor:{get:function(){return this._labelOutlineColor},set:function(e){this._labelOutlineColor=cr(this,e),this._style.labelOutlineColor=lr(this._labelOutlineColor)}},labelOutlineWidth:{get:function(){return this._labelOutlineWidth},set:function(e){this._labelOutlineWidth=cr(this,e),this._style.labelOutlineWidth=lr(this._labelOutlineWidth)}},font:{get:function(){return this._font},set:function(e){this._font=cr(this,e),this._style.font=lr(this._font)}},labelStyle:{get:function(){return this._labelStyle},set:function(e){this._labelStyle=cr(this,e),this._style.labelStyle=lr(this._labelStyle)}},labelText:{get:function(){return this._labelText},set:function(e){this._labelText=cr(this,e),this._style.labelText=lr(this._labelText)}},backgroundColor:{get:function(){return this._backgroundColor},set:function(e){this._backgroundColor=cr(this,e),this._style.backgroundColor=lr(this._backgroundColor)}},backgroundPadding:{get:function(){return this._backgroundPadding},set:function(e){this._backgroundPadding=cr(this,e),this._style.backgroundPadding=lr(this._backgroundPadding)}},backgroundEnabled:{get:function(){return this._backgroundEnabled},set:function(e){this._backgroundEnabled=cr(this,e),this._style.backgroundEnabled=lr(this._backgroundEnabled)}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){this._scaleByDistance=cr(this,e),this._style.scaleByDistance=lr(this._scaleByDistance)}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){this._translucencyByDistance=cr(this,e),this._style.translucencyByDistance=lr(this._translucencyByDistance)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){this._distanceDisplayCondition=cr(this,e),this._style.distanceDisplayCondition=lr(this._distanceDisplayCondition)}},heightOffset:{get:function(){return this._heightOffset},set:function(e){this._heightOffset=cr(this,e),this._style.heightOffset=lr(this._heightOffset)}},anchorLineEnabled:{get:function(){return this._anchorLineEnabled},set:function(e){this._anchorLineEnabled=cr(this,e),this._style.anchorLineEnabled=lr(this._anchorLineEnabled)}},anchorLineColor:{get:function(){return this._anchorLineColor},set:function(e){this._anchorLineColor=cr(this,e),this._style.anchorLineColor=lr(this._anchorLineColor)}},image:{get:function(){return this._image},set:function(e){this._image=cr(this,e),this._style.image=lr(this._image)}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance=cr(this,e),this._style.disableDepthTestDistance=lr(this._disableDepthTestDistance)}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin=cr(this,e),this._style.horizontalOrigin=lr(this._horizontalOrigin)}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin=cr(this,e),this._style.verticalOrigin=lr(this._verticalOrigin)}},labelHorizontalOrigin:{get:function(){return this._labelHorizontalOrigin},set:function(e){this._labelHorizontalOrigin=cr(this,e),this._style.labelHorizontalOrigin=lr(this._labelHorizontalOrigin)}},labelVerticalOrigin:{get:function(){return this._labelVerticalOrigin},set:function(e){this._labelVerticalOrigin=cr(this,e),this._style.labelVerticalOrigin=lr(this._labelVerticalOrigin)}},meta:{get:function(){return this._meta},set:function(e){this._meta=e}}});Jg.fromUrl=function(e){if(!c(e))throw new L("url is required");return Ge.createIfNeeded(e).fetchJson(e).then(function(n){return new Jg(n)})};Jg.prototype.getColorShaderFunction=function(e,t,n){return this._colorShaderFunctionReady?(n.translucent=this._colorShaderTranslucent,this._colorShaderFunction):(this._colorShaderFunctionReady=!0,c(this.color)&&c(this.color.getShaderFunction)?this._colorShaderFunction=this.color.getShaderFunction(e,t,n,"vec4"):this._colorShaderFunction=void 0,this._colorShaderTranslucent=n.translucent,this._colorShaderFunction)};Jg.prototype.getShowShaderFunction=function(e,t,n){return this._showShaderFunctionReady?this._showShaderFunction:(this._showShaderFunctionReady=!0,c(this.show)&&c(this.show.getShaderFunction)?this._showShaderFunction=this.show.getShaderFunction(e,t,n,"bool"):this._showShaderFunction=void 0,this._showShaderFunction)};Jg.prototype.getPointSizeShaderFunction=function(e,t,n){return this._pointSizeShaderFunctionReady?this._pointSizeShaderFunction:(this._pointSizeShaderFunctionReady=!0,c(this.pointSize)&&c(this.pointSize.getShaderFunction)?this._pointSizeShaderFunction=this.pointSize.getShaderFunction(e,t,n,"float"):this._pointSizeShaderFunction=void 0,this._pointSizeShaderFunction)};Jg.prototype.getVariables=function(){let e=[];return c(this.color)&&c(this.color.getVariables)&&e.push.apply(e,this.color.getVariables()),c(this.show)&&c(this.show.getVariables)&&e.push.apply(e,this.show.getVariables()),c(this.pointSize)&&c(this.pointSize.getVariables)&&e.push.apply(e,this.pointSize.getVariables()),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var RS=Jg;var ico=_(T(),1);var Xao=_(T(),1);function N9(e){e=e??z.EMPTY_OBJECT,this._maximumSubtreeCount=e.maximumSubtreeCount??0,this._subtreeRequestCounter=0,this._queue=new mS({comparator:N9.comparator})}N9.prototype.addSubtree=function(e){let t=new uSt(e,this._subtreeRequestCounter);this._subtreeRequestCounter++,this._queue.insert(t);let n=e.implicitCoordinates;if(n.level>0){let i=n.getParentSubtreeCoordinates();if(this.find(i)===void 0)throw new L("parent node needs to exist")}if(this._maximumSubtreeCount>0)for(;this._queue.length>this._maximumSubtreeCount&&this._queue.getMinimum()!==t;)this._queue.removeMinimum()};N9.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}};N9.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 uSt(e,t){this.subtree=e,this.stamp=t}var k9=N9;function U9(e){e=e??z.EMPTY_OBJECT;let{className:t,names:n,types:i,componentTypes:o,shape:r,dimensions:s,paddingBefore:a=m.ZERO.clone(),paddingAfter:l=m.ZERO.clone(),globalTransform:d=M.IDENTITY.clone(),shapeTransform:u=M.IDENTITY.clone(),minBounds:f,maxBounds:p,minimumValues:y,maximumValues:h,maximumTileCount:g}=e;C.typeOf.string("className",t),C.typeOf.object("names",n),C.typeOf.object("types",i),C.typeOf.object("componentTypes",o),C.typeOf.string("shape",r),C.typeOf.object("dimensions",s),this._shapeTransform=u,this._globalTransform=d,this._shape=r,this._minBounds=f,this._maxBounds=p,this._dimensions=s,this._paddingBefore=a,this._paddingAfter=l,this._className=t,this._names=n,this._types=i,this._componentTypes=o,this._metadataOrder=r===La.ELLIPSOID?gm.Z_UP:gm.Y_UP,this._minimumValues=y,this._maximumValues=h,this._maximumTileCount=g,this._availableLevels=void 0,this._implicitTileset=void 0,this._subtreeCache=new k9}Object.defineProperties(U9.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}}});U9.fromUrl=async function(e){C.defined("url",e);let t=Ge.createIfNeeded(e),n=await t.fetchJson();fSt(n);let i=_St(n,t);await i.load();let{root:o}=n,r=ri(n,"3DTILES_metadata")?n.extensions["3DTILES_metadata"]:n,s=new K_({metadataJson:r,schema:i.schema}),a=o.content.extensions["3DTILES_content_voxels"],l=a.class,d=TSt(s,l);Object.assign(d,hSt(o)),c(o.transform)?d.globalTransform=M.unpack(o.transform):d.globalTransform=M.clone(M.IDENTITY),d.dimensions=m.unpack(a.dimensions),d.maximumTileCount=mSt(s),c(a.padding)&&(d.paddingBefore=m.unpack(a.padding.before),d.paddingAfter=m.unpack(a.padding.after));let u=new U9(d),f=new Q_(t,o,i.schema);return u._implicitTileset=f,u._availableLevels=f.availableLevels,Ri.unload(i),u};function mSt(e){if(c(e.tileset))return e.tileset.getPropertyBySemantic(y_.TILESET_TILE_COUNT)}function fSt(e){let t=e.root;if(!c(t.content))throw new le("Root must have content");if(!ri(t.content,"3DTILES_content_voxels"))throw new le("Root tile content must have 3DTILES_content_voxels extension");if(!ri(t,"3DTILES_implicit_tiling")&&!c(t.implicitTiling))throw new le("Root tile must have implicit tiling");if(!c(e.schema)&&!c(e.schemaUri)&&!ri(e,"3DTILES_metadata"))throw new le("Tileset must have a metadata schema")}function hSt(e){let t=e.boundingVolume;if(c(t.box))return gSt(t.box);if(c(t.region))return pSt(t.region);if(ri(t,"3DTILES_bounding_volume_cylinder"))return xSt(t.extensions["3DTILES_bounding_volume_cylinder"]);throw new le("Only box, region and 3DTILES_bounding_volume_cylinder are supported in Cesium3DTilesVoxelProvider")}function pSt(e){let t=e[0],n=e[1],i=e[2],o=e[3],r=e[4],s=e[5],a=M.fromScale(re.WGS84.radii),l=new m(t,n,r),d=new m(i,o,s);return{shape:La.ELLIPSOID,minBounds:l,maxBounds:d,shapeTransform:a}}var bSt=new m,ySt=new te;function gSt(e){let t=Xn.unpack(e),n=te.getScale(t.halfAxes,bSt),i=te.getRotation(t.halfAxes,ySt);return{shape:La.BOX,minBounds:m.negate(n,new m),maxBounds:m.clone(n),shapeTransform:M.fromRotationTranslation(i,t.center)}}function xSt(e){let{minRadius:t,maxRadius:n,height:i,minAngle:o=-w.PI,maxAngle:r=w.PI,translation:s=[0,0,0],rotation:a=[0,0,0,1]}=e;C.typeOf.number("minRadius",t),C.typeOf.number("maxRadius",n),C.typeOf.number("height",i),C.typeOf.number("minAngle",o),C.typeOf.number("maxAngle",r),C.typeOf.object("translation",s),C.typeOf.object("rotation",a);let l=-.5*i+s[2],d=.5*i+s[2],u=M.fromTranslationQuaternionRotationScale(m.unpack(s),Fe.unpack(a),m.ONE);return{shape:La.CYLINDER,minBounds:m.fromElements(t,o,l),maxBounds:m.fromElements(n,r,d),shapeTransform:u}}function _St(e,t){let{schemaUri:n,schema:i}=e;return c(n)?Ri.getSchemaLoader({resource:t.getDerivedResource({url:n})}):Ri.getSchemaLoader({schema:i})}function TSt(e,t){let{schema:n,statistics:i}=e,o=i?.classes[t],r=n.classes[t].properties,s=Object.entries(r).map(([y,h])=>{let{type:g,componentType:x}=h,S=o?.properties[y].min,V=o?.properties[y].max,Z=lt.getComponentCount(g),R=$Se(S,Z),E=$Se(V,Z);return{id:y,type:g,componentType:x,minValue:R,maxValue:E}}),a=s.map(y=>y.id),l=s.map(y=>y.type),d=s.map(y=>y.componentType),u=s.map(y=>y.minValue),f=s.map(y=>y.maxValue),p=u.some(c);return{className:t,names:a,types:l,componentTypes:d,minimumValues:p?u:void 0,maximumValues:p?f:void 0}}function $Se(e,t){if(!c(e))return;let n=Array.isArray(e)?e:[e];return Array.from({length:t},(i,o)=>n[o])}async function SSt(e,t){let n=e._implicitTileset,i=e._subtreeCache,o=i.find(t);if(c(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),c(o))return o;let l=Gb(a);return o=await b_.fromSubtreeJson(s,l.jsonPayload,l.binaryPayload,n,t),i.addSubtree(o),o}U9.prototype.requestData=async function(e){e=e??z.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 j_({subdivisionScheme:s.subdivisionScheme,subtreeLevels:s.subtreeLevels,level:t,x:n,y:i,z:o}),l=a.isSubtreeRoot()&&a.level>0,d=l?a.getParentSubtreeCoordinates():a.getSubtreeCoordinates(),f=await SSt(this,d);if(!(l?f.childSubtreeIsAvailableAtCoordinates:f.tileIsAvailableAtCoordinates).call(f,a))return Promise.reject(`Tile is not available at level ${t}, x ${n}, y ${i}, z ${o}.`);let{contentUriTemplates:h,baseResource:g}=s,x=h[0].getDerivedResource({templateValues:a.getTemplateValues()}),S=g.getDerivedResource({url:x.url});return cS.fromGltf(S)};var j7=U9;var cco=_(T(),1);function q7(e){e=e??1,C.typeOf.number.greaterThan("radius",e,0),this._radius=e??1}Object.defineProperties(q7.prototype,{radius:{get:function(){return this._radius},set:function(e){C.typeOf.number.greaterThan("value",e,0),this._radius=e}}});q7.prototype.emit=function(e){let t=w.randomBetween(0,w.TWO_PI),n=w.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 O9=q7;var tlo=_(T(),1);var dco=_(T(),1),$7={CUMULUS:0};$7.validate=function(e){return e===$7.CUMULUS};var GS=Object.freeze($7);var gco=_(T(),1);function Kf(e,t){if(e=e??z.EMPTY_OBJECT,this._show=e.show??!0,this._position=m.clone(e.position??m.ZERO),!c(e.scale)&&c(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=Y.clone(e.color??Y.WHITE),this._brightness=e.brightness??1,this._cloudCollection=t,this._index=-1}var CSt=Kf.SHOW_INDEX=0,VSt=Kf.POSITION_INDEX=1,LSt=Kf.SCALE_INDEX=2,ZSt=Kf.MAXIMUM_SIZE_INDEX=3,RSt=Kf.SLICE_INDEX=4,GSt=Kf.BRIGHTNESS_INDEX=5,ESt=Kf.COLOR_INDEX=6;Kf.NUMBER_OF_PROPERTIES=7;function ES(e,t){let n=e._cloudCollection;c(n)&&(n._updateCloud(e,t),e._dirty=!0)}Object.defineProperties(Kf.prototype,{show:{get:function(){return this._show},set:function(e){C.typeOf.bool("value",e),this._show!==e&&(this._show=e,ES(this,CSt))}},position:{get:function(){return this._position},set:function(e){C.typeOf.object("value",e);let t=this._position;m.equals(t,e)||(m.clone(e,t),ES(this,VSt))}},scale:{get:function(){return this._scale},set:function(e){C.typeOf.object("value",e);let t=this._scale;D.equals(t,e)||(D.clone(e,t),ES(this,LSt))}},maximumSize:{get:function(){return this._maximumSize},set:function(e){C.typeOf.object("value",e);let t=this._maximumSize;m.equals(t,e)||(m.clone(e,t),ES(this,ZSt))}},color:{get:function(){return this._color},set:function(e){C.typeOf.object("value",e);let t=this._color;Y.equals(t,e)||(Y.clone(e,t),ES(this,ESt))}},slice:{get:function(){return this._slice},set:function(e){C.typeOf.number("value",e),this._slice!==e&&(this._slice=e,ES(this,RSt))}},brightness:{get:function(){return this._brightness},set:function(e){C.typeOf.number("value",e),this._brightness!==e&&(this._brightness=e,ES(this,GSt))}}});Kf.prototype._destroy=function(){this._cloudCollection=void 0};var au=Kf;var cu,fB=new m,XSt={positionHighAndScaleX:0,positionLowAndScaleY:1,packedAttribute0:2,packedAttribute1:3,color:4},ISt={direction:0,positionHighAndScaleX:1,positionLowAndScaleY:2,packedAttribute0:3,packedAttribute1:4,color:5},WSt=au.SHOW_INDEX,wSt=au.POSITION_INDEX,PSt=au.SCALE_INDEX,vSt=au.MAXIMUM_SIZE_INDEX,FSt=au.SLICE_INDEX,ASt=au.BRIGHTNESS_INDEX,MSt=au.NUMBER_OF_PROPERTIES,NSt=au.COLOR_INDEX;function Jf(e){e=e??z.EMPTY_OBJECT,this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!1,this._propertiesChanged=new Uint32Array(MSt),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:eCe(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 eCe(e){return function(){return fB.x=e._textureSliceWidth,fB.y=e._noiseTextureRows,fB.z=1/e._noiseTextureRows,fB}}Object.defineProperties(Jf.prototype,{length:{get:function(){return t6(this),this._clouds.length}}});function tCe(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}Jf.prototype.add=function(e){e=e??z.EMPTY_OBJECT;let t=e.cloudType??GS.CUMULUS;if(!GS.validate(t))throw new L("invalid cloud type");let n;return t===GS.CUMULUS&&(n=new au(e,this),n._index=this._clouds.length,this._clouds.push(n),this._createVertexArray=!0),n};Jf.prototype.remove=function(e){return this.contains(e)?(this._clouds[e._index]=void 0,this._cloudsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};Jf.prototype.removeAll=function(){tCe(this._clouds),this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!0};function t6(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];c(s)&&(n._index=r++,t.push(s))}e._clouds=t}}Jf.prototype._updateCloud=function(e,t){e._dirty||(this._cloudsToUpdate[this._cloudsToUpdateIndex++]=e),++this._propertiesChanged[t]};Jf.prototype.contains=function(e){return c(e)&&e._cloudCollection===this};Jf.prototype.get=function(e){return C.typeOf.number("index",e),t6(this),this._clouds[e]};var kSt=new Float32Array([-1,-1,1,-1,1,1,-1,1]),USt=new Uint16Array([0,1,2,0,2,3]);function OSt(e){let t=_t.createVertexBuffer({context:e,typedArray:kSt,usage:Ne.STATIC_DRAW}),n=_t.createIndexBuffer({context:e,typedArray:USt,usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT}),i=[{index:0,vertexBuffer:t,componentsPerAttribute:2,componentDatatype:q.FLOAT}];return new ni({context:e,attributes:i,indexBuffer:n})}var n6;function DSt(e){let n=e.cache.cloudCollection_indexBufferBatched;if(c(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=_t.createIndexBuffer({context:e,typedArray:o,usage:Ne.STATIC_DRAW,indexDatatype:Me.UNSIGNED_SHORT}),n.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferBatched=n,n}function BSt(e){let t=e.cache.cloudCollection_indexBufferInstanced;return c(t)||(t=_t.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 YSt(e){let t=e.cache.cloudCollection_vertexBufferInstanced;return c(t)||(t=_t.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 HSt(e,t,n){let i=[{index:cu.positionHighAndScaleX,componentsPerAttribute:4,componentDatatype:q.FLOAT,usage:Ne.STATIC_DRAW},{index:cu.positionLowAndScaleY,componentsPerAttribute:4,componentDatatype:q.FLOAT,usage:Ne.STATIC_DRAW},{index:cu.packedAttribute0,componentsPerAttribute:4,componentDatatype:q.FLOAT,usage:Ne.STATIC_DRAW},{index:cu.packedAttribute1,componentsPerAttribute:4,componentDatatype:q.FLOAT,usage:Ne.STATIC_DRAW},{index:cu.color,componentsPerAttribute:4,componentDatatype:q.UNSIGNED_BYTE,normalize:!0,usage:Ne.STATIC_DRAW}];n&&i.push({index:cu.direction,componentsPerAttribute:2,componentDatatype:q.FLOAT,vertexBuffer:YSt(e)});let o=n?t:4*t;return new Ip(e,i,o,n)}var e6=new Bn;function nCe(e,t,n,i){let o,r=n[cu.positionHighAndScaleX],s=n[cu.positionLowAndScaleY],a=i.position;Bn.fromCartesian(a,e6);let l=i.scale,d=e6.high,u=e6.low;e._instanced?(o=i._index,r(o,d.x,d.y,d.z,l.x),s(o,u.x,u.y,u.z,l.y)):(o=i._index*4,r(o+0,d.x,d.y,d.z,l.x),r(o+1,d.x,d.y,d.z,l.x),r(o+2,d.x,d.y,d.z,l.x),r(o+3,d.x,d.y,d.z,l.x),s(o+0,u.x,u.y,u.z,l.y),s(o+1,u.x,u.y,u.z,l.y),s(o+2,u.x,u.y,u.z,l.y),s(o+3,u.x,u.y,u.z,l.y))}function iCe(e,t,n,i){let o,r=n[cu.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 oCe(e,t,n,i){let o,r=n[cu.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 rCe(e,t,n,i){let o,r=n[cu.color],s=i.color,a=Y.floatToByte(s.red),l=Y.floatToByte(s.green),d=Y.floatToByte(s.blue),u=Y.floatToByte(s.alpha);e._instanced?(o=i._index,r(o,a,l,d,u)):(o=i._index*4,r(o+0,a,l,d,u),r(o+1,a,l,d,u),r(o+2,a,l,d,u),r(o+3,a,l,d,u))}function zSt(e,t,n,i){nCe(e,t,n,i),iCe(e,t,n,i),oCe(e,t,n,i),rCe(e,t,n,i)}function KSt(e,t,n,i){let o=e,r=o._textureSliceWidth,s=o._noiseTextureRows;if(r/s<1||r%s!==0)throw new L("noiseTextureRows must evenly divide textureSliceWidth");let a=t.context;o._vaNoise=OSt(a),o._spNoise=tn.fromCache({context:a,vertexShaderSource:n,fragmentShaderSource:i,attributeLocations:{position:0}});let l=o.noiseDetail,d=o.noiseOffset;o._noiseTexture=new Pt({context:a,width:r*r/s,height:r*s,pixelDatatype:Ue.UNSIGNED_BYTE,pixelFormat:ke.RGBA,sampler:new en({wrapS:xn.REPEAT,wrapT:xn.REPEAT,minificationFilter:Jt.NEAREST,magnificationFilter:di.NEAREST})});let u=new vc({vertexArray:o._vaNoise,shaderProgram:o._spNoise,outputTexture:o._noiseTexture,uniformMap:{u_noiseTextureDimensions:eCe(o),u_noiseDetail:function(){return l},u_noiseOffset:function(){return d}},persists:!1,owner:e,postExecute:function(f){o._ready=!0,o._loading=!1}});t.commandList.push(u),o._loading=!0}function JSt(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=HSt(i,r,n._instanced);let s=n._vaf.writers,a;for(a=0;a<r;++a){let l=o[a];zSt(e,t,s,l)}n._vaf.commit(n6(i))}}var QSt=[];function jSt(e,t){let n=t.context,i=e,r=i._clouds.length,s=i._cloudsToUpdate,a=i._cloudsToUpdateIndex,l=i._propertiesChanged,d=QSt;d.length=0,(l[wSt]||l[PSt])&&d.push(nCe),(l[WSt]||l[ASt])&&d.push(iCe),(l[vSt]||l[FSt])&&d.push(oCe),l[NSt]&&d.push(rCe);let u=d.length,f=i._vaf.writers,p,y,h;if(a/r>.1){for(p=0;p<a;++p)for(y=s[p],y._dirty=!1,h=0;h<u;++h)d[h](e,t,f,y);i._vaf.commit(n6(n))}else{for(p=0;p<a;++p){for(y=s[p],y._dirty=!1,h=0;h<u;++h)d[h](e,t,f,y);i._instanced?i._vaf.subCommit(y._index,1):i._vaf.subCommit(y._index*4,4)}i._vaf.endSubCommits()}i._cloudsToUpdateIndex=0}function qSt(e,t,n,i){let o=t.context,r=e,s=new Be({defines:[],sources:[n]});r._instanced&&s.defines.push("INSTANCED");let a=new Be({defines:[],sources:[i]});r.debugBillboards&&a.defines.push("DEBUG_BILLBOARDS"),r.debugEllipsoids&&a.defines.push("DEBUG_ELLIPSOIDS"),r._sp=tn.replaceCache({context:o,shaderProgram:r._sp,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:cu}),r._rs=Oe.fromCache({depthTest:{enabled:!0,func:oe.LESS},depthMask:!1,blending:un.ALPHA_BLEND}),r._spCreated=!0,r._compiledDebugBillboards=r.debugBillboards,r._compiledDebugEllipsoids=r.debugEllipsoids}function $St(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,l=a.length;s.length=l;for(let d=0;d<l;d++){let u=s[d];c(u)||(u=s[d]=new et),u.pass=Xe.TRANSLUCENT,u.owner=e,u.uniformMap=o,u.count=a[d].indicesCount,u.vertexArray=a[d].va,u.shaderProgram=n._sp,u.renderState=n._rs,n._instanced&&(u.count=6,u.instanceCount=n._clouds.length),r.push(u)}}}Jf.prototype.update=function(e){if(t6(this),!this.show)return;let t=this.debugBillboards||this.debugEllipsoids;this._ready=t?!0:c(this._noiseTexture),!this._ready&&!this._loading&&!t&&KSt(this,e,wv,Wv),this._instanced=e.context.instancedArrays,cu=this._instanced?ISt:XSt,n6=this._instanced?BSt:DSt;let i=this._clouds.length,o=this._cloudsToUpdate,r=this._cloudsToUpdateIndex;this._createVertexArray?JSt(this,e):r>0&&jSt(this,e),r>i*1.5&&(o.length=i),!(!c(this._vaf)||!c(this._vaf.va)||!this._ready&!t)&&((!this._spCreated||this.debugBillboards!==this._compiledDebugBillboards||this.debugEllipsoids!==this._compiledDebugEllipsoids)&&qSt(this,e,Iv,Xv),$St(this,e))};Jf.prototype.isDestroyed=function(){return!1};Jf.prototype.destroy=function(){return this._noiseTexture=this._noiseTexture&&this._noiseTexture.destroy(),this._sp=this._sp&&this._sp.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),tCe(this._clouds),he(this)};var i6=Jf;var slo=_(T(),1);var eCt=w.toRadians(30);function o6(e){this._angle=e??eCt}Object.defineProperties(o6.prototype,{angle:{get:function(){return this._angle},set:function(e){C.typeOf.number("value",e),this._angle=e}}});o6.prototype.emit=function(e){let t=Math.tan(this._angle),n=w.randomBetween(0,w.TWO_PI),i=w.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 r6=o6;var Vlo=_(T(),1);var tCt=new Y,nCt=new Y,iCt=new Y,oCt=new Y,sCe=new ce,D9=new Uint8Array(4);function aCe(e,t,n,i){let o=t.height===n.height?0:(e-t.height)/(n.height-t.height);return Y.lerp(t.color,n.color,o,i)}function hB(e,t){return{height:e,color:Y.clone(t)}}function cCe(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?Y.equals(t.color,i[n-1].color):!1,a=r?Y.equals(t.color,i[n+1].color):!1;return!s||!a}),e=e.filter(function(t,n,i){let o=n>0,r=o?Y.equals(t.color,i[n-1].color):!1,s=o?t.height===i[n-1].height:!0;return!r||!s}),e}function rCt(e){let t,n,i=[],o=e.length;for(t=0;t<o;t++){let r=e[t],s=r.entries,a=s.length;if(!Array.isArray(s)||a===0)throw new L("entries must be an array with size > 0.");let l=[];for(n=0;n<a;n++){let y=s[n];if(!c(y.height))throw new L("entry requires a height.");if(!c(y.color))throw new L("entry requires a color.");let h=w.clamp(y.height,id._minimumHeight,id._maximumHeight),g=Y.clone(y.color,tCt);g.red*=g.alpha,g.green*=g.alpha,g.blue*=g.alpha,l.push(hB(h,g))}let d=!0,u=!0;for(n=0;n<a-1;n++){let y=l[n+0],h=l[n+1];d=d&&y.height<=h.height,u=u&&y.height>=h.height}u?l=l.reverse():d||h0(l,function(y,h){return w.sign(y.height-h.height)});let f=r.extendDownwards??!1,p=r.extendUpwards??!1;l.length===1&&!f&&!p&&(f=!0,p=!0),f&&l.splice(0,0,hB(id._minimumHeight,l[0].color)),p&&l.splice(l.length,0,hB(id._maximumHeight,l[l.length-1].color)),l=cCe(l),i.push(l)}return i}function sCt(e){let t=rCt(e),n=[],i=[],o;function r(d,u){n.push(hB(d,u))}function s(d,u,f){let p=Y.multiplyByScalar(f,1-u.alpha,oCt);p=Y.add(p,u,p),r(d,p)}let a=t.length;for(o=0;o<a;o++){let d=t[o],u=0,f=0;i=n,n=[];let p=d.length,y=i.length;for(;u<p||f<y;){let h=u<p?d[u]:void 0,g=u>0?d[u-1]:void 0,x=u<p-1?d[u+1]:void 0,S=f<y?i[f]:void 0,V=f>0?i[f-1]:void 0,Z=f<y-1?i[f+1]:void 0;if(c(h)&&c(S)&&h.height===S.height){let R=c(Z)&&S.height===Z.height,E=!c(V),I=!c(Z),v=c(x)&&h.height===x.height,P=!c(g),F=!c(x);R?v?(s(h.height,h.color,S.color),s(h.height,x.color,Z.color)):P?(r(h.height,S.color),s(h.height,h.color,Z.color)):F?(s(h.height,h.color,S.color),r(h.height,Z.color)):(s(h.height,h.color,S.color),s(h.height,h.color,Z.color)):E?v?(r(h.height,h.color),s(h.height,x.color,S.color)):F?(r(h.height,h.color),r(h.height,S.color)):(P||r(h.height,h.color),s(h.height,h.color,S.color)):I?v?(s(h.height,h.color,S.color),r(h.height,x.color)):P?(r(h.height,S.color),r(h.height,h.color)):F?s(h.height,h.color,S.color):(s(h.height,h.color,S.color),r(h.height,h.color)):v?(s(h.height,h.color,S.color),s(h.height,x.color,S.color)):P?(r(h.height,S.color),s(h.height,h.color,S.color)):F?(s(h.height,h.color,S.color),r(h.height,S.color)):s(h.height,h.color,S.color),u+=v?2:1,f+=R?2:1}else if(c(h)&&c(S)&&c(V)&&h.height<S.height){let R=aCe(h.height,V,S,iCt);c(g)?c(x)?s(h.height,h.color,R):(s(h.height,h.color,R),r(h.height,R)):(r(h.height,R),s(h.height,h.color,R)),u++}else if(c(S)&&c(h)&&c(g)&&S.height<h.height){let R=aCe(S.height,g,h,nCt);c(V)?c(Z)?s(S.height,R,S.color):(s(S.height,R,S.color),r(S.height,R)):(r(S.height,R),s(S.height,R,S.color)),f++}else c(h)&&(!c(S)||h.height<S.height)?(c(S)&&!c(V)&&!c(x)?(r(h.height,h.color),r(h.height,id._emptyColor),r(S.height,id._emptyColor)):(!c(S)&&c(V)&&!c(g)&&(r(V.height,id._emptyColor),r(h.height,id._emptyColor)),r(h.height,h.color)),u++):c(S)&&(!c(h)||S.height<h.height)&&(r(S.height,S.color),f++)}}return cCe(n)}function id(e){let{scene:t,layers:n}=e??z.EMPTY_OBJECT;C.typeOf.object("options.scene",t),C.defined("options.layers",n),C.typeOf.number.greaterThan("options.layers.length",n.length,0);let{context:i}=t,o=sCt(n),r=o.length,s,a,l;if(!id._useFloatTexture(i)){a=Ue.UNSIGNED_BYTE,l=ke.RGBA,s=new Uint8Array(r*4);for(let y=0;y<r;y++)ce.packFloat(o[y].height,sCe),ce.pack(sCe,s,y*4)}else{a=Ue.FLOAT,l=i.webgl2?ke.RED:ke.LUMINANCE,s=new Float32Array(r);for(let y=0;y<r;y++)s[y]=o[y].height}let u=Pt.create({context:i,pixelFormat:l,pixelDatatype:a,source:{arrayBufferView:s,width:r,height:1},sampler:new en({wrapS:xn.CLAMP_TO_EDGE,wrapT:xn.CLAMP_TO_EDGE,minificationFilter:Jt.NEAREST,magnificationFilter:di.NEAREST})}),f=new Uint8Array(r*4);for(let y=0;y<r;y++)o[y].color.toBytes(D9),f[y*4+0]=D9[0],f[y*4+1]=D9[1],f[y*4+2]=D9[2],f[y*4+3]=D9[3];let p=Pt.create({context:i,pixelFormat:ke.RGBA,pixelDatatype:Ue.UNSIGNED_BYTE,source:{arrayBufferView:f,width:r,height:1},sampler:new en({wrapS:xn.CLAMP_TO_EDGE,wrapT:xn.CLAMP_TO_EDGE,minificationFilter:Jt.LINEAR,magnificationFilter:di.LINEAR})});return zi.fromType("ElevationBand",{heights:u,colors:p})}id._useFloatTexture=function(e){return e.floatingPointTexture};id._maximumHeight=5906376425472;id._minimumHeight=-5906376425472;id._emptyColor=new Y(0,0,0,0);var s6=id;var Plo=_(T(),1);async function aCt(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??z.EMPTY_OBJECT,C.typeOf.object("apiOptions",e),e.onlyUsingWithGoogleGeocoder||ht("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??CS.defaultApiKey;if(!c(n))return cCt(t);let i,o=CS.getDefaultCredit();c(o)&&(i=[o]);let r=new Ge({url:`${CS.mapTilesApiEndpoint}3dtiles/root.json`,queryParameters:{key:n},credits:i});return bs.fromUrl(r,t)}var lCe={};async function cCt(e){let i=lCe[2275207];c(i)||(i=xd.fromAssetId(2275207),lCe[2275207]=i);let o=await i;return bs.fromUrl(o,e)}var a6=aCt;var Ulo=_(T(),1);async function lCt(e){let t=await bs.fromIonAssetId(96188,e);e=e??z.EMPTY_OBJECT;let n=e.style;if(!c(n)){let i=(e.defaultColor??Y.WHITE).toCssColorString();n=new RS({color:`Boolean(\${feature['cesium#color']}) ? color(\${feature['cesium#color']}) : ${i}`})}return t.style=n,t}var c6=lCt;var qlo=_(T(),1);function dCt(e){e=e??z.EMPTY_OBJECT;let t=[],n=e.geometry;if(!c(n))throw new L("options.geometry is required.");(!c(n.attributes)||!c(n.primitiveType))&&(n=n.constructor.createGeometry(n));let i=n.attributes,o=M.clone(e.modelMatrix??M.IDENTITY),r=e.length??1e4;if(c(i.normal)&&t.push(new Rt({geometry:An.createLineSegmentsForVectors(n,"normal",r),attributes:{color:new Yt(1,0,0,1)},modelMatrix:o})),c(i.tangent)&&t.push(new Rt({geometry:An.createLineSegmentsForVectors(n,"tangent",r),attributes:{color:new Yt(0,1,0,1)},modelMatrix:o})),c(i.bitangent)&&t.push(new Rt({geometry:An.createLineSegmentsForVectors(n,"bitangent",r),attributes:{color:new Yt(0,0,1,1)},modelMatrix:o})),t.length>0)return new In({asynchronous:!1,geometryInstances:t,appearance:new an({flat:!0,translucent:!1})})}var l6=dCt;var odo=_(T(),1);function B9(e){e=e??z.EMPTY_OBJECT;let t=e.attributeName,n=e.perInstanceAttribute;if(!c(t))throw new L("options.attributeName is required.");c(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;default:throw new L("options.glslDatatype must be float, vec2, vec3, or vec4.")}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=no.getDefaultRenderState(!1,!1,e.renderState),this._closed=e.closed??!1,this._attributeName=t,this._glslDatatype=i}Object.defineProperties(B9.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}}});B9.prototype.getFragmentShaderSource=no.prototype.getFragmentShaderSource;B9.prototype.isTranslucent=no.prototype.isTranslucent;B9.prototype.getRenderState=no.prototype.getRenderState;var d6=B9;var ydo=_(T(),1);function pB(e){e=e??z.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=M.clone(e.modelMatrix??M.IDENTITY),this._modelMatrix=new M,this.id=e.id,this._id=void 0,this._primitive=void 0}pB.prototype.update=function(e){if(this.show){if(!c(this._primitive)||!M.equals(this._modelMatrix,this.modelMatrix)||this._length!==this.length||this._width!==this.width||this._id!==this.id){this._modelMatrix=M.clone(this.modelMatrix,this._modelMatrix),this._length=this.length,this._width=this.width,this._id=this.id,c(this._primitive)&&this._primitive.destroy(),this.modelMatrix[12]===0&&this.modelMatrix[13]===0&&this.modelMatrix[14]===0&&(this.modelMatrix[14]=.01);let t=new Rt({geometry:new e0({positions:[m.ZERO,m.UNIT_X],width:this.width,vertexFormat:es.VERTEX_FORMAT,colors:[Y.RED,Y.RED],arcType:Kt.NONE}),modelMatrix:M.multiplyByUniformScale(this.modelMatrix,this.length,new M),id:this.id,pickPrimitive:this}),n=new Rt({geometry:new e0({positions:[m.ZERO,m.UNIT_Y],width:this.width,vertexFormat:es.VERTEX_FORMAT,colors:[Y.GREEN,Y.GREEN],arcType:Kt.NONE}),modelMatrix:M.multiplyByUniformScale(this.modelMatrix,this.length,new M),id:this.id,pickPrimitive:this}),i=new Rt({geometry:new e0({positions:[m.ZERO,m.UNIT_Z],width:this.width,vertexFormat:es.VERTEX_FORMAT,colors:[Y.BLUE,Y.BLUE],arcType:Kt.NONE}),modelMatrix:M.multiplyByUniformScale(this.modelMatrix,this.length,new M),id:this.id,pickPrimitive:this});this._primitive=new In({geometryInstances:[t,n,i],appearance:new es,asynchronous:!1})}this._primitive.update(e)}};pB.prototype.isDestroyed=function(){return!1};pB.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),he(this)};var Y9=pB;var Cdo=_(T(),1);function uCt(e){if(C.typeOf.object("options",e),C.typeOf.object("options.direction",e.direction),m.equals(e.direction,m.ZERO))throw new L("options.direction cannot be zero-length");this.direction=m.clone(e.direction),this.color=Y.clone(e.color??Y.WHITE),this.intensity=e.intensity??1}var u6=uCt;var Fdo=_(T(),1);var Ldo=_(T(),1),H9=`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); materialInput.normalEC = normalEC; materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, materialInput.normalEC); 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 Rdo=_(T(),1),z9=`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; v_positionEC = (czm_modelViewRelativeToEye * p).xyz; v_st = st; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;function XS(e){e=e??z.EMPTY_OBJECT;let t=e.translucent??!0,n=e.aboveGround??!1;this.material=c(e.material)?e.material:zi.fromType(zi.ColorType),this.translucent=e.translucent??!0,this._vertexShaderSource=e.vertexShaderSource??z9,this._fragmentShaderSource=e.fragmentShaderSource??H9,this._renderState=no.getDefaultRenderState(t,!n,e.renderState),this._closed=!1,this._flat=e.flat??!1,this._faceForward=e.faceForward??n,this._aboveGround=n}Object.defineProperties(XS.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 XS.VERTEX_FORMAT}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}},aboveGround:{get:function(){return this._aboveGround}}});XS.VERTEX_FORMAT=We.POSITION_AND_ST;XS.prototype.getFragmentShaderSource=no.prototype.getFragmentShaderSource;XS.prototype.isTranslucent=no.prototype.isTranslucent;XS.prototype.getRenderState=no.prototype.getRenderState;var m6=XS;var Bdo=_(T(),1);function od(e){if(!c(e)||!c(e.scene))throw new L("options.scene is required.");this._scene=e.scene,this.samplingWindow=e.samplingWindow??od.defaultSettings.samplingWindow,this.quietPeriod=e.quietPeriod??od.defaultSettings.quietPeriod,this.warmupPeriod=e.warmupPeriod??od.defaultSettings.warmupPeriod,this.minimumFrameRateDuringWarmup=e.minimumFrameRateDuringWarmup??od.defaultSettings.minimumFrameRateDuringWarmup,this.minimumFrameRateAfterWarmup=e.minimumFrameRateAfterWarmup??od.defaultSettings.minimumFrameRateAfterWarmup,this._lowFrameRate=new ye,this._nominalFrameRate=new ye,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){mCt(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(){fCt(t)}this._visibilityChangeRemoveListener=void 0,c(n)&&(document.addEventListener(n,i,!1),this._visibilityChangeRemoveListener=function(){document.removeEventListener(n,i,!1)})}od.defaultSettings={samplingWindow:5,quietPeriod:2,warmupPeriod:5,minimumFrameRateDuringWarmup:4,minimumFrameRateAfterWarmup:8};od.fromScene=function(e){if(!c(e))throw new L("scene is required.");return(!c(e._frameRateMonitor)||e._frameRateMonitor.isDestroyed())&&(e._frameRateMonitor=new od({scene:e})),e._frameRateMonitor};Object.defineProperties(od.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}}});od.prototype.pause=function(){++this._pauseCount,this._pauseCount===1&&(this._frameTimes.length=0,this._lastFramesPerSecond=void 0)};od.prototype.unpause=function(){--this._pauseCount,this._pauseCount<=0&&(this._pauseCount=0,this._needsQuietPeriod=!0)};od.prototype.isDestroyed=function(){return!1};od.prototype.destroy=function(){return this._preUpdateRemoveListener(),c(this._visibilityChangeRemoveListener)&&this._visibilityChangeRemoveListener(),he(this)};function mCt(e,t){if(e._pauseCount>0)return;let n=Ti();if(e._needsQuietPeriod)e._needsQuietPeriod=!1,e._frameTimes.length=0,e._quietPeriodEndTime=n+e.quietPeriod/Kn.SECONDS_PER_MILLISECOND,e._warmupPeriodEndTime=e._quietPeriodEndTime+(e.warmupPeriod+e.samplingWindow)/Kn.SECONDS_PER_MILLISECOND;else if(n>=e._quietPeriodEndTime){e._frameTimes.push(n);let i=n-e.samplingWindow/Kn.SECONDS_PER_MILLISECOND;if(e._frameTimes.length>=2&&e._frameTimes[0]<=i){for(;e._frameTimes.length>=2&&e._frameTimes[1]<i;)e._frameTimes.shift();let o=(n-e._frameTimes[0])/(e._frameTimes.length-1);e._lastFramesPerSecond=1e3/o;let r=1e3/(n>e._warmupPeriodEndTime?e.minimumFrameRateAfterWarmup:e.minimumFrameRateDuringWarmup);o>r?e._frameRateIsLow||(e._frameRateIsLow=!0,e._needsQuietPeriod=!0,e.lowFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond)):e._frameRateIsLow&&(e._frameRateIsLow=!1,e._needsQuietPeriod=!0,e.nominalFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond))}}}function fCt(e){document[e._hiddenPropertyName]?e.pause():e.unpause()}var K9=od;var ruo=_(T(),1);var dCe=_(_7(),1);function f6(){this._image=new Image}f6.prototype.isReady=function(){return!0};f6.prototype.shouldDiscardImage=function(e){return e===this._image};function IS(e){e=e??z.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 Ki({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new de(-w.PI,-w.PI,w.PI,w.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new Ct(t)),this._credit=t,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=23,c(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new f6),this._errorEvent=new ye}Object.defineProperties(IS.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}}});IS.fromMetadata=function(e,t){if(C.defined("metadata",e),!e.imageryPresent)throw new le(`The server ${e.url} doesn't have imagery`);let n=new IS(t);return n._metadata=e,n};IS.prototype.getTileCredits=function(e,t,n){let i=this._metadata,o=i.getTileInformation(e,t,n);if(c(o)){let r=i.providers[o.imageryProvider];if(c(r))return[r]}};IS.prototype.requestImage=function(e,t,n,i){let o=this._tileDiscardPolicy._image,r=this._metadata,s=G0.tileXYToQuadKey(e,t,n),a=r.getTileInformation(e,t,n);if(!c(a)){if(r.isValid(s)){let d=new Jo({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 l=hCt(this,a,e,t,n,i).fetchArrayBuffer();if(c(l))return l.then(function(d){W9(r.key,d);let u=new Uint8Array(d),f,p=r.protoImagery;if((!c(p)||!p)&&(f=pCt(u)),!c(f)&&(!c(p)||p)){let y=bCt(u);f=y.imageType,u=y.imageData}return!c(f)||!c(u)?o:l_({uint8Array:u,format:f,flipY:!0})})};IS.prototype.pickFeatures=function(e,t,n,i,o){};function hCt(e,t,n,i,o,r){let s=G0.tileXYToQuadKey(n,i,o),a=t.imageryVersion;return a=c(a)&&a>0?a:1,e._metadata.resource.getDerivedResource({url:`flatfile?f1-0${s}-i.${a.toString()}`,request:r})}function pCt(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 bCt(e){let t=dCe.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,c(a)||(a=i.copyrightIds=[]),(s&7)===2){let l=t.uint32()+t.pos;for(;t.pos<l;)a.push(t.uint32())}else a.push(t.uint32());break;default:t.skipType(s&7);break}}let o=i.imageType;if(c(o))switch(o){case 0:i.imageType="image/jpeg";break;case 4:i.imageType="image/png";break;default:throw new le("GoogleEarthEnterpriseImageryProvider: Unsupported image type.")}let r=i.alphaType;return c(r)&&r!==0&&(console.log("GoogleEarthEnterpriseImageryProvider: External alpha not supported."),delete i.alphaType,delete i.imageAlpha),i}var h6=IS;var muo=_(T(),1);var yCt=new Y(1,1,1,.4),gCt=new Y(0,1,0,.05),xCt=new Y(0,.5,0,.2);function WS(e){e=e??z.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=c(e.tilingScheme)?e.tilingScheme:new Ki({ellipsoid:e.ellipsoid}),this._cells=e.cells??8,this._color=e.color??yCt,this._glowColor=e.glowColor??gCt,this._glowWidth=e.glowWidth??6,this._backgroundColor=e.backgroundColor??xCt,this._errorEvent=new ye,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._canvasSize=e.canvasSize??256,this._canvas=this._createGridCanvas()}Object.defineProperties(WS.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}}});WS.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()};WS.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};WS.prototype.getTileCredits=function(e,t,n){};WS.prototype.requestImage=function(e,t,n,i){return Promise.resolve(this._canvas)};WS.prototype.pickFeatures=function(e,t,n,i,o){};var p6=WS;var Jmo=_(T(),1);var xmo=_(T(),1);var nmo=_(T(),1);var Cuo=_(T(),1);function Qf(){}Qf._maxDecodingConcurrency=Math.max(Ot.hardwareConcurrency-1,1);Qf._decodeTaskProcessor=new gi("decodeI3S",Qf._maxDecodingConcurrency);Qf._promise=void 0;async function _Ct(){if(await Qf._decodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/draco_decoder.wasm"}))return Qf._decodeTaskProcessor;throw new le("I3S decoder could not be initialized.")}Qf.decode=async function(e,t,n,i,o){return C.typeOf.string("url",e),C.defined("defaultGeometrySchema",t),C.defined("geometryData",n),c(Qf._promise)||(Qf._promise=_Ct()),Qf._promise.then(function(r){let s=n._parent._data,a=n._parent._inverseRotationMatrix,l=0,d=0,u=0;c(s.obb)?(l=s.obb.center[0],d=s.obb.center[1],u=s.obb.center[2]):c(s.mbs)&&(l=s.mbs[0],d=s.mbs[1],u=s.mbs[2]);let f=te.fromRotationX(-w.PI_OVER_TWO),p=new te;te.multiply(f,a,p);let y=pe.fromDegrees(l,d,u),h=re.WGS84.cartographicToCartesian(y),g={binaryData:n._data,featureData:c(i)&&c(i[0])?i[0].data:void 0,schema:t,bufferInfo:n._geometryBufferInfo,ellipsoidRadiiSquare:re.WGS84.radiiSquared,url:e,geoidDataList:n._dataProvider._geoidDataList,cartographicCenter:y,cartesianCenter:h,parentRotation:p,enableFeatures:n._dataProvider.showFeatures,splitGeometryByColorTransparency:n._dataProvider.adjustMaterialAlphaMode,symbologyData:o,calculateNormals:n._dataProvider.calculateNormals};return r.scheduleTask(g)})};var J9=Qf;var Ruo=_(T(),1);function b6(e,t){this._parent=e,this._dataProvider=e._dataProvider,this._layer=e._layer,c(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(b6.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}}});b6.prototype.load=async function(){return this._data=await jf.loadJson(this._resource),this._data};var Q9=b6;var Iuo=_(T(),1);function X0(e,t){this._storageInfo=t,this._parent=e,this._dataProvider=e._dataProvider,this._loadPromise=void 0;let n=`attributes/${t.key}/0`;c(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(X0.prototype,{resource:{get:function(){return this._resource}},header:{get:function(){return this._header}},values:{get:function(){if(c(this._values)){if(c(this._values.attributeValues))return this._values.attributeValues;if(c(this._values.objectIds))return this._values.objectIds}return[]}},name:{get:function(){return this._storageInfo.name}}});function bB(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 TCt(e){return e==="String"?1:bB(e)}async function SCt(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)}X0.prototype.load=function(){return c(this._loadPromise)?this._loadPromise:(this._loadPromise=SCt(this).catch(function(e){console.error(e)}),this._loadPromise)};X0.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}};X0.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};X0.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(c(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],l="";for(let d=0;d<a;++d){let u=this._parseValue(e,r.valueType,t);u.value.charCodeAt(0)!==0&&(l+=u.value),t=u.offset}this._values[o].push(l)}}}};X0.prototype._getBodyOffset=function(e){let t=0;return c(this._storageInfo.attributeValues)?t=bB(this._storageInfo.attributeValues.valueType):c(this._storageInfo.objectIds)&&(t=bB(this._storageInfo.objectIds.valueType)),t>0?Math.ceil(e/t)*t:e};X0.prototype._validateHeader=function(e){let t=0;for(let n=0;n<this._storageInfo.header.length;n++){let i=this._storageInfo.header[n];t+=TCt(i.valueType)}if(e.byteLength<t)throw new le(`Invalid attribute buffer size (field: ${this.name}, header: ${t}, actual: ${e.byteLength})`)};X0.prototype._validateBody=function(e,t){if(!c(this._header.count))throw new le(`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(c(s))if(s.valueType!=="String"){r==="attributeByteCounts"&&(n=t);let a=bB(s.valueType);t+=a*this._header.count}else{if(!c(n))throw new le(`Invalid attribute buffer (field: ${this.name}, attributeByteCounts is missing)`);for(let a=0;a<this._header.count&&t<e.byteLength;++a){let l=this._parseValue(e,this._storageInfo.attributeByteCounts.valueType,n);t+=l.value,n=l.offset}}else throw new le(`Invalid attribute buffer (field: ${this.name}, ${r} is missing)`)}if(e.byteLength<t)throw new le(`Invalid attribute buffer size (field: ${this.name}, expected: ${t}, actual: ${e.byteLength})`)};var j9=X0;var Muo=_(T(),1);function q9(e,t){let n=e._dataProvider,i=e._layer,o;c(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(q9.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},customAttributes:{get:function(){return this._customAttributes}}});q9.prototype.load=function(){let e=this;return this._dataProvider._loadBinary(this._resource).then(function(t){return e._data=t,t})};var CCt=new m,VCt=new m,LCt=new m,ZCt=new m,RCt=new m;function y6(e,t,n,i){let o=m.subtract(i,n,CCt),r=m.cross(o,m.subtract(e,n,VCt),ZCt),s=m.cross(o,m.subtract(t,n,LCt),RCt);return m.dot(r,s)>=0}var GCt=new m,ECt=new m,XCt=new m,ICt=new m,WCt=new m,wCt=new m,PCt=new m,vCt=new m,FCt=new m,ACt=new m;q9.prototype.getClosestPointIndexOnTriangle=function(e,t,n){if(c(this._customAttributes)&&c(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,te.multiplyByVector(this._customAttributes.parentRotation,i,i);let o=Number.MAX_VALUE,r,s,a,l,d=this._customAttributes.positions,u=this._customAttributes.indices,f;c(u)?f=u.length:f=d.length/3;for(let p=0;p<f;p++){let y,h,g;c(u)?(y=u[p],h=u[p+1],g=u[p+2]):(y=p*3,h=p*3+1,g=p*3+2);let x=m.fromElements(d[y*3],d[y*3+1],d[y*3+2],GCt),S=m.fromElements(d[h*3],d[h*3+1],d[h*3+2],ECt),V=new m(d[g*3],d[g*3+1],d[g*3+2],XCt);if(!y6(i,x,S,V)||!y6(i,S,x,V)||!y6(i,V,x,S))continue;let Z=m.subtract(S,x,ICt),R=m.subtract(V,x,WCt),E=m.cross(Z,R,wCt);if(m.magnitude(E)===0)continue;let I=m.normalize(E,PCt),v=m.subtract(i,x,vCt),P=Math.abs(m.dot(v,I));if(P<o){o=P,r=p;let F=m.magnitudeSquared(m.subtract(i,x,v)),N=m.magnitudeSquared(m.subtract(i,S,FCt)),b=m.magnitudeSquared(m.subtract(i,V,ACt));F<N&&F<b?(a=y,l=x,s=F):N<b?(a=h,l=S,s=N):(a=g,l=V,s=b)}}if(c(r))return{index:a,distanceSquared:s,distance:Math.sqrt(s),queriedPosition:i,closestPosition:m.clone(l)}}return{index:-1,distanceSquared:Number.Infinity,distance:Number.Infinity}};function uCe(e){let t=[],n=e.length;for(let i=0;i<n;i++)i<3?t.push(LS(e[i])):t.push(e[i]);return t}q9.prototype._generateGltf=function(e,t,n,i,o,r,s,a){let l={pbrMetallicRoughness:{metallicFactor:0},doubleSided:!0,name:"Material"},d=!1,u,f="";if(c(this._parent._data.mesh)&&c(this._layer._data.materialDefinitions)){let Z=this._parent._data.mesh.material.definition;if(Z>=0&&Z<this._layer._data.materialDefinitions.length){if(u=this._layer._data.materialDefinitions[Z],l=u,c(l.pbrMetallicRoughness)&&c(l.pbrMetallicRoughness.baseColorTexture)){d=!0,l.pbrMetallicRoughness.baseColorTexture.index=0;let R="0";if(c(this._layer._data.textureSetDefinitions))for(let E=0;E<this._layer._data.textureSetDefinitions.length;E++){let I=this._layer._data.textureSetDefinitions[E];for(let v=0;v<I.formats.length;v++){let P=I.formats[v];if(P.format==="jpg"){R=P.name;break}}}c(this._parent._data.mesh)&&this._parent._data.mesh.material.resource>=0&&(f=this._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.material.resource}/textures/${R}`}).url)}c(l.pbrMetallicRoughness)&&c(l.pbrMetallicRoughness.baseColorFactor)&&(l.pbrMetallicRoughness.baseColorFactor=uCe(l.pbrMetallicRoughness.baseColorFactor)),c(l.emissiveFactor)&&(l.emissiveFactor=uCe(l.emissiveFactor))}}else c(this._parent._data.textureData)&&(d=!0,f=this._parent.resource.getDerivedResource({url:`${this._parent._data.textureData[0].href}`}).url,l.pbrMetallicRoughness.baseColorTexture={index:0});c(l.alphaMode)&&(l.alphaMode=l.alphaMode.toUpperCase());let p=[],y=[],h=[];d&&(p=[{sampler:0,source:0}],y=[{uri:f}],h=[{magFilter:9729,minFilter:9986,wrapS:10497,wrapT:10497}]);let g=[],x=n.length;for(let V=0;V<x;V++){let Z=n[V].primitives,R=Z.length;for(let E=0;E<R;E++){let I=Z[E];if(c(I.material)){for(;I.material>=g.length;){let P=He(l,!0);g.push(P)}let v=g[I.material];c(I.extra)&&I.extra.isTransparent?c(v.alphaMode)||(v.alphaMode="BLEND"):v.alphaMode==="BLEND"&&(v.alphaMode="OPAQUE")}}}return{scene:0,scenes:[{nodes:e}],nodes:t,meshes:n,buffers:i,bufferViews:o,accessors:r,materials:g,textures:p,images:y,samplers:h,asset:{version:"2.0"},extensions:s,extensionsUsed:a}};var NL=q9;function wc(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(wc.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}}});wc.prototype.load=async function(){let e=this;function t(){if(!e._isRoot){let o=e._create3DTileDefinition();e._tile=new Ku(e._layer._tileset,e._dataProvider.resource,o,e._parent._tile),e._tile._i3sNode=e}}if(!c(this._nodeIndex)){let o=await jf.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/":c(n.mesh)&&(i=`../${n.mesh.geometry.resource}/`),c(i)&&c(e._parent.resource)&&(e._resource=e._parent.resource.getDerivedResource({url:i})),t()};function mCe(e,t){let n=new j9(e,t);return e._fields[t.name]=n,n.load()}wc.prototype.loadFields=function(){let e=this._layer._data.attributeStorageInfo,t=[];if(c(e))for(let n=0;n<e.length;n++){let i=e[n],o=this._fields[i.name];c(o)?t.push(o.load()):t.push(mCe(this,i))}return Promise.all(t)};wc.prototype.loadField=function(e){C.defined("name",e);let t=this._fields[e];if(c(t))return t.load();let n=this._layer._data.attributeStorageInfo;if(c(n))for(let i=0;i<n.length;i++){let o=n[i];if(o.name===e)return mCe(this,o)}return Promise.resolve()};wc.prototype.getFieldsForPickedPosition=function(e){let t=this.geometryData[0];if(!c(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)};wc.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};wc.prototype._loadChildren=function(){let e=this;if(c(this._childrenReadyPromise))return this._childrenReadyPromise;let t=[];if(c(e._data.children))for(let n=0;n<e._data.children.length;n++){let i=e._data.children[n],o=new wc(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};wc.prototype._loadGeometryData=function(){let e=[];if(c(this._data.geometryData))for(let t=0;t<this._data.geometryData.length;t++){let n=new NL(this,this._data.geometryData[t].href);this._geometryData.push(n),e.push(n.load())}else if(c(this._data.mesh)){let t=this._layer._findBestGeometryBuffers(this._data.mesh.geometry.definition,["position","uv0"]),n=`./geometries/${t.bufferIndex}/`,i=new NL(this,n);i._geometryDefinitions=t.definition,i._geometryBufferInfo=t.geometryBufferInfo,this._geometryData.push(i),e.push(i.load())}return Promise.all(e)};wc.prototype._loadFeatureData=function(){let e=[];if(c(this._data.featureData))for(let t=0;t<this._data.featureData.length;t++){let n=new Q9(this,this._data.featureData[t].href);this._featureData.push(n),e.push(n.load())}return Promise.all(e)};wc.prototype._clearGeometryData=function(){this._geometryData=[]};wc.prototype._create3DTileDefinition=function(){let e=this._data.obb,t=this._data.mbs;if(!c(e)&&!c(t)){console.error("Failed to load I3S node. Bounding volume is required.");return}let n;if(c(e)?n=pe.fromDegrees(e.center[0],e.center[1],e.center[2]):n=pe.fromDegrees(t[0],t[1],t[2]),c(this._dataProvider._geoidDataList)&&c(n))for(let S=0;S<this._dataProvider._geoidDataList.length;S++){let V=this._dataProvider._geoidDataList[S],Z=V.projection.project(n);if(Z.x>V.nativeExtent.west&&Z.x<V.nativeExtent.east&&Z.y>V.nativeExtent.south&&Z.y<V.nativeExtent.north){n.height+=UCt(Z.x,Z.y,V);break}}let i={},o,r=0;c(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=re.WGS84.cartographicToCartesian(n)):(i={sphere:[0,0,0,t[3]]},o=re.WGS84.cartographicToCartesian(n),r=this._data.mbs[3]),r*=2;let s=1/0;if(c(this._data.lodThreshold))if(this._layer._data.nodePages.lodSelectionMetricType==="maxScreenThresholdSQ"){let S=Math.sqrt(this._data.lodThreshold/(Math.PI*.25));s=r/S}else if(this._layer._data.nodePages.lodSelectionMetricType==="maxScreenThreshold"){let S=this._data.lodThreshold;s=r/S}else console.error("Invalid lodSelectionMetricType in Layer");else if(c(this._data.lodSelection))for(let S=0;S<this._data.lodSelection.length;S++)this._data.lodSelection[S].metricType==="maxScreenThreshold"&&(s=r/this._data.lodSelection[S].maxError);s===1/0&&(s=1e5);let a=s*16,l=new Ea(0,0,0),d=wt.headingPitchRollQuaternion(o,l);c(this._data.obb)&&(d=new Fe(this._data.obb.quaternion[0],this._data.obb.quaternion[1],this._data.obb.quaternion[2],this._data.obb.quaternion[3]));let u=te.fromQuaternion(d),f=te.inverse(u,new te),p=new M(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),y=M.inverse(p,new M),h=M.clone(p);c(this._parent._globalTransform)&&M.multiply(p,this._parent._inverseGlobalTransform,h),this._globalTransform=p,this._inverseGlobalTransform=y,this._inverseRotationMatrix=f;let g=[];for(let S=0;S<this._children.length;S++)g.push(this._children[S]._create3DTileDefinition());return{children:g,refine:"REPLACE",boundingVolume:i,transform:[h[0],h[4],h[8],h[12],h[1],h[5],h[9],h[13],h[2],h[6],h[10],h[14],h[3],h[7],h[11],h[15]],content:{uri:c(this._resource)?this._resource.url:void 0},geometricError:a}};wc.prototype._loadSymbology=async function(){!c(this._symbologyData)&&c(this._layer._symbology)&&(this._symbologyData=await this._layer._symbology._getSymbology(this))};wc.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),c(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 J9.decode(o,r,s,this._featureData[0],this._symbologyData);if(!c(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 MCt(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 NCt(e,t,n){if(!c(n.values)||n.values.length===0)return!1;let i=c(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 fCe(e,t){let n=e._tile.content.batchTable;if(c(n)&&n.featuresLength>0){n.setAllShow(!0);let i=await MCt(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(!NCt(o,e._fields[s.name],s)){n.setShow(o,!1);break}}}t.show=!0}wc.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(c(this._geometryData)&&this._geometryData.length>0&&c(t)&&t.ready){t.show=!1;let n=fCe(this,t);e.push(n)}return Promise.all(e)};Ku.prototype._hookedRequestContent=Ku.prototype.requestContent;Ku.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(!c(t)){e._isLoading=!1;return}return e._contentResource=new Ge({url:t}),e._hookedRequestContent()}).then(t=>{let n=t?._model;return c(e._i3sNode._geometryData)&&e._i3sNode._geometryData.length>0&&c(n)&&(n.show=!1,n.readyEvent.addEventListener(()=>{fCe(e._i3sNode,n)})),e._isLoading=!1,t})}};function kCt(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 yB(e,t,n,i){let o=e+t*n;return i[o]}function UCt(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 l=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=yB(s,a,n.width,n.buffer),f=yB(l,a,n.width,n.buffer),p=yB(s,d,n.width,n.buffer),y=yB(l,d,n.width,n.buffer),h=kCt(o,r,u,f,p,y);return h=h*n.scale+n.offset,h}Object.defineProperties(Ku.prototype,{i3sNode:{get:function(){return this._i3sNode}}});var kL=wc;var amo=_(T(),1);function gB(e){this._layer=e,this._defaultSymbology=void 0,this._valueFields=[],this._uniqueValueHash=void 0,this._classBreaksHash=void 0,this._parseLayerSymbology()}Object.defineProperties(gB.prototype,{defaultSymbology:{get:function(){return this._defaultSymbology}}});function g6(e,t){let n=[];for(let i=0;i<e.length;i++){let o=Y.byteToFloat(e[i]);i<3?n.push(LS(o)):n.push(o)}return n.length===3&&(c(t)?n.push(1-t/100):n.push(1)),n}function UL(e,t){let n={edges:void 0,material:void 0};if(c(e)&&c(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(c(r)?(n.edges={},c(r.color)&&(n.edges.color=g6(r.color,r.transparency))):c(s)&&(n.edges={},c(s.color)&&(n.edges.color=g6(s.color,s.transparency))),!t){let a=o.material;c(a)&&(n.material={colorMixMode:a.colorMixMode},c(a.color)&&(n.material.color=g6(a.color,a.transparency)))}break}}return n}function OCt(e,t){if(c(e.uniqueValueGroups)){let n={};for(let i=0;i<e.uniqueValueGroups.length;i++){let o=e.uniqueValueGroups[i].classes;if(c(o))for(let r=0;r<o.length;r++){let s=UL(o[r].symbol,t),a=o[r].values;for(let l=0;l<a.length;l++){let d=a[l],u=n;for(let f=0;f<d.length;f++){let p=d[f];f===d.length-1?u[p]=s:(c(u[p])||(u[p]={}),u=u[p])}}}}return n}if(c(e.uniqueValueInfos)){let n={};for(let i=0;i<e.uniqueValueInfos.length;i++){let o=e.uniqueValueInfos[i];n[o.value]=UL(o.symbol,t)}return n}}function DCt(e,t){if(c(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:[]};c(e.minValue)&&(i.ranges.push(e.minValue),i.symbols.push(void 0));for(let o=0;o<n.length;o++){let r=n[o];c(r.classMinValue)&&(i.ranges.length===0||r.classMinValue>i.ranges[i.ranges.length-1])&&(i.ranges.push(r.classMinValue),i.symbols.push(void 0)),c(r.classMaxValue)&&(i.ranges.length===0||r.classMaxValue>i.ranges[i.ranges.length-1])&&(i.ranges.push(r.classMaxValue),i.symbols.push(UL(r.symbol,t)))}return i.symbols.push(void 0),i}}gB.prototype._parseLayerSymbology=function(){let e=this._layer.data.drawingInfo;if(c(e)&&c(e.renderer)){let t=this._layer.data.cachedDrawingInfo,n=c(t)&&t.color===!0,i=e.renderer;i.type==="simple"?this._defaultSymbology=UL(i.symbol,n):i.type==="uniqueValue"?(this._defaultSymbology=UL(i.defaultSymbol,n),this._valueFields.push(i.field1),c(i.field2)&&this._valueFields.push(i.field2),c(i.field3)&&this._valueFields.push(i.field3),this._uniqueValueHash=OCt(i,n)):i.type==="classBreaks"&&(this._defaultSymbology=UL(i.defaultSymbol,n),this._valueFields.push(i.field),this._classBreaksHash=DCt(i,n))}};function hCe(e,t,n,i){let o=t[n];if(i<o.length){let r=o[i],s=e[r];return c(s)&&++n<t.length?hCe(s,t,n,i):s}}function BCt(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 YCt(e,t,n){let i=t[n],o=BCt(e.ranges,i);return e.symbols[o]}gB.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(c(this._uniqueValueHash)?o=r=>hCe(this._uniqueValueHash,i,0,r):c(this._classBreaksHash)&&(o=r=>YCt(this._classBreaksHash,i[0],r)),c(o)){let r=i[0];for(let s=0;s<r.length;s++){let a=o(s);c(a)&&(t[s]=a)}}}return t};var $9=gB;function rd(e,t,n){this._dataProvider=e,this._parent=n,!c(t.href)&&c(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 Ge({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(rd.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(c(this.version))return this.majorVersion<1||this.majorVersion===1&&this.minorVersion<=6}}});rd.prototype.load=async function(e){if(this._data.spatialReference.wkid!==4326)throw new le(`Unsupported spatial reference: ${this._data.spatialReference.wkid}`);if(this._dataProvider.applySymbology&&(this._symbology=new $9(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()};rd.prototype._computeGeometryDefinitions=function(e){if(this._geometryDefinitions=[],c(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(c(r.compressedAttributes)&&e){a=!0;let l=r.compressedAttributes.attributes;for(let d=0;d<l.length;d++)s.push(l[d])}else for(let l in r)l!=="offset"&&s.push(l);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)}};rd.prototype._findBestGeometryBuffers=function(e,t){let n=this._geometryDefinitions[e];if(c(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(c(n[0]))return{bufferIndex:0,definition:n,geometryBufferInfo:n[0]}}};rd.prototype._loadRootNode=function(e){if(c(this._data.nodePages)){let t=0;c(this._data.nodePages.rootIndex)&&(t=this._data.nodePages.rootIndex),this._rootNode=new kL(this,t,!0)}else this._rootNode=new kL(this,this._data.store.rootNode,!0);return this._rootNode.load(e)};rd.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]})};rd._fetchJson=function(e){return e.fetchJson()};rd.prototype._loadNodePage=function(e){let t=this;if(!c(this._nodePageFetches[e])){let n=this.resource.getDerivedResource({url:`nodepages/${e}/`}),i=rd._fetchJson(n).then(function(o){return c(o.error)&&o.error.code!==200?Promise.reject(o.error):(t._nodePages[e]=o.nodes,o)});this._nodePageFetches[e]=i}return this._nodePageFetches[e]};rd.prototype._computeExtent=function(){c(this._data.fullExtent)?this._extent=de.fromDegrees(this._data.fullExtent.xmin,this._data.fullExtent.ymin,this._data.fullExtent.xmax,this._data.fullExtent.ymax):c(this._data.store.extent)&&(this._extent=de.fromDegrees(this._data.store.extent[0],this._data.store.extent[1],this._data.store.extent[2],this._data.store.extent[3]))};rd.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;c(o)&&!c(e?.outlineColor)&&(e=c(e)?He(e):{},e.outlineColor=Y.fromCartesian4(ce.fromArray(o))),this._tileset=await bs.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){c(r._i3sNode)&&r._i3sNode._loadChildren()})};rd.prototype._updateVisibility=function(){c(this._tileset)&&(this._tileset.show=this._parent.show)};rd.prototype.filterByAttributes=function(e){this._filters=c(e)?He(e,!0):[];let t=this._rootNode;return c(t)?t._filterFeatures():Promise.resolve()};var wS=rd;var Vmo=_(T(),1);function xB(e,t){this._dataProvider=e,this._resource=new Ge({url:t}),this._resource.setQueryParameters(e.resource.queryParameters),this._resource.appendForwardSlash()}Object.defineProperties(xB.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},names:{get:function(){let e=[],t=this._data.summary;if(c(t))for(let n=0;n<t.length;++n)e.push(t[n].fieldName);return e}}});xB.prototype.load=async function(){return this._data=await jf.loadJson(this._resource),this._data};xB.prototype._getValues=function(e){let t=this._data.summary;if(c(t))for(let n=0;n<t.length;++n){let i=t[n];if(i.fieldName===e)return c(i.mostFrequentValues)?[...i.mostFrequentValues]:[]}};var eM=xB;var Imo=_(T(),1);function tM(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(tM.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(C.defined("value",e),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}}});tM._fromData=async function(e,t,n,i){let o=new tM(e,i,n);if(o._data.layerType==="group"){let r=o._data.sublayers;if(c(r)){let s=[];for(let l=0;l<r.length;l++){let d=tM._fromData(e,t,r[l],o);s.push(d)}let a=await Promise.all(s);for(let l=0;l<a.length;l++){let d=a[l];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 Ge({url:r});s.setQueryParameters(e.resource.queryParameters),s.appendForwardSlash(),o._resource=s;let a=await jf.loadJson(o._resource),l=new wS(e,a,o);o._i3sLayers.push(l)}else console.log(`${o._data.layerType} layer ${o._data.name} is skipped as not supported.`);return o};var nM=tM;var yCe=_(pCe(),1);function xs(e){e=e??z.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??z.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(xs.prototype,{name:{get:function(){return this._name}},show:{get:function(){return this._show},set:function(e){if(C.defined("value",e),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}}});xs.prototype.destroy=function(){for(let e=0;e<this._layers.length;e++)c(this._layers[e]._tileset)&&this._layers[e]._tileset.destroy();return he(this)};xs.prototype.isDestroyed=function(){return!1};xs.prototype.update=function(e){for(let t=0;t<this._layers.length;t++)c(this._layers[t]._tileset)&&this._layers[t]._tileset.update(e)};xs.prototype.prePassesUpdate=function(e){for(let t=0;t<this._layers.length;t++)c(this._layers[t]._tileset)&&this._layers[t]._tileset.prePassesUpdate(e)};xs.prototype.postPassesUpdate=function(e){for(let t=0;t<this._layers.length;t++)c(this._layers[t]._tileset)&&this._layers[t]._tileset.postPassesUpdate(e)};xs.prototype.updateForPass=function(e,t){for(let n=0;n<this._layers.length;n++)c(this._layers[n]._tileset)&&this._layers[n]._tileset.updateForPass(e,t)};function HCt(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 bCe(e,t,n){if(t.layerType==="Building"){c(n.showFeatures)||(e._showFeatures=!0),c(n.adjustMaterialAlphaMode)||(e._adjustMaterialAlphaMode=!0),c(n.applySymbology)||(e._applySymbology=!0),c(n.calculateNormals)||(e._calculateNormals=!0);let i=HCt(e,t.id);if(c(t.sublayers)){let o=[];for(let s=0;s<t.sublayers.length;s++){let a=nM._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(c(t.statisticsHRef)){let o=i.concat(`/${t.statisticsHRef}`),r=new eM(e,o);await r.load(),e._attributeStatistics.push(r)}if(c(t.fullExtent)){let o=de.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"){!c(n.calculateNormals)&&!c(t.textureSetDefinitions)&&(e._calculateNormals=!0);let i=new wS(e,t,e);e._layers.push(i),c(i._extent)&&e._layersExtent.push(i._extent)}else console.log(`${t.layerType} layer ${t.name} is skipped as not supported.`)}xs.fromUrl=async function(e,t){C.defined("url",e),t=t??z.EMPTY_OBJECT;let n=Ge.createIfNeeded(e);n.setQueryParameters({f:"pjson"},!0);let i=await xs.loadJson(n),o=new xs(t);if(o._resource=n,o._data=i,c(i.layers)){let s=[];for(let a=0;a<i.layers.length;a++){let l=bCe(o,i.layers[a],t);s.push(l)}await Promise.all(s)}else await bCe(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};xs._fetchJson=function(e){return e.fetchJson()};xs.loadJson=async function(e){let t=await xs._fetchJson(e);if(c(t.error)){if(console.error("Failed to fetch I3S ",e.url),c(t.error.message)&&console.error(t.error.message),c(t.error.details))for(let n=0;n<t.error.details.length;n++)console.log(t.error.details[n]);throw new le(t.error)}return t};xs.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 le(`Failed to load binary: ${e.url}`);return t};xs.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 zCt=new D;function KCt(e,t){let n=e.tilingScheme,i=[],o={},r=e._lodCount,s=pe.fromRadians(t.west,t.north),a=pe.fromRadians(t.east,t.south),l=n.positionToTileXY(s,r),d=n.positionToTileXY(a,r);for(let f=l.x;f<=d.x;f++)for(let p=l.y;p<=d.y;p++){let y=D.fromElements(f,p,zCt),h=y.toString();if(!o.hasOwnProperty(h)){let g={x:y.x,y:y.y,level:r,tilingScheme:n,terrainProvider:e,positions:[]};o[h]=g,i.push(g)}}let u=[];for(let f=0;f<i.length;++f){let p=i[f],y=p.terrainProvider.requestTileGeometry(p.x,p.y,p.level);u.push(y)}return Promise.all(u).then(function(f){let p=[];for(let y=0;y<f.length;y++){let h={tilingScheme:n,x:i[y].x,y:i[y].y,level:i[y].level},g=f[y],x="Geographic";n._projection instanceof Wi&&(x="WebMercator");let S={projectionType:x,projection:n._projection,nativeExtent:n.tileXYToNativeRectangle(h.x,h.y,h.level),height:g._height,width:g._width,scale:g._structure.heightScale,offset:g._structure.heightOffset};if(g._encoding===cm.LERC){let V=yCe.default.decode(g._buffer);S.buffer=V.pixels[0]}else S.buffer=g._buffer;p.push(S)}return p})}async function JCt(e){let t=e._geoidTiledTerrainProvider;if(c(t))try{let n=await KCt(t,e._extent);e._geoidDataList=n}catch{console.log("Error retrieving Geoid Terrain tiles - no geoid conversion will be performed.")}}xs.prototype.loadGeoidData=async function(){return c(this._geoidDataPromise)?this._geoidDataPromise:(this._geoidDataPromise=JCt(this),this._geoidDataPromise)};xs.prototype._computeExtent=function(){let e;for(let t=0;t<this._layersExtent.length;t++){let n=this._layersExtent[t];c(e)?de.union(e,n,e):e=de.clone(n)}this._extent=e};xs.prototype.getAttributeNames=function(){let e=[];for(let t=0;t<this._attributeStatistics.length;++t)e.push(...this._attributeStatistics[t].names);return e};xs.prototype.getAttributeValues=function(e){C.defined("name",e);for(let t=0;t<this._attributeStatistics.length;++t){let n=this._attributeStatistics[t]._getValues(e);if(c(n))return n}return[]};xs.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 jf=xs;var sfo=_(T(),1);var iM={};iM.createTilesetFromIModelId=async function(e,t){let{exports:n}=await as.getExports(e);if(n.length>0&&n.every(a=>a.status===as.ExportStatus.Invalid))throw new le(`All exports for this iModel are Invalid: ${e}`);let i=n.find(a=>a.status===as.ExportStatus.Complete);if(!c(i))return;let o=new URL(i._links.mesh.href);o.pathname=`${o.pathname}/tileset.json`;let r=o.toString(),s=new Ge({url:r});return bs.fromUrl(s,t)};iM.createTilesetForRealityDataId=async function(e,t,n,i){if(C.typeOf.string("iTwinId",e),C.typeOf.string("realityDataId",t),c(n)&&C.typeOf.string("type",n),c(i)&&C.typeOf.string("rootDocument",i),!c(n)||!c(i)){let s=await as.getRealityDataMetadata(e,t);i=s.rootDocument,n=s.type}if(![as.RealityDataType.Cesium3DTiles,as.RealityDataType.PNTS,as.RealityDataType.RealityMesh3DTiles,as.RealityDataType.Terrain3DTiles].includes(n))throw new le(`Reality data type is not a mesh type: ${n}`);let r=await as.getRealityDataURL(e,t,i);return bs.fromUrl(r,{maximumScreenSpaceError:4})};iM.createDataSourceForRealityDataId=async function(e,t,n,i){if(C.typeOf.string("iTwinId",e),C.typeOf.string("realityDataId",t),c(n)&&C.typeOf.string("type",n),c(i)&&C.typeOf.string("rootDocument",i),!c(n)||!c(i)){let s=await as.getRealityDataMetadata(e,t);i=s.rootDocument,n=s.type}if(![as.RealityDataType.KML,as.RealityDataType.GeoJSON].includes(n))throw new le(`Reality data type is not a data source type: ${n}`);let r=await as.getRealityDataURL(e,t,i);return n===as.RealityDataType.GeoJSON?gg.load(r):XT.load(r)};iM.loadGeospatialFeatures=async function(e,t,n){if(C.typeOf.string("iTwinId",e),C.typeOf.string("collectionId",t),c(n)&&(C.typeOf.number("limit",n),C.typeOf.number.lessThanOrEquals("limit",n,1e4),C.typeOf.number.greaterThanOrEquals("limit",n,1)),!c(as.defaultAccessToken)&&!c(as.defaultShareKey))throw new L("Must set ITwinPlatform.defaultAccessToken or ITwinPlatform.defaultShareKey first");let i=n??1e4,o=`${as.apiEndpoint}geospatial-features/itwins/${e}/ogc/collections/${t}/items`,r=new Ge({url:o,headers:{Authorization:as._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json"},queryParameters:{limit:i,client:"CesiumJS"}});return gg.load(r)};var x6=iM;var lfo=_(T(),1);function gCe(){}Object.defineProperties(gCe.prototype,{color:{get:L.throwInstantiationError},intensity:{get:L.throwInstantiationError}});var _6=gCe;var yfo=_(T(),1);var QCt=/\/$/,xCe=new Ct('© <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 OL(e){e=e??z.EMPTY_OBJECT;let t=e.styleId;if(!c(t))throw new L("options.styleId is required.");let n=e.accessToken;if(!c(n))throw new L("options.accessToken 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;let i=Ge.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=c(e.scaleFactor)?"@2x":"",a=i.getUrlComponent();QCt.test(a)||(a+="/"),a+=`${this._username}/${t}/tiles/${this._tilesize}/{z}/{x}/{y}${s}`,i.url=a,i.setQueryParameters({access_token:n});let l;c(e.credit)?(l=e.credit,typeof l=="string"&&(l=new Ct(l))):l=xCe,this._resource=i,this._imageryProvider=new Ba({url:i,credit:l,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(OL.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}}});OL.prototype.getTileCredits=function(e,t,n){};OL.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};OL.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};OL._defaultCredit=xCe;var T6=OL;var xfo=_(T(),1);function S6(e){}S6.prototype.isReady=function(){return!0};S6.prototype.shouldDiscardImage=function(e){return!1};var C6=S6;var Efo=_(T(),1);var jCt=new Ct("MapQuest, Open Street Map and contributors, CC-BY-SA");function TB(e){e=e??z.EMPTY_OBJECT;let t=Ge.createIfNeeded(e.url??"https://tile.openstreetmap.org/");t.appendForwardSlash(),t.url+=`{z}/{x}/{y}${e.retinaTiles?"@2x":""}.${e.fileExtension??"png"}`;let n=new ss({ellipsoid:e.ellipsoid}),i=256,o=256,r=e.minimumLevel??0,s=e.maximumLevel,a=e.rectangle??n.rectangle,l=n.positionToTileXY(de.southwest(a),r),d=n.positionToTileXY(de.northeast(a),r),u=(Math.abs(d.x-l.x)+1)*(Math.abs(d.y-l.y)+1);if(u>4)throw new L(`The rectangle and minimumLevel indicate that there are ${u} tiles at the minimum level. Imagery providers with more than four tiles at the minimum level are not supported.`);let f=e.credit??jCt;typeof f=="string"&&(f=new Ct(f)),Ba.call(this,{url:t,credit:f,tilingScheme:n,tileWidth:i,tileHeight:o,minimumLevel:r,maximumLevel:s,rectangle:a})}c(Object.create)&&(TB.prototype=Object.create(Ba.prototype),TB.prototype.constructor=TB);var I0=TB;var Ffo=_(T(),1);var qCt=new D(1,1);function V6(e){e=e??z.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=Y.clone(e.startColor??Y.WHITE),this.endColor=Y.clone(e.endColor??Y.WHITE),this.startScale=e.startScale??1,this.endScale=e.endScale??1,this.imageSize=D.clone(e.imageSize??qCt),this._age=0,this._normalizedAge=0,this._billboard=void 0}Object.defineProperties(V6.prototype,{age:{get:function(){return this._age}},normalizedAge:{get:function(){return this._normalizedAge}}});var _Ce=new m;V6.prototype.update=function(e,t){return m.multiplyByScalar(this.velocity,e,_Ce),m.add(this.position,_Ce,this.position),c(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 DL=V6;var Nfo=_(T(),1);function TCe(e){e=e??z.EMPTY_OBJECT,this.time=e.time??0,this.minimum=e.minimum??0,this.maximum=e.maximum??50,this._complete=!1}Object.defineProperties(TCe.prototype,{complete:{get:function(){return this._complete}}});var L6=TCe;var Ofo=_(T(),1);function SCe(e){throw new L("This type should not be instantiated directly. Instead, use BoxEmitter, CircleEmitter, ConeEmitter or SphereEmitter.")}SCe.prototype.emit=function(e){L.throwInstantiationError()};var Z6=SCe;var oho=_(T(),1);var CCe=new D(1,1);function oM(e){e=e??z.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;c(t)||(t=new O9(.5)),this._emitter=t,this._bursts=e.bursts,this._modelMatrix=M.clone(e.modelMatrix??M.IDENTITY),this._emitterModelMatrix=M.clone(e.emitterModelMatrix??M.IDENTITY),this._matrixDirty=!0,this._combinedMatrix=new M,this._startColor=Y.clone(e.color??e.startColor??Y.WHITE),this._endColor=Y.clone(e.color??e.endColor??Y.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??CCe),this._maximumImageSize=D.clone(e.imageSize??e.maximumImageSize??CCe),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 ye,this._isComplete=!1,this._updateParticlePool=!0,this._particleEstimate=0}Object.defineProperties(oM.prototype,{emitter:{get:function(){return this._emitter},set:function(e){C.defined("value",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){C.defined("value",e),this._matrixDirty=this._matrixDirty||!M.equals(this._modelMatrix,e),M.clone(e,this._modelMatrix)}},emitterModelMatrix:{get:function(){return this._emitterModelMatrix},set:function(e){C.defined("value",e),this._matrixDirty=this._matrixDirty||!M.equals(this._emitterModelMatrix,e),M.clone(e,this._emitterModelMatrix)}},startColor:{get:function(){return this._startColor},set:function(e){C.defined("value",e),Y.clone(e,this._startColor)}},endColor:{get:function(){return this._endColor},set:function(e){C.defined("value",e),Y.clone(e,this._endColor)}},startScale:{get:function(){return this._startScale},set:function(e){C.typeOf.number.greaterThanOrEquals("value",e,0),this._startScale=e}},endScale:{get:function(){return this._endScale},set:function(e){C.typeOf.number.greaterThanOrEquals("value",e,0),this._endScale=e}},emissionRate:{get:function(){return this._emissionRate},set:function(e){C.typeOf.number.greaterThanOrEquals("value",e,0),this._emissionRate=e,this._updateParticlePool=!0}},minimumSpeed:{get:function(){return this._minimumSpeed},set:function(e){C.typeOf.number.greaterThanOrEquals("value",e,0),this._minimumSpeed=e}},maximumSpeed:{get:function(){return this._maximumSpeed},set:function(e){C.typeOf.number.greaterThanOrEquals("value",e,0),this._maximumSpeed=e}},minimumParticleLife:{get:function(){return this._minimumParticleLife},set:function(e){C.typeOf.number.greaterThanOrEquals("value",e,0),this._minimumParticleLife=e}},maximumParticleLife:{get:function(){return this._maximumParticleLife},set:function(e){C.typeOf.number.greaterThanOrEquals("value",e,0),this._maximumParticleLife=e,this._updateParticlePool=!0}},minimumMass:{get:function(){return this._minimumMass},set:function(e){C.typeOf.number.greaterThanOrEquals("value",e,0),this._minimumMass=e}},maximumMass:{get:function(){return this._maximumMass},set:function(e){C.typeOf.number.greaterThanOrEquals("value",e,0),this._maximumMass=e}},minimumImageSize:{get:function(){return this._minimumImageSize},set:function(e){C.typeOf.object("value",e),C.typeOf.number.greaterThanOrEquals("value.x",e.x,0),C.typeOf.number.greaterThanOrEquals("value.y",e.y,0),this._minimumImageSize=e}},maximumImageSize:{get:function(){return this._maximumImageSize},set:function(e){C.typeOf.object("value",e),C.typeOf.number.greaterThanOrEquals("value.x",e.x,0),C.typeOf.number.greaterThanOrEquals("value.y",e.y,0),this._maximumImageSize=e}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){C.typeOf.bool("value",e),this._sizeInMeters=e}},lifetime:{get:function(){return this._lifetime},set:function(e){C.typeOf.number.greaterThanOrEquals("value",e,0),this._lifetime=e}},complete:{get:function(){return this._complete}},isComplete:{get:function(){return this._isComplete}}});function $Ct(e){let t=e._emissionRate,n=e._maximumParticleLife,i=0,o=e._bursts;if(c(o)){let f=o.length;for(let p=0;p<f;++p)i+=o[p].maximum}let r=e._billboardCollection,s=e.image,a=Math.ceil(t*n+i),l=e._particles,d=e._particlePool,u=Math.max(a-l.length-d.length,0);for(let f=0;f<u;++f){let p=new DL;p._billboard=r.add({image:s,show:!1}),d.push(p)}e._particleEstimate=a}function e1t(e){let t=e._particlePool.pop();return c(t)||(t=new DL),t}function t1t(e,t){e._particlePool.push(t)}function n1t(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 l=a;l<r;++l){let d=n[l];i.remove(d._billboard)}n.length=a}function i1t(e){c(e._billboard)&&(e._billboard.show=!1)}function VCe(e,t){let n=t._billboard;c(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=w.lerp(t.startColor.red,t.endColor.red,t.normalizedAge),o=w.lerp(t.startColor.green,t.endColor.green,t.normalizedAge),r=w.lerp(t.startColor.blue,t.endColor.blue,t.normalizedAge),s=w.lerp(t.startColor.alpha,t.endColor.alpha,t.normalizedAge);n.color=new Y(i,o,r,s),n.scale=w.lerp(t.startScale,t.endScale,t.normalizedAge)}function o1t(e,t){t.startColor=Y.clone(e._startColor,t.startColor),t.endColor=Y.clone(e._endColor,t.endColor),t.startScale=e._startScale,t.endScale=e._endScale,t.image=e.image,t.life=w.randomBetween(e._minimumParticleLife,e._maximumParticleLife),t.mass=w.randomBetween(e._minimumMass,e._maximumMass),t.imageSize.x=w.randomBetween(e._minimumImageSize.x,e._maximumImageSize.x),t.imageSize.y=w.randomBetween(e._minimumImageSize.y,e._maximumImageSize.y),t._normalizedAge=0,t._age=0;let n=w.randomBetween(e._minimumSpeed,e._maximumSpeed);m.multiplyByScalar(t.velocity,n,t.velocity),e._particles.push(t)}function r1t(e,t){if(e._isComplete)return 0;t=w.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),c(e.bursts)){let o=e.bursts.length;for(let r=0;r<o;r++){let s=e.bursts[r],a=e._currentTime;c(s)&&!s._complete&&a>s.time&&(i+=w.randomBetween(s.minimum,s.maximum),s._complete=!0)}}return i}var SB=new m;oM.prototype.update=function(e){if(!this.show)return;c(this._billboardCollection)||(this._billboardCollection=new Gd),this._updateParticlePool&&($Ct(this),this._updateParticlePool=!1);let t=0;this._previousTime&&(t=ee.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)?VCe(this,s):(i1t(s),t1t(this,s),n[r]=n[a-1],--r,--a);n.length=a;let l=r1t(this,t);if(l>0&&c(i)){this._matrixDirty&&(this._combinedMatrix=M.multiply(this.modelMatrix,this.emitterModelMatrix,this._combinedMatrix),this._matrixDirty=!1);let d=this._combinedMatrix;for(r=0;r<l;r++)s=e1t(this),this._emitter.emit(s),m.add(s.position,s.velocity,SB),M.multiplyByPoint(d,SB,SB),s.position=M.multiplyByPoint(d,s.position,s.position),m.subtract(SB,s.position,s.velocity),m.normalize(s.velocity,s.velocity),o1t(this,s),VCe(this,s)}if(this._billboardCollection.update(e),this._previousTime=ee.clone(e.time,this._previousTime),this._currentTime+=t,this._lifetime!==Number.MAX_VALUE&&this._currentTime>this._lifetime)if(this.loop){if(this._currentTime=w.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&&n1t(this)};oM.prototype.isDestroyed=function(){return!1};oM.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),he(this)};var R6=oM;var aho=_(T(),1);function lu(){L.throwInstantiationError()}lu.computeDefaultLevelZeroMaximumGeometricError=function(e){return e.ellipsoid.maximumRadius*2*Math.PI*.25/(65*e.getNumberOfXTilesAtLevel(0))};Object.defineProperties(lu.prototype,{quadtree:{get:L.throwInstantiationError,set:L.throwInstantiationError},tilingScheme:{get:L.throwInstantiationError},errorEvent:{get:L.throwInstantiationError}});lu.prototype.update=L.throwInstantiationError;lu.prototype.beginUpdate=L.throwInstantiationError;lu.prototype.endUpdate=L.throwInstantiationError;lu.prototype.getLevelMaximumGeometricError=L.throwInstantiationError;lu.prototype.loadTile=L.throwInstantiationError;lu.prototype.computeTileVisibility=L.throwInstantiationError;lu.prototype.showTileThisFrame=L.throwInstantiationError;lu.prototype.computeDistanceToTile=L.throwInstantiationError;lu.prototype.isDestroyed=L.throwInstantiationError;lu.prototype.destroy=L.throwInstantiationError;var G6=lu;var mho=_(T(),1);function E6(e){e=e??1,C.typeOf.number.greaterThan("radius",e,0),this._radius=e??1}Object.defineProperties(E6.prototype,{radius:{get:function(){return this._radius},set:function(e){C.typeOf.number.greaterThan("value",e,0),this._radius=e}}});E6.prototype.emit=function(e){let t=w.randomBetween(0,w.TWO_PI),n=w.randomBetween(0,w.PI),i=w.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 X6=E6;var pho=_(T(),1);function rM(){}rM.prototype.evaluate=function(e,t){L.throwInstantiationError()};rM.prototype.evaluateColor=function(e,t){L.throwInstantiationError()};rM.prototype.getShaderFunction=function(e,t,n,i){L.throwInstantiationError()};rM.prototype.getVariables=function(){L.throwInstantiationError()};var I6=rM;var Tho=_(T(),1);function BL(e){C.typeOf.object("terrainProviderPromise",e),this._ready=!1,this._provider=void 0,this._errorEvent=new ye,this._readyEvent=new ye,a1t(this,e)}Object.defineProperties(BL.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}}});BL.fromWorldTerrain=function(e){return new BL(TS(e))};BL.fromWorldBathymetry=function(e){return new BL(I9(e))};function s1t(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){s1t(e._errorEvent,i)}}var sM=BL;var Vho=_(T(),1);function YL(){}YL.prototype.boundingVolume=void 0;YL.prototype.boundingSphere=void 0;YL.prototype.distanceToCamera=function(e){L.throwInstantiationError()};YL.prototype.intersectPlane=function(e){L.throwInstantiationError()};YL.prototype.createDebugVolume=function(e){L.throwInstantiationError()};var W6=YL;var Iho=_(T(),1);function aM(e){e=e??z.EMPTY_OBJECT,this._tilingScheme=c(e.tilingScheme)?e.tilingScheme:new Ki({ellipsoid:e.ellipsoid}),this._color=e.color??Y.YELLOW,this._errorEvent=new ye,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(aM.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}}});aM.prototype.getTileCredits=function(e,t,n){};aM.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)};aM.prototype.pickFeatures=function(e,t,n,i,o){};var cM=aM;var Pho=_(T(),1);function w6(e){L.throwInstantiationError()}w6.prototype.isReady=L.throwInstantiationError;w6.prototype.shouldDiscardImage=L.throwInstantiationError;var P6=w6;var Fho=_(T(),1),c1t={START:0,LOADING:1,READY:2,UPSAMPLED_ONLY:3},v6=Object.freeze(c1t);var Jho=_(T(),1);function CB(e,t){this.show=!0,c(e)||(e=new je),this.rectangle=je.clone(e),c(t)||(t=zi.fromType(zi.ColorType,{color:new Y(1,1,1,1)})),this.material=t,this._material=void 0,this._overlayCommand=void 0,this._rs=void 0}CB.prototype.update=function(e){if(!this.show)return;if(!c(this.material))throw new L("this.material must be defined.");if(!c(this.rectangle))throw new L("this.rectangle must be defined.");let t=this._rs;if((!c(t)||!je.equals(t.viewport,this.rectangle))&&(this._rs=Oe.fromCache({blending:un.ALPHA_BLEND,viewport:this.rectangle})),e.passes.render){let i=e.context;if(this._material!==this.material||!c(this._overlayCommand)){this._material=this.material,c(this._overlayCommand)&&this._overlayCommand.shaderProgram.destroy();let o=new Be({sources:[this._material.shaderSource,Qv]});this._overlayCommand=i.createViewportQuadCommand(o,{renderState:this._rs,uniformMap:this._material._uniforms,owner:this}),this._overlayCommand.pass=Xe.OVERLAY}this._material.update(i),this._overlayCommand.renderState=this._rs,this._overlayCommand.uniformMap=this._material._uniforms,e.commandList.push(this._overlayCommand)}};CB.prototype.isDestroyed=function(){return!1};CB.prototype.destroy=function(){return c(this._overlayCommand)&&(this._overlayCommand.shaderProgram=this._overlayCommand.shaderProgram&&this._overlayCommand.shaderProgram.destroy()),he(this)};var F6=CB;var qho=_(T(),1);function A6(){L.throwInstantiationError()}Object.defineProperties(A6.prototype,{globalTransform:{get:L.throwInstantiationError},shapeTransform:{get:L.throwInstantiationError},shape:{get:L.throwInstantiationError},minBounds:{get:L.throwInstantiationError},maxBounds:{get:L.throwInstantiationError},dimensions:{get:L.throwInstantiationError},paddingBefore:{get:L.throwInstantiationError},paddingAfter:{get:L.throwInstantiationError},names:{get:L.throwInstantiationError},types:{get:L.throwInstantiationError},componentTypes:{get:L.throwInstantiationError},minimumValues:{get:L.throwInstantiationError},maximumValues:{get:L.throwInstantiationError},maximumTileCount:{get:L.throwInstantiationError},availableLevels:{get:L.throwInstantiationError},keyframeCount:{get:L.throwInstantiationError},timeIntervalCollection:{get:L.throwInstantiationError}});A6.prototype.requestData=function(e){L.throwInstantiationError()};var M6=A6;var tpo=_(T(),1);function PS(){L.throwInstantiationError()}Object.defineProperties(PS.prototype,{orientedBoundingBox:{get:L.throwInstantiationError},boundingSphere:{get:L.throwInstantiationError},boundTransform:{get:L.throwInstantiationError},shapeTransform:{get:L.throwInstantiationError},shaderUniforms:{get:L.throwInstantiationError},shaderDefines:{get:L.throwInstantiationError},shaderMaximumIntersectionsLength:{get:L.throwInstantiationError}});PS.prototype.update=L.throwInstantiationError;PS.prototype.computeOrientedBoundingBoxForTile=L.throwInstantiationError;PS.prototype.computeOrientedBoundingBoxForSample=L.throwInstantiationError;PS.DefaultMinBounds=L.throwInstantiationError;PS.DefaultMaxBounds=L.throwInstantiationError;var N6=PS;var ipo=_(T(),1),k6=`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 fpo=_(T(),1);function l1t(e){e=e??z.EMPTY_OBJECT;let t=c(e.typedArray),n=c(e.url);if(t===n)throw new L("exactly one of options.typedArray, options.url must be defined");if(t&&(!c(e.width)||!c(e.height)))throw new L("options.width and options.height are required when options.typedArray is defined");this.typedArray=e.typedArray,this.width=e.width,this.height=e.height,this.pixelFormat=e.pixelFormat??ke.RGBA,this.pixelDatatype=e.pixelDatatype??Ue.UNSIGNED_BYTE;let i=e.url;typeof i=="string"&&(i=Ge.createIfNeeded(i)),this.resource=i;let r=e.repeat??!0?xn.REPEAT:xn.CLAMP_TO_EDGE;this.sampler=new en({wrapS:r,wrapT:r,minificationFilter:e.minificationFilter,magnificationFilter:e.magnificationFilter,maximumAnisotropy:e.maximumAnisotropy})}var U6=l1t;var ppo=_(T(),1),d1t={FLOAT:"float",VEC2:"vec2",VEC3:"vec3",VEC4:"vec4",MAT2:"mat2",MAT3:"mat3",MAT4:"mat4"},O6=Object.freeze(d1t);var ypo=_(T(),1),u1t={SIGX:"SIGX",SIGY:"SIGY",SIGZ:"SIGZ",VARX:"VARX",VARY:"VARY",VARZ:"VARZ",SIGR:"VARZ"},D6=Object.freeze(u1t);var _po=_(T(),1);function m1t(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: ${qh(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 B6=m1t;globalThis.CESIUM_VERSION="1.129";var lMo=_(T(),1);var v2o=_(T(),1);var I2o=_(T(),1);var S2o=_(T(),1),lM;typeof ko<"u"&&(lM=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 l(b,G){return b===null||typeof b in g?b===G:!1}function d(b,G){var X;return function(){X||(X=h.a.setTimeout(function(){X=e,b()},G))}}function u(b,G){var X;return function(){clearTimeout(X),X=h.a.setTimeout(b,G)}}function f(b,G){G&&G!=="change"?G==="beforeChange"?this.pc(b):this.gb(b,G):this.qc(b)}function p(b,G){G!==null&&G.s&&G.s()}function y(b,G){var X=this.qd,W=X[R];W.ra||(this.Qb&&this.mb[G]?(X.uc(G,b,this.mb[G]),this.mb[G]=null,--this.Qb):W.I[G]||X.uc(G,b,W.J?{da:b}:X.$c(b)),b.Ja&&b.gd())}var h=typeof s<"u"?s:{};h.b=function(b,G){for(var X=b.split("."),W=h,A=0;A<X.length-1;A++)W=W[X[A]];W[X[X.length-1]]=G},h.L=function(b,G,X){b[G]=X},h.version="3.5.1",h.b("version",h.version),h.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1},h.a=function(){function b(j,$){for(var ne in j)A.call(j,ne)&&$(ne,j[ne])}function G(j,$){if($)for(var ne in $)A.call($,ne)&&(j[ne]=$[ne]);return j}function X(j,$){return j.__proto__=$,j}function W(j,$,ne,be){var Ce=j[$].match(Q)||[];h.a.D(ne.match(Q),function(me){h.a.Na(Ce,me,be)}),j[$]=Ce.join(" ")}var A=Object.prototype.hasOwnProperty,k={__proto__:[]}instanceof Array,B=typeof Symbol=="function",O={},H={};O[i&&/Firefox\/2/i.test(i.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"],O.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" "),b(O,function(j,$){if($.length)for(var ne=0,be=$.length;ne<be;ne++)H[$[ne]]=j});var U={propertychange:!0},K=n&&function(){for(var j=3,$=n.createElement("div"),ne=$.getElementsByTagName("i");$.innerHTML="<!--[if gt IE "+ ++j+"]><i></i><![endif]-->",ne[0];);return 4<j?j:e}(),Q=/\S+/g,ie;return{Jc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],D:function(j,$,ne){for(var be=0,Ce=j.length;be<Ce;be++)$.call(ne,j[be],be,j)},A:typeof Array.prototype.indexOf=="function"?function(j,$){return Array.prototype.indexOf.call(j,$)}:function(j,$){for(var ne=0,be=j.length;ne<be;ne++)if(j[ne]===$)return ne;return-1},Lb:function(j,$,ne){for(var be=0,Ce=j.length;be<Ce;be++)if($.call(ne,j[be],be,j))return j[be];return e},Pa:function(j,$){var ne=h.a.A(j,$);0<ne?j.splice(ne,1):ne===0&&j.shift()},wc:function(j){var $=[];return j&&h.a.D(j,function(ne){0>h.a.A($,ne)&&$.push(ne)}),$},Mb:function(j,$,ne){var be=[];if(j)for(var Ce=0,me=j.length;Ce<me;Ce++)be.push($.call(ne,j[Ce],Ce));return be},jb:function(j,$,ne){var be=[];if(j)for(var Ce=0,me=j.length;Ce<me;Ce++)$.call(ne,j[Ce],Ce)&&be.push(j[Ce]);return be},Nb:function(j,$){if($ instanceof Array)j.push.apply(j,$);else for(var ne=0,be=$.length;ne<be;ne++)j.push($[ne]);return j},Na:function(j,$,ne){var be=h.a.A(h.a.bc(j),$);0>be?ne&&j.push($):ne||j.splice(be,1)},Ba:k,extend:G,setPrototypeOf:X,Ab:k?X:G,P:b,Ga:function(j,$,ne){if(!j)return j;var be={},Ce;for(Ce in j)A.call(j,Ce)&&(be[Ce]=$.call(ne,j[Ce],Ce,j));return be},Tb:function(j){for(;j.firstChild;)h.removeNode(j.firstChild)},Yb:function(j){j=h.a.la(j);for(var $=(j[0]&&j[0].ownerDocument||n).createElement("div"),ne=0,be=j.length;ne<be;ne++)$.appendChild(h.oa(j[ne]));return $},Ca:function(j,$){for(var ne=0,be=j.length,Ce=[];ne<be;ne++){var me=j[ne].cloneNode(!0);Ce.push($?h.oa(me):me)}return Ce},va:function(j,$){if(h.a.Tb(j),$)for(var ne=0,be=$.length;ne<be;ne++)j.appendChild($[ne])},Xc:function(j,$){var ne=j.nodeType?[j]:j;if(0<ne.length){for(var be=ne[0],Ce=be.parentNode,me=0,_e=$.length;me<_e;me++)Ce.insertBefore($[me],be);for(me=0,_e=ne.length;me<_e;me++)h.removeNode(ne[me])}},Ua:function(j,$){if(j.length){for($=$.nodeType===8&&$.parentNode||$;j.length&&j[0].parentNode!==$;)j.splice(0,1);for(;1<j.length&&j[j.length-1].parentNode!==$;)j.length--;if(1<j.length){var ne=j[0],be=j[j.length-1];for(j.length=0;ne!==be;)j.push(ne),ne=ne.nextSibling;j.push(be)}}return j},Zc:function(j,$){7>K?j.setAttribute("selected",$):j.selected=$},Db:function(j){return j===null||j===e?"":j.trim?j.trim():j.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Ud:function(j,$){return j=j||"",$.length>j.length?!1:j.substring(0,$.length)===$},vd:function(j,$){if(j===$)return!0;if(j.nodeType===11)return!1;if($.contains)return $.contains(j.nodeType!==1?j.parentNode:j);if($.compareDocumentPosition)return($.compareDocumentPosition(j)&16)==16;for(;j&&j!=$;)j=j.parentNode;return!!j},Sb:function(j){return h.a.vd(j,j.ownerDocument.documentElement)},kd:function(j){return!!h.a.Lb(j,h.a.Sb)},R:function(j){return j&&j.tagName&&j.tagName.toLowerCase()},Ac:function(j){return h.onError?function(){try{return j.apply(this,arguments)}catch($){throw h.onError&&h.onError($),$}}:j},setTimeout:function(j,$){return setTimeout(h.a.Ac(j),$)},Gc:function(j){setTimeout(function(){throw h.onError&&h.onError(j),j},0)},B:function(j,$,ne){var be=h.a.Ac(ne);if(ne=U[$],h.options.useOnlyNativeEvents||ne||!o)if(ne||typeof j.addEventListener!="function")if(typeof j.attachEvent<"u"){var Ce=function(_e){be.call(j,_e)},me="on"+$;j.attachEvent(me,Ce),h.a.K.za(j,function(){j.detachEvent(me,Ce)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else j.addEventListener($,be,!1);else ie||(ie=typeof o(j).on=="function"?"on":"bind"),o(j)[ie]($,be)},Fb:function(j,$){if(!j||!j.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var ne;if(h.a.R(j)==="input"&&j.type&&$.toLowerCase()=="click"?(ne=j.type,ne=ne=="checkbox"||ne=="radio"):ne=!1,h.options.useOnlyNativeEvents||!o||ne)if(typeof n.createEvent=="function")if(typeof j.dispatchEvent=="function")ne=n.createEvent(H[$]||"HTMLEvents"),ne.initEvent($,!0,!0,t,0,0,0,0,0,!1,!1,!1,!1,0,j),j.dispatchEvent(ne);else throw Error("The supplied element doesn't support dispatchEvent");else if(ne&&j.click)j.click();else if(typeof j.fireEvent<"u")j.fireEvent("on"+$);else throw Error("Browser doesn't support triggering events");else o(j).trigger($)},f:function(j){return h.O(j)?j():j},bc:function(j){return h.O(j)?j.v():j},Eb:function(j,$,ne){var be;$&&(typeof j.classList=="object"?(be=j.classList[ne?"add":"remove"],h.a.D($.match(Q),function(Ce){be.call(j.classList,Ce)})):typeof j.className.baseVal=="string"?W(j.className,"baseVal",$,ne):W(j,"className",$,ne))},Bb:function(j,$){var ne=h.a.f($);(ne===null||ne===e)&&(ne="");var be=h.h.firstChild(j);!be||be.nodeType!=3||h.h.nextSibling(be)?h.h.va(j,[j.ownerDocument.createTextNode(ne)]):be.data=ne,h.a.Ad(j)},Yc:function(j,$){if(j.name=$,7>=K)try{var ne=j.name.replace(/[&<>'"]/g,function(be){return"&#"+be.charCodeAt(0)+";"});j.mergeAttributes(n.createElement("<input name='"+ne+"'/>"),!1)}catch{}},Ad:function(j){9<=K&&(j=j.nodeType==1?j:j.parentNode,j.style&&(j.style.zoom=j.style.zoom))},wd:function(j){if(K){var $=j.style.width;j.style.width=0,j.style.width=$}},Pd:function(j,$){j=h.a.f(j),$=h.a.f($);for(var ne=[],be=j;be<=$;be++)ne.push(be);return ne},la:function(j){for(var $=[],ne=0,be=j.length;ne<be;ne++)$.push(j[ne]);return $},Da:function(j){return B?Symbol(j):j},Zd:K===6,$d:K===7,W:K,Lc:function(j,$){for(var ne=h.a.la(j.getElementsByTagName("input")).concat(h.a.la(j.getElementsByTagName("textarea"))),be=typeof $=="string"?function(_e){return _e.name===$}:function(_e){return $.test(_e.name)},Ce=[],me=ne.length-1;0<=me;me--)be(ne[me])&&Ce.push(ne[me]);return Ce},Nd:function(j){return typeof j=="string"&&(j=h.a.Db(j))?r&&r.parse?r.parse(j):new Function("return "+j)():null},hc:function(j,$,ne){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(h.a.f(j),$,ne)},Od:function(j,$,ne){ne=ne||{};var be=ne.params||{},Ce=ne.includeFields||this.Jc,me=j;if(typeof j=="object"&&h.a.R(j)==="form")for(var me=j.action,_e=Ce.length-1;0<=_e;_e--)for(var Ve=h.a.Lc(j,Ce[_e]),Ie=Ve.length-1;0<=Ie;Ie--)be[Ve[Ie].name]=Ve[Ie].value;$=h.a.f($);var Ze=n.createElement("form");Ze.style.display="none",Ze.action=me,Ze.method="post";for(var De in $)j=n.createElement("input"),j.type="hidden",j.name=De,j.value=h.a.hc(h.a.f($[De])),Ze.appendChild(j);b(be,function(Ke,rt){var Xt=n.createElement("input");Xt.type="hidden",Xt.name=Ke,Xt.value=rt,Ze.appendChild(Xt)}),n.body.appendChild(Ze),ne.submitter?ne.submitter(Ze):Ze.submit(),setTimeout(function(){Ze.parentNode.removeChild(Ze)},0)}}}(),h.b("utils",h.a),h.b("utils.arrayForEach",h.a.D),h.b("utils.arrayFirst",h.a.Lb),h.b("utils.arrayFilter",h.a.jb),h.b("utils.arrayGetDistinctValues",h.a.wc),h.b("utils.arrayIndexOf",h.a.A),h.b("utils.arrayMap",h.a.Mb),h.b("utils.arrayPushAll",h.a.Nb),h.b("utils.arrayRemoveItem",h.a.Pa),h.b("utils.cloneNodes",h.a.Ca),h.b("utils.createSymbolOrString",h.a.Da),h.b("utils.extend",h.a.extend),h.b("utils.fieldsIncludedWithJsonPost",h.a.Jc),h.b("utils.getFormFields",h.a.Lc),h.b("utils.objectMap",h.a.Ga),h.b("utils.peekObservable",h.a.bc),h.b("utils.postJson",h.a.Od),h.b("utils.parseJson",h.a.Nd),h.b("utils.registerEventHandler",h.a.B),h.b("utils.stringifyJson",h.a.hc),h.b("utils.range",h.a.Pd),h.b("utils.toggleDomNodeCssClass",h.a.Eb),h.b("utils.triggerEvent",h.a.Fb),h.b("utils.unwrapObservable",h.a.f),h.b("utils.objectForEach",h.a.P),h.b("utils.addOrRemoveItem",h.a.Na),h.b("utils.setTextContent",h.a.Bb),h.b("unwrap",h.a.f),Function.prototype.bind||(Function.prototype.bind=function(b){var G=this;if(arguments.length===1)return function(){return G.apply(b,arguments)};var X=Array.prototype.slice.call(arguments,1);return function(){var W=X.slice(0);return W.push.apply(W,arguments),G.apply(b,W)}}),h.a.g=new function(){var b=0,G="__ko__"+new Date().getTime(),X={},W,A;return h.a.W?(W=function(k,B){var O=k[G];if(!O||O==="null"||!X[O]){if(!B)return e;O=k[G]="ko"+b++,X[O]={}}return X[O]},A=function(k){var B=k[G];return B?(delete X[B],k[G]=null,!0):!1}):(W=function(k,B){var O=k[G];return!O&&B&&(O=k[G]={}),O},A=function(k){return k[G]?(delete k[G],!0):!1}),{get:function(k,B){var O=W(k,!1);return O&&O[B]},set:function(k,B,O){(k=W(k,O!==e))&&(k[B]=O)},Ub:function(k,B,O){return k=W(k,!0),k[B]||(k[B]=O)},clear:A,Z:function(){return b+++G}}},h.b("utils.domData",h.a.g),h.b("utils.domData.clear",h.a.g.clear),h.a.K=new function(){function b(B,O){var H=h.a.g.get(B,W);return H===e&&O&&(H=[],h.a.g.set(B,W,H)),H}function G(B){var O=b(B,!1);if(O)for(var O=O.slice(0),H=0;H<O.length;H++)O[H](B);h.a.g.clear(B),h.a.K.cleanExternalData(B),k[B.nodeType]&&X(B.childNodes,!0)}function X(B,O){for(var H=[],U,K=0;K<B.length;K++)if((!O||B[K].nodeType===8)&&(G(H[H.length]=U=B[K]),B[K]!==U))for(;K--&&h.a.A(H,B[K])==-1;);}var W=h.a.g.Z(),A={1:!0,8:!0,9:!0},k={1:!0,9:!0};return{za:function(B,O){if(typeof O!="function")throw Error("Callback must be a function");b(B,!0).push(O)},yb:function(B,O){var H=b(B,!1);H&&(h.a.Pa(H,O),H.length==0&&h.a.g.set(B,W,e))},oa:function(B){return h.u.G(function(){A[B.nodeType]&&(G(B),k[B.nodeType]&&X(B.getElementsByTagName("*")))}),B},removeNode:function(B){h.oa(B),B.parentNode&&B.parentNode.removeChild(B)},cleanExternalData:function(B){o&&typeof o.cleanData=="function"&&o.cleanData([B])}}},h.oa=h.a.K.oa,h.removeNode=h.a.K.removeNode,h.b("cleanNode",h.oa),h.b("removeNode",h.removeNode),h.b("utils.domNodeDisposal",h.a.K),h.b("utils.domNodeDisposal.addDisposeCallback",h.a.K.za),h.b("utils.domNodeDisposal.removeDisposeCallback",h.a.K.yb),function(){var b=[0,"",""],G=[1,"<table>","</table>"],X=[3,"<table><tbody><tr>","</tr></tbody></table>"],W=[1,"<select multiple='multiple'>","</select>"],A={thead:G,tbody:G,tfoot:G,tr:[2,"<table><tbody>","</tbody></table>"],td:X,th:X,option:W,optgroup:W},k=8>=h.a.W;h.a.ua=function(B,O){var H;if(o){if(o.parseHTML)H=o.parseHTML(B,O)||[];else if((H=o.clean([B],O))&&H[0]){for(var U=H[0];U.parentNode&&U.parentNode.nodeType!==11;)U=U.parentNode;U.parentNode&&U.parentNode.removeChild(U)}}else{(H=O)||(H=n);var U=H.parentWindow||H.defaultView||t,K=h.a.Db(B).toLowerCase(),Q=H.createElement("div"),ie;for(ie=(K=K.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&A[K[1]]||b,K=ie[0],ie="ignored<div>"+ie[1]+B+ie[2]+"</div>",typeof U.innerShiv=="function"?Q.appendChild(U.innerShiv(ie)):(k&&H.body.appendChild(Q),Q.innerHTML=ie,k&&Q.parentNode.removeChild(Q));K--;)Q=Q.lastChild;H=h.a.la(Q.lastChild.childNodes)}return H},h.a.Md=function(B,O){var H=h.a.ua(B,O);return H.length&&H[0].parentElement||h.a.Yb(H)},h.a.fc=function(B,O){if(h.a.Tb(B),O=h.a.f(O),O!==null&&O!==e)if(typeof O!="string"&&(O=O.toString()),o)o(B).html(O);else for(var H=h.a.ua(O,B.ownerDocument),U=0;U<H.length;U++)B.appendChild(H[U])}}(),h.b("utils.parseHtmlFragment",h.a.ua),h.b("utils.setHtml",h.a.fc),h.aa=function(){function b(X,W){if(X){if(X.nodeType==8){var A=h.aa.Uc(X.nodeValue);A!=null&&W.push({ud:X,Kd:A})}else if(X.nodeType==1)for(var A=0,k=X.childNodes,B=k.length;A<B;A++)b(k[A],W)}}var G={};return{Xb:function(X){if(typeof X!="function")throw Error("You can only pass a function to ko.memoization.memoize()");var W=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);return G[W]=X,"<!--[ko_memo:"+W+"]-->"},bd:function(X,W){var A=G[X];if(A===e)throw Error("Couldn't find any memo with ID "+X+". Perhaps it's already been unmemoized.");try{return A.apply(null,W||[]),!0}finally{delete G[X]}},cd:function(X,W){var A=[];b(X,A);for(var k=0,B=A.length;k<B;k++){var O=A[k].ud,H=[O];W&&h.a.Nb(H,W),h.aa.bd(A[k].Kd,H),O.nodeValue="",O.parentNode&&O.parentNode.removeChild(O)}},Uc:function(X){return(X=X.match(/^\[ko_memo\:(.*?)\]$/))?X[1]:null}}}(),h.b("memoization",h.aa),h.b("memoization.memoize",h.aa.Xb),h.b("memoization.unmemoize",h.aa.bd),h.b("memoization.parseMemoText",h.aa.Uc),h.b("memoization.unmemoizeDomNodeAndDescendants",h.aa.cd),h.na=function(){function b(){if(A){for(var O=A,H=0,U;B<A;)if(U=W[B++]){if(B>O){if(5e3<=++H){B=A,h.a.Gc(Error("'Too much recursion' after processing "+H+" task groups."));break}O=A}try{U()}catch(K){h.a.Gc(K)}}}}function G(){b(),B=A=W.length=0}var X,W=[],A=0,k=1,B=0;return t.MutationObserver?X=function(O){var H=n.createElement("div");return new MutationObserver(O).observe(H,{attributes:!0}),function(){H.classList.toggle("foo")}}(G):X=n&&"onreadystatechange"in n.createElement("script")?function(O){var H=n.createElement("script");H.onreadystatechange=function(){H.onreadystatechange=null,n.documentElement.removeChild(H),H=null,O()},n.documentElement.appendChild(H)}:function(O){setTimeout(O,0)},{scheduler:X,zb:function(O){return A||h.na.scheduler(G),W[A++]=O,k++},cancel:function(O){O=O-(k-A),O>=B&&O<A&&(W[O]=null)},resetForTesting:function(){var O=A-B;return B=A=W.length=0,O},Sd:b}}(),h.b("tasks",h.na),h.b("tasks.schedule",h.na.zb),h.b("tasks.runEarly",h.na.Sd),h.Ta={throttle:function(b,G){b.throttleEvaluation=G;var X=null;return h.$({read:b,write:function(W){clearTimeout(X),X=h.a.setTimeout(function(){b(W)},G)}})},rateLimit:function(b,G){var X,W,A;typeof G=="number"?X=G:(X=G.timeout,W=G.method),b.Hb=!1,A=typeof W=="function"?W:W=="notifyWhenChangesStop"?u:d,b.ub(function(k){return A(k,X,G)})},deferred:function(b,G){if(G!==!0)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");b.Hb||(b.Hb=!0,b.ub(function(X){var W,A=!1;return function(){if(!A){h.na.cancel(W),W=h.na.zb(X);try{A=!0,b.notifySubscribers(e,"dirty")}finally{A=!1}}}}))},notify:function(b,G){b.equalityComparer=G=="always"?null:l}};var g={undefined:1,boolean:1,number:1,string:1};h.b("extenders",h.Ta),h.ic=function(b,G,X){this.da=b,this.lc=G,this.mc=X,this.Ib=!1,this.fb=this.Jb=null,h.L(this,"dispose",this.s),h.L(this,"disposeWhenNodeIsRemoved",this.l)},h.ic.prototype.s=function(){this.Ib||(this.fb&&h.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)},h.ic.prototype.l=function(b){this.Jb=b,h.a.K.za(b,this.fb=this.s.bind(this))},h.T=function(){h.a.Ab(this,x),x.qb(this)};var x={qb:function(b){b.U={change:[]},b.sc=1},subscribe:function(b,G,X){var W=this;X=X||"change";var A=new h.ic(W,G?b.bind(G):b,function(){h.a.Pa(W.U[X],A),W.hb&&W.hb(X)});return W.Qa&&W.Qa(X),W.U[X]||(W.U[X]=[]),W.U[X].push(A),A},notifySubscribers:function(b,G){if(G=G||"change",G==="change"&&this.Gb(),this.Wa(G)){var X=G==="change"&&this.ed||this.U[G].slice(0);try{h.u.xc();for(var W=0,A;A=X[W];++W)A.Ib||A.lc(b)}finally{h.u.end()}}},ob:function(){return this.sc},Dd:function(b){return this.ob()!==b},Gb:function(){++this.sc},ub:function(b){var G=this,X=h.O(G),W,A,k,B,O;G.gb||(G.gb=G.notifySubscribers,G.notifySubscribers=f);var H=b(function(){G.Ja=!1,X&&B===G&&(B=G.nc?G.nc():G());var U=A||O&&G.sb(k,B);O=A=W=!1,U&&G.gb(k=B)});G.qc=function(U,K){K&&G.Ja||(O=!K),G.ed=G.U.change.slice(0),G.Ja=W=!0,B=U,H()},G.pc=function(U){W||(k=U,G.gb(U,"beforeChange"))},G.rc=function(){O=!0},G.gd=function(){G.sb(k,G.v(!0))&&(A=!0)}},Wa:function(b){return this.U[b]&&this.U[b].length},Bd:function(b){if(b)return this.U[b]&&this.U[b].length||0;var G=0;return h.a.P(this.U,function(X,W){X!=="dirty"&&(G+=W.length)}),G},sb:function(b,G){return!this.equalityComparer||!this.equalityComparer(b,G)},toString:function(){return"[object Object]"},extend:function(b){var G=this;return b&&h.a.P(b,function(X,W){var A=h.Ta[X];typeof A=="function"&&(G=A(G,W)||G)}),G}};h.L(x,"init",x.qb),h.L(x,"subscribe",x.subscribe),h.L(x,"extend",x.extend),h.L(x,"getSubscriptionsCount",x.Bd),h.a.Ba&&h.a.setPrototypeOf(x,Function.prototype),h.T.fn=x,h.Qc=function(b){return b!=null&&typeof b.subscribe=="function"&&typeof b.notifySubscribers=="function"},h.b("subscribable",h.T),h.b("isSubscribable",h.Qc),h.S=h.u=function(){function b(k){X.push(W),W=k}function G(){W=X.pop()}var X=[],W,A=0;return{xc:b,end:G,cc:function(k){if(W){if(!h.Qc(k))throw Error("Only subscribable things can act as dependencies");W.od.call(W.pd,k,k.fd||(k.fd=++A))}},G:function(k,B,O){try{return b(),k.apply(B,O||[])}finally{G()}},qa:function(){if(W)return W.o.qa()},Va:function(){if(W)return W.o.Va()},Ya:function(){if(W)return W.Ya},o:function(){if(W)return W.o}}}(),h.b("computedContext",h.S),h.b("computedContext.getDependenciesCount",h.S.qa),h.b("computedContext.getDependencies",h.S.Va),h.b("computedContext.isInitial",h.S.Ya),h.b("computedContext.registerDependency",h.S.cc),h.b("ignoreDependencies",h.Yd=h.u.G);var S=h.a.Da("_latestValue");h.ta=function(b){function G(){return 0<arguments.length?(G.sb(G[S],arguments[0])&&(G.ya(),G[S]=arguments[0],G.xa()),this):(h.u.cc(G),G[S])}return G[S]=b,h.a.Ba||h.a.extend(G,h.T.fn),h.T.fn.qb(G),h.a.Ab(G,V),h.options.deferUpdates&&h.Ta.deferred(G,!0),G};var V={equalityComparer:l,v:function(){return this[S]},xa:function(){this.notifySubscribers(this[S],"spectate"),this.notifySubscribers(this[S])},ya:function(){this.notifySubscribers(this[S],"beforeChange")}};h.a.Ba&&h.a.setPrototypeOf(V,h.T.fn);var Z=h.ta.Ma="__ko_proto__";V[Z]=h.ta,h.O=function(b){if((b=typeof b=="function"&&b[Z])&&b!==V[Z]&&b!==h.o.fn[Z])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!b},h.Za=function(b){return typeof b=="function"&&(b[Z]===V[Z]||b[Z]===h.o.fn[Z]&&b.Nc)},h.b("observable",h.ta),h.b("isObservable",h.O),h.b("isWriteableObservable",h.Za),h.b("isWritableObservable",h.Za),h.b("observable.fn",V),h.L(V,"peek",V.v),h.L(V,"valueHasMutated",V.xa),h.L(V,"valueWillMutate",V.ya),h.Ha=function(b){if(b=b||[],typeof b!="object"||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");return b=h.ta(b),h.a.Ab(b,h.Ha.fn),b.extend({trackArrayChanges:!0})},h.Ha.fn={remove:function(b){for(var G=this.v(),X=[],W=typeof b!="function"||h.O(b)?function(B){return B===b}:b,A=0;A<G.length;A++){var k=G[A];if(W(k)){if(X.length===0&&this.ya(),G[A]!==k)throw Error("Array modified during remove; cannot remove item");X.push(k),G.splice(A,1),A--}}return X.length&&this.xa(),X},removeAll:function(b){if(b===e){var G=this.v(),X=G.slice(0);return this.ya(),G.splice(0,G.length),this.xa(),X}return b?this.remove(function(W){return 0<=h.a.A(b,W)}):[]},destroy:function(b){var G=this.v(),X=typeof b!="function"||h.O(b)?function(k){return k===b}:b;this.ya();for(var W=G.length-1;0<=W;W--){var A=G[W];X(A)&&(A._destroy=!0)}this.xa()},destroyAll:function(b){return b===e?this.destroy(function(){return!0}):b?this.destroy(function(G){return 0<=h.a.A(b,G)}):[]},indexOf:function(b){var G=this();return h.a.A(G,b)},replace:function(b,G){var X=this.indexOf(b);0<=X&&(this.ya(),this.v()[X]=G,this.xa())},sorted:function(b){var G=this().slice(0);return b?G.sort(b):G.sort()},reversed:function(){return this().slice(0).reverse()}},h.a.Ba&&h.a.setPrototypeOf(h.Ha.fn,h.ta.fn),h.a.D("pop push reverse shift sort splice unshift".split(" "),function(b){h.Ha.fn[b]=function(){var G=this.v();this.ya(),this.zc(G,b,arguments);var X=G[b].apply(G,arguments);return this.xa(),X===G?this:X}}),h.a.D(["slice"],function(b){h.Ha.fn[b]=function(){var G=this();return G[b].apply(G,arguments)}}),h.Pc=function(b){return h.O(b)&&typeof b.remove=="function"&&typeof b.push=="function"},h.b("observableArray",h.Ha),h.b("isObservableArray",h.Pc),h.Ta.trackArrayChanges=function(b,G){function X(){function Q(){if(O){var ie=[].concat(b.v()||[]),j;b.Wa("arrayChange")&&((!A||1<O)&&(A=h.a.Pb(H,ie,b.Ob)),j=A),H=ie,A=null,O=0,j&&j.length&&b.notifySubscribers(j,"arrayChange")}}W?Q():(W=!0,B=b.subscribe(function(){++O},null,"spectate"),H=[].concat(b.v()||[]),A=null,k=b.subscribe(Q))}if(b.Ob={},G&&typeof G=="object"&&h.a.extend(b.Ob,G),b.Ob.sparse=!0,!b.zc){var W=!1,A=null,k,B,O=0,H,U=b.Qa,K=b.hb;b.Qa=function(Q){U&&U.call(b,Q),Q==="arrayChange"&&X()},b.hb=function(Q){K&&K.call(b,Q),Q!=="arrayChange"||b.Wa("arrayChange")||(k&&k.s(),B&&B.s(),B=k=null,W=!1,H=e)},b.zc=function(Q,ie,j){function $(Ze,De,Ke){return ne[ne.length]={status:Ze,value:De,index:Ke}}if(W&&!O){var ne=[],be=Q.length,Ce=j.length,me=0;switch(ie){case"push":me=be;case"unshift":for(ie=0;ie<Ce;ie++)$("added",j[ie],me+ie);break;case"pop":me=be-1;case"shift":be&&$("deleted",Q[me],me);break;case"splice":ie=Math.min(Math.max(0,0>j[0]?be+j[0]:j[0]),be);for(var be=Ce===1?be:Math.min(ie+(j[1]||0),be),Ce=ie+Ce-2,me=Math.max(be,Ce),_e=[],Ve=[],Ie=2;ie<me;++ie,++Ie)ie<be&&Ve.push($("deleted",Q[ie],ie)),ie<Ce&&_e.push($("added",j[Ie],ie));h.a.Kc(Ve,_e);break;default:return}A=ne}}}};var R=h.a.Da("_state");h.o=h.$=function(b,G,X){function W(){if(0<arguments.length){if(typeof A=="function")A.apply(k.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 k.ra||h.u.cc(W),(k.ka||k.J&&W.Xa())&&W.ha(),k.X}if(typeof b=="object"?X=b:(X=X||{},b&&(X.read=b)),typeof X.read!="function")throw Error("Pass a function that returns the value of the ko.computed");var A=X.write,k={X:e,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:X.read,nb:G||X.owner,l:X.disposeWhenNodeIsRemoved||X.l||null,Sa:X.disposeWhen||X.Sa,Rb:null,I:{},V:0,Ic:null};return W[R]=k,W.Nc=typeof A=="function",h.a.Ba||h.a.extend(W,h.T.fn),h.T.fn.qb(W),h.a.Ab(W,E),X.pure?(k.wb=!0,k.J=!0,h.a.extend(W,I)):X.deferEvaluation&&h.a.extend(W,v),h.options.deferUpdates&&h.Ta.deferred(W,!0),k.l&&(k.jc=!0,k.l.nodeType||(k.l=null)),k.J||X.deferEvaluation||W.ha(),k.l&&W.ja()&&h.a.K.za(k.l,k.Rb=function(){W.s()}),W};var E={equalityComparer:l,qa:function(){return this[R].V},Va:function(){var b=[];return h.a.P(this[R].I,function(G,X){b[X.Ka]=X.da}),b},Vb:function(b){if(!this[R].V)return!1;var G=this.Va();return h.a.A(G,b)!==-1?!0:!!h.a.Lb(G,function(X){return X.Vb&&X.Vb(b)})},uc:function(b,G,X){if(this[R].wb&&G===this)throw Error("A 'pure' computed must not be called recursively");this[R].I[b]=X,X.Ka=this[R].V++,X.La=G.ob()},Xa:function(){var b,G,X=this[R].I;for(b in X)if(Object.prototype.hasOwnProperty.call(X,b)&&(G=X[b],this.Ia&&G.da.Ja||G.da.Dd(G.La)))return!0},Jd:function(){this.Ia&&!this[R].rb&&this.Ia(!1)},ja:function(){var b=this[R];return b.ka||0<b.V},Rd:function(){this.Ja?this[R].ka&&(this[R].sa=!0):this.Hc()},$c:function(b){if(b.Hb){var G=b.subscribe(this.Jd,this,"dirty"),X=b.subscribe(this.Rd,this);return{da:b,s:function(){G.s(),X.s()}}}return b.subscribe(this.Hc,this)},Hc:function(){var b=this,G=b.throttleEvaluation;G&&0<=G?(clearTimeout(this[R].Ic),this[R].Ic=h.a.setTimeout(function(){b.ha(!0)},G)):b.Ia?b.Ia(!0):b.ha(!0)},ha:function(b){var G=this[R],X=G.Sa,W=!1;if(!G.rb&&!G.ra){if(G.l&&!h.a.Sb(G.l)||X&&X()){if(!G.jc){this.s();return}}else G.jc=!1;G.rb=!0;try{W=this.zd(b)}finally{G.rb=!1}return W}},zd:function(b){var G=this[R],W=!1,X=G.wb?e:!G.V,W={qd:this,mb:G.I,Qb:G.V};h.u.xc({pd:W,od:y,o:this,Ya:X}),G.I={},G.V=0;var A=this.yd(G,W);return G.V?W=this.sb(G.X,A):(this.s(),W=!0),W&&(G.J?this.Gb():this.notifySubscribers(G.X,"beforeChange"),G.X=A,this.notifySubscribers(G.X,"spectate"),!G.J&&b&&this.notifySubscribers(G.X),this.rc&&this.rc()),X&&this.notifySubscribers(G.X,"awake"),W},yd:function(b,G){try{var X=b.Wc;return b.nb?X.call(b.nb):X()}finally{h.u.end(),G.Qb&&!b.J&&h.a.P(G.mb,p),b.sa=b.ka=!1}},v:function(b){var G=this[R];return(G.ka&&(b||!G.V)||G.J&&this.Xa())&&this.ha(),G.X},ub:function(b){h.T.fn.ub.call(this,b),this.nc=function(){return this[R].J||(this[R].sa?this.ha():this[R].ka=!1),this[R].X},this.Ia=function(G){this.pc(this[R].X),this[R].ka=!0,G&&(this[R].sa=!0),this.qc(this,!G)}},s:function(){var b=this[R];!b.J&&b.I&&h.a.P(b.I,function(G,X){X.s&&X.s()}),b.l&&b.Rb&&h.a.K.yb(b.l,b.Rb),b.I=e,b.V=0,b.ra=!0,b.sa=!1,b.ka=!1,b.J=!1,b.l=e,b.Sa=e,b.Wc=e,this.Nc||(b.nb=e)}},I={Qa:function(b){var G=this,X=G[R];if(!X.ra&&X.J&&b=="change"){if(X.J=!1,X.sa||G.Xa())X.I=null,X.V=0,G.ha()&&G.Gb();else{var W=[];h.a.P(X.I,function(A,k){W[k.Ka]=A}),h.a.D(W,function(A,k){var B=X.I[A],O=G.$c(B.da);O.Ka=k,O.La=B.La,X.I[A]=O}),G.Xa()&&G.ha()&&G.Gb()}X.ra||G.notifySubscribers(X.X,"awake")}},hb:function(b){var G=this[R];G.ra||b!="change"||this.Wa("change")||(h.a.P(G.I,function(X,W){W.s&&(G.I[X]={da:W.da,Ka:W.Ka,La:W.La},W.s())}),G.J=!0,this.notifySubscribers(e,"asleep"))},ob:function(){var b=this[R];return b.J&&(b.sa||this.Xa())&&this.ha(),h.T.fn.ob.call(this)}},v={Qa:function(b){b!="change"&&b!="beforeChange"||this.v()}};h.a.Ba&&h.a.setPrototypeOf(E,h.T.fn);var P=h.ta.Ma;E[P]=h.o,h.Oc=function(b){return typeof b=="function"&&b[P]===E[P]},h.Fd=function(b){return h.Oc(b)&&b[R]&&b[R].wb},h.b("computed",h.o),h.b("dependentObservable",h.o),h.b("isComputed",h.Oc),h.b("isPureComputed",h.Fd),h.b("computed.fn",E),h.L(E,"peek",E.v),h.L(E,"dispose",E.s),h.L(E,"isActive",E.ja),h.L(E,"getDependenciesCount",E.qa),h.L(E,"getDependencies",E.Va),h.xb=function(b,G){return typeof b=="function"?h.o(b,G,{pure:!0}):(b=h.a.extend({},b),b.pure=!0,h.o(b,G))},h.b("pureComputed",h.xb),function(){function b(W,A,k){if(k=k||new X,W=A(W),typeof W!="object"||W===null||W===e||W instanceof RegExp||W instanceof Date||W instanceof String||W instanceof Number||W instanceof Boolean)return W;var B=W instanceof Array?[]:{};return k.save(W,B),G(W,function(O){var H=A(W[O]);switch(typeof H){case"boolean":case"number":case"string":case"function":B[O]=H;break;case"object":case"undefined":var U=k.get(H);B[O]=U!==e?U:b(H,A,k)}}),B}function G(W,A){if(W instanceof Array){for(var k=0;k<W.length;k++)A(k);typeof W.toJSON=="function"&&A("toJSON")}else for(k in W)A(k)}function X(){this.keys=[],this.values=[]}h.ad=function(W){if(arguments.length==0)throw Error("When calling ko.toJS, pass the object you want to convert.");return b(W,function(A){for(var k=0;h.O(A)&&10>k;k++)A=A();return A})},h.toJSON=function(W,A,k){return W=h.ad(W),h.a.hc(W,A,k)},X.prototype={constructor:X,save:function(W,A){var k=h.a.A(this.keys,W);0<=k?this.values[k]=A:(this.keys.push(W),this.values.push(A))},get:function(W){return W=h.a.A(this.keys,W),0<=W?this.values[W]:e}}}(),h.b("toJS",h.ad),h.b("toJSON",h.toJSON),h.Wd=function(b,G,X){function W(A){var k=h.xb(b,X).extend({ma:"always"}),B=k.subscribe(function(O){O&&(B.s(),A(O))});return k.notifySubscribers(k.v()),B}return typeof Promise!="function"||G?W(G.bind(X)):new Promise(W)},h.b("when",h.Wd),function(){h.w={M:function(b){switch(h.a.R(b)){case"option":return b.__ko__hasDomDataOptionValue__===!0?h.a.g.get(b,h.c.options.$b):7>=h.a.W?b.getAttributeNode("value")&&b.getAttributeNode("value").specified?b.value:b.text:b.value;case"select":return 0<=b.selectedIndex?h.w.M(b.options[b.selectedIndex]):e;default:return b.value}},cb:function(b,G,X){switch(h.a.R(b)){case"option":typeof G=="string"?(h.a.g.set(b,h.c.options.$b,e),"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__,b.value=G):(h.a.g.set(b,h.c.options.$b,G),b.__ko__hasDomDataOptionValue__=!0,b.value=typeof G=="number"?G:"");break;case"select":(G===""||G===null)&&(G=e);for(var W=-1,A=0,k=b.options.length,B;A<k;++A)if(B=h.w.M(b.options[A]),B==G||B===""&&G===e){W=A;break}(X||0<=W||G===e&&1<b.size)&&(b.selectedIndex=W,h.a.W===6&&h.a.setTimeout(function(){b.selectedIndex=W},0));break;default:(G===null||G===e)&&(G=""),b.value=G}}}}(),h.b("selectExtensions",h.w),h.b("selectExtensions.readValue",h.w.M),h.b("selectExtensions.writeValue",h.w.cb),h.m=function(){function b(O){O=h.a.Db(O),O.charCodeAt(0)===123&&(O=O.slice(1,-1)),O+=` ,`;var H=[],U=O.match(W),K,Q=[],ie=0;if(1<U.length){for(var j=0,$;$=U[j];++j){var ne=$.charCodeAt(0);if(ne===44){if(0>=ie){H.push(K&&Q.length?{key:K,value:Q.join("")}:{unknown:K||Q.join("")}),K=ie=0,Q=[];continue}}else if(ne===58){if(!ie&&!K&&Q.length===1){K=Q.pop();continue}}else{if(ne===47&&1<$.length&&($.charCodeAt(1)===47||$.charCodeAt(1)===42))continue;ne===47&&j&&1<$.length?(ne=U[j-1].match(A))&&!k[ne[0]]&&(O=O.substr(O.indexOf($)+1),U=O.match(W),j=-1,$="/"):ne===40||ne===123||ne===91?++ie:ne===41||ne===125||ne===93?--ie:K||Q.length||ne!==34&&ne!==39||($=$.slice(1,-1))}Q.push($)}if(0<ie)throw Error("Unbalanced parentheses, braces, or brackets")}return H}var G=["true","false","null","undefined"],X=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,W=RegExp(`"(?:\\\\.|[^"])*"|'(?:\\\\.|[^'])*'|\`(?:\\\\.|[^\`])*\`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.* |/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,"'\`{}()/:[\\]]*[^\\s,"'\`{}()/:[\\]]|[^\\s]`,"g"),A=/[\])"'A-Za-z0-9_$]+$/,k={in:1,return:1,typeof:1},B={};return{Ra:[],wa:B,ac:b,vb:function(O,H){function U(ne,be){var Ce;if(!j){var me=h.getBindingHandler(ne);if(me&&me.preprocess&&!(be=me.preprocess(be,ne,U)))return;(me=B[ne])&&(Ce=be,0<=h.a.A(G,Ce)?Ce=!1:(me=Ce.match(X),Ce=me===null?!1:me[1]?"Object("+me[1]+")"+me[2]:Ce),me=Ce),me&&Q.push("'"+(typeof B[ne]=="string"?B[ne]:ne)+"':function(_z){"+Ce+"=_z}")}ie&&(be="function(){return "+be+" }"),K.push("'"+ne+"':"+be)}H=H||{};var K=[],Q=[],ie=H.valueAccessors,j=H.bindingParams,$=typeof O=="string"?b(O):O;return h.a.D($,function(ne){U(ne.key||ne.unknown,ne.value)}),Q.length&&U("_ko_property_writers","{"+Q.join(",")+" }"),K.join(",")},Id:function(O,H){for(var U=0;U<O.length;U++)if(O[U].key==H)return!0;return!1},eb:function(O,H,U,K,Q){O&&h.O(O)?!h.Za(O)||Q&&O.v()===K||O(K):(O=H.get("_ko_property_writers"))&&O[U]&&O[U](K)}}}(),h.b("expressionRewriting",h.m),h.b("expressionRewriting.bindingRewriteValidators",h.m.Ra),h.b("expressionRewriting.parseObjectLiteral",h.m.ac),h.b("expressionRewriting.preProcessBindings",h.m.vb),h.b("expressionRewriting._twoWayBindings",h.m.wa),h.b("jsonExpressionRewriting",h.m),h.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",h.m.vb),function(){function b(U){return U.nodeType==8&&k.test(A?U.text:U.nodeValue)}function G(U){return U.nodeType==8&&B.test(A?U.text:U.nodeValue)}function X(U,K){for(var Q=U,ie=1,j=[];Q=Q.nextSibling;){if(G(Q)&&(h.a.g.set(Q,H,!0),ie--,ie===0))return j;j.push(Q),b(Q)&&ie++}if(!K)throw Error("Cannot find closing comment tag to match: "+U.nodeValue);return null}function W(U,K){var Q=X(U,K);return Q?0<Q.length?Q[Q.length-1].nextSibling:U.nextSibling:null}var A=n&&n.createComment("test").text==="<!--test-->",k=A?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,B=A?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,O={ul:!0,ol:!0},H="__ko_matchedEndComment__";h.h={ea:{},childNodes:function(U){return b(U)?X(U):U.childNodes},Ea:function(U){if(b(U)){U=h.h.childNodes(U);for(var K=0,Q=U.length;K<Q;K++)h.removeNode(U[K])}else h.a.Tb(U)},va:function(U,K){if(b(U)){h.h.Ea(U);for(var Q=U.nextSibling,ie=0,j=K.length;ie<j;ie++)Q.parentNode.insertBefore(K[ie],Q)}else h.a.va(U,K)},Vc:function(U,K){var Q;b(U)?(Q=U.nextSibling,U=U.parentNode):Q=U.firstChild,Q?K!==Q&&U.insertBefore(K,Q):U.appendChild(K)},Wb:function(U,K,Q){Q?(Q=Q.nextSibling,b(U)&&(U=U.parentNode),Q?K!==Q&&U.insertBefore(K,Q):U.appendChild(K)):h.h.Vc(U,K)},firstChild:function(U){if(b(U))return!U.nextSibling||G(U.nextSibling)?null:U.nextSibling;if(U.firstChild&&G(U.firstChild))throw Error("Found invalid end comment, as the first child of "+U);return U.firstChild},nextSibling:function(U){if(b(U)&&(U=W(U)),U.nextSibling&&G(U.nextSibling)){var K=U.nextSibling;if(G(K)&&!h.a.g.get(K,H))throw Error("Found end comment without a matching opening comment, as child of "+U);return null}return U.nextSibling},Cd:b,Vd:function(U){return(U=(A?U.text:U.nodeValue).match(k))?U[1]:null},Sc:function(U){if(O[h.a.R(U)]){var K=U.firstChild;if(K)do if(K.nodeType===1){var Q;Q=K.firstChild;var ie=null;if(Q)do if(ie)ie.push(Q);else if(b(Q)){var j=W(Q,!0);j?Q=j:ie=[Q]}else G(Q)&&(ie=[Q]);while(Q=Q.nextSibling);if(Q=ie)for(ie=K.nextSibling,j=0;j<Q.length;j++)ie?U.insertBefore(Q[j],ie):U.appendChild(Q[j])}while(K=K.nextSibling)}}}}(),h.b("virtualElements",h.h),h.b("virtualElements.allowedBindings",h.h.ea),h.b("virtualElements.emptyNode",h.h.Ea),h.b("virtualElements.insertAfter",h.h.Wb),h.b("virtualElements.prepend",h.h.Vc),h.b("virtualElements.setDomNodeChildren",h.h.va),function(){h.ga=function(){this.nd={}},h.a.extend(h.ga.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind")!=null||h.j.getComponentNameForNode(b);case 8:return h.h.Cd(b);default:return!1}},getBindings:function(b,G){var X=this.getBindingsString(b,G),X=X?this.parseBindingsString(X,G,b):null;return h.j.tc(X,b,G,!1)},getBindingAccessors:function(b,G){var X=this.getBindingsString(b,G),X=X?this.parseBindingsString(X,G,b,{valueAccessors:!0}):null;return h.j.tc(X,b,G,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind");case 8:return h.h.Vd(b);default:return null}},parseBindingsString:function(b,G,X,W){try{var A=this.nd,k=b+(W&&W.valueAccessors||""),B;if(!(B=A[k])){var O,H="with($context){with($data||{}){return{"+h.m.vb(b,W)+"}}}";O=new Function("$context","$element",H),B=A[k]=O}return B(G,X)}catch(U){throw U.message=`Unable to parse bindings. Bindings value: `+b+` Message: `+U.message,U}}}),h.ga.instance=new h.ga}(),h.b("bindingProvider",h.ga),function(){function b(me){var _e=(me=h.a.g.get(me,Ce))&&me.N;_e&&(me.N=null,_e.Tc())}function G(me,_e,Ve){this.node=me,this.yc=_e,this.kb=[],this.H=!1,_e.N||h.a.K.za(me,b),Ve&&Ve.N&&(Ve.N.kb.push(me),this.Kb=Ve)}function X(me){return function(){return me}}function W(me){return me()}function A(me){return h.a.Ga(h.u.G(me),function(_e,Ve){return function(){return me()[Ve]}})}function k(me,_e,Ve){return typeof me=="function"?A(me.bind(null,_e,Ve)):h.a.Ga(me,X)}function B(me,_e){return A(this.getBindings.bind(this,me,_e))}function O(me,_e){var Ve=h.h.firstChild(_e);if(Ve){var Ie,Ze=h.ga.instance,De=Ze.preprocessNode;if(De){for(;Ie=Ve;)Ve=h.h.nextSibling(Ie),De.call(Ze,Ie);Ve=h.h.firstChild(_e)}for(;Ie=Ve;)Ve=h.h.nextSibling(Ie),H(me,Ie)}h.i.ma(_e,h.i.H)}function H(me,_e){var Ve=me,Ie=_e.nodeType===1;Ie&&h.h.Sc(_e),(Ie||h.ga.instance.nodeHasBindings(_e))&&(Ve=K(_e,null,me).bindingContextForDescendants),Ve&&!ne[h.a.R(_e)]&&O(Ve,_e)}function U(me){var _e=[],Ve={},Ie=[];return h.a.P(me,function Ze(De){if(!Ve[De]){var Ke=h.getBindingHandler(De);Ke&&(Ke.after&&(Ie.push(De),h.a.D(Ke.after,function(rt){if(me[rt]){if(h.a.A(Ie,rt)!==-1)throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+Ie.join(", "));Ze(rt)}}),Ie.length--),_e.push({key:De,Mc:Ke})),Ve[De]=!0}}),_e}function K(me,_e,Ve){var Ie=h.a.g.Ub(me,Ce,{}),Ze=Ie.hd;if(!_e){if(Ze)throw Error("You cannot apply bindings multiple times to the same element.");Ie.hd=!0}Ze||(Ie.context=Ve),Ie.Zb||(Ie.Zb={});var De;if(_e&&typeof _e!="function")De=_e;else{var Ke=h.ga.instance,rt=Ke.getBindingAccessors||B,Xt=h.$(function(){return(De=_e?_e(Ve,me):rt.call(Ke,me,Ve))&&(Ve[ie]&&Ve[ie](),Ve[$]&&Ve[$]()),De},null,{l:me});De&&Xt.ja()||(Xt=null)}var Ht=Ve,qe;if(De){var mn=function(){return h.a.Ga(Xt?Xt():De,W)},Dt=Xt?function(Lt){return function(){return W(Xt()[Lt])}}:function(Lt){return De[Lt]};mn.get=function(Lt){return De[Lt]&&W(Dt(Lt))},mn.has=function(Lt){return Lt in De},h.i.H in De&&h.i.subscribe(me,h.i.H,function(){var Lt=(0,De[h.i.H])();if(Lt){var Vi=h.h.childNodes(me);Vi.length&&Lt(Vi,h.Ec(Vi[0]))}}),h.i.pa in De&&(Ht=h.i.Cb(me,Ve),h.i.subscribe(me,h.i.pa,function(){var Lt=(0,De[h.i.pa])();Lt&&h.h.firstChild(me)&&Lt(me)})),Ie=U(De),h.a.D(Ie,function(Lt){var Vi=Lt.Mc.init,ln=Lt.Mc.update,ge=Lt.key;if(me.nodeType===8&&!h.h.ea[ge])throw Error("The binding '"+ge+"' cannot be used with virtual elements");try{typeof Vi=="function"&&h.u.G(function(){var Le=Vi(me,Dt(ge),mn,Ht.$data,Ht);if(Le&&Le.controlsDescendantBindings){if(qe!==e)throw Error("Multiple bindings ("+qe+" and "+ge+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");qe=ge}}),typeof ln=="function"&&h.$(function(){ln(me,Dt(ge),mn,Ht.$data,Ht)},null,{l:me})}catch(Le){throw Le.message='Unable to process binding "'+ge+": "+De[ge]+`" Message: `+Le.message,Le}})}return Ie=qe===e,{shouldBindDescendants:Ie,bindingContextForDescendants:Ie&&Ht}}function Q(me,_e){return me&&me instanceof h.fa?me:new h.fa(me,e,e,_e)}var ie=h.a.Da("_subscribable"),j=h.a.Da("_ancestorBindingInfo"),$=h.a.Da("_dataDependency");h.c={};var ne={script:!0,textarea:!0,template:!0};h.getBindingHandler=function(me){return h.c[me]};var be={};h.fa=function(me,_e,Ve,Ie,Ze){function De(){var Dt=Ht?Xt():Xt,Lt=h.a.f(Dt);return _e?(h.a.extend(Ke,_e),j in _e&&(Ke[j]=_e[j])):(Ke.$parents=[],Ke.$root=Lt,Ke.ko=h),Ke[ie]=qe,rt?Lt=Ke.$data:(Ke.$rawData=Dt,Ke.$data=Lt),Ve&&(Ke[Ve]=Lt),Ie&&Ie(Ke,_e,Lt),_e&&_e[ie]&&!h.S.o().Vb(_e[ie])&&_e[ie](),mn&&(Ke[$]=mn),Ke.$data}var Ke=this,rt=me===be,Xt=rt?e:me,Ht=typeof Xt=="function"&&!h.O(Xt),qe,mn=Ze&&Ze.dataDependency;Ze&&Ze.exportDependencies?De():(qe=h.xb(De),qe.v(),qe.ja()?qe.equalityComparer=null:Ke[ie]=e)},h.fa.prototype.createChildContext=function(me,_e,Ve,Ie){if(!Ie&&_e&&typeof _e=="object"&&(Ie=_e,_e=Ie.as,Ve=Ie.extend),_e&&Ie&&Ie.noChildContext){var Ze=typeof me=="function"&&!h.O(me);return new h.fa(be,this,null,function(De){Ve&&Ve(De),De[_e]=Ze?me():me},Ie)}return new h.fa(me,this,_e,function(De,Ke){De.$parentContext=Ke,De.$parent=Ke.$data,De.$parents=(Ke.$parents||[]).slice(0),De.$parents.unshift(De.$parent),Ve&&Ve(De)},Ie)},h.fa.prototype.extend=function(me,_e){return new h.fa(be,this,null,function(Ve){h.a.extend(Ve,typeof me=="function"?me(Ve):me)},_e)};var Ce=h.a.g.Z();G.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)},G.prototype.sd=function(me){h.a.Pa(this.kb,me),!this.kb.length&&this.H&&this.Cc()},G.prototype.Cc=function(){this.H=!0,this.yc.N&&!this.kb.length&&(this.yc.N=null,h.a.K.yb(this.node,b),h.i.ma(this.node,h.i.pa),this.Tc())},h.i={H:"childrenComplete",pa:"descendantsComplete",subscribe:function(me,_e,Ve,Ie,Ze){var De=h.a.g.Ub(me,Ce,{});return De.Fa||(De.Fa=new h.T),Ze&&Ze.notifyImmediately&&De.Zb[_e]&&h.u.G(Ve,Ie,[me]),De.Fa.subscribe(Ve,Ie,_e)},ma:function(me,_e){var Ve=h.a.g.get(me,Ce);if(Ve&&(Ve.Zb[_e]=!0,Ve.Fa&&Ve.Fa.notifySubscribers(me,_e),_e==h.i.H)){if(Ve.N)Ve.N.Cc();else if(Ve.N===e&&Ve.Fa&&Ve.Fa.Wa(h.i.pa))throw Error("descendantsComplete event not supported for bindings on this node")}},Cb:function(me,_e){var Ve=h.a.g.Ub(me,Ce,{});return Ve.N||(Ve.N=new G(me,Ve,_e[j])),_e[j]==Ve?_e:_e.extend(function(Ie){Ie[j]=Ve})}},h.Td=function(me){return(me=h.a.g.get(me,Ce))&&me.context},h.ib=function(me,_e,Ve){return me.nodeType===1&&h.h.Sc(me),K(me,_e,Q(Ve))},h.ld=function(me,_e,Ve){return Ve=Q(Ve),h.ib(me,k(_e,Ve,me),Ve)},h.Oa=function(me,_e){_e.nodeType!==1&&_e.nodeType!==8||O(Q(me),_e)},h.vc=function(me,_e,Ve){if(!o&&t.jQuery&&(o=t.jQuery),2>arguments.length){if(_e=n.body,!_e)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?")}else if(!_e||_e.nodeType!==1&&_e.nodeType!==8)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");H(Q(me,Ve),_e)},h.Dc=function(me){return!me||me.nodeType!==1&&me.nodeType!==8?e:h.Td(me)},h.Ec=function(me){return(me=h.Dc(me))?me.$data:e},h.b("bindingHandlers",h.c),h.b("bindingEvent",h.i),h.b("bindingEvent.subscribe",h.i.subscribe),h.b("bindingEvent.startPossiblyAsyncContentBinding",h.i.Cb),h.b("applyBindings",h.vc),h.b("applyBindingsToDescendants",h.Oa),h.b("applyBindingAccessorsToNode",h.ib),h.b("applyBindingsToNode",h.ld),h.b("contextFor",h.Dc),h.b("dataFor",h.Ec)}(),function(b){function G(B,O){var H=Object.prototype.hasOwnProperty.call(A,B)?A[B]:b,U;H?H.subscribe(O):(H=A[B]=new h.T,H.subscribe(O),X(B,function(K,Q){var ie=!(!Q||!Q.synchronous);k[B]={definition:K,Gd:ie},delete A[B],U||ie?H.notifySubscribers(K):h.na.zb(function(){H.notifySubscribers(K)})}),U=!0)}function X(B,O){W("getConfig",[B],function(H){H?W("loadComponent",[B,H],function(U){O(U,H)}):O(null,null)})}function W(B,O,H,U){U||(U=h.j.loaders.slice(0));var K=U.shift();if(K){var Q=K[B];if(Q){var ie=!1;if(Q.apply(K,O.concat(function(j){ie?H(null):j!==null?H(j):W(B,O,H,U)}))!==b&&(ie=!0,!K.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.")}else W(B,O,H,U)}else H(null)}var A={},k={};h.j={get:function(B,O){var H=Object.prototype.hasOwnProperty.call(k,B)?k[B]:b;H?H.Gd?h.u.G(function(){O(H.definition)}):h.na.zb(function(){O(H.definition)}):G(B,O)},Bc:function(B){delete k[B]},oc:W},h.j.loaders=[],h.b("components",h.j),h.b("components.get",h.j.get),h.b("components.clearCachedDefinition",h.j.Bc)}(),function(){function b(H,U,K,Q){function ie(){--$===0&&Q(j)}var j={},$=2,ne=K.template;K=K.viewModel,ne?A(U,ne,function(be){h.j.oc("loadTemplate",[H,be],function(Ce){j.template=Ce,ie()})}):ie(),K?A(U,K,function(be){h.j.oc("loadViewModel",[H,be],function(Ce){j[O]=Ce,ie()})}):ie()}function G(H,U,K){if(typeof U=="function")K(function(ie){return new U(ie)});else if(typeof U[O]=="function")K(U[O]);else if("instance"in U){var Q=U.instance;K(function(){return Q})}else"viewModel"in U?G(H,U.viewModel,K):H("Unknown viewModel value: "+U)}function X(H){switch(h.a.R(H)){case"script":return h.a.ua(H.text);case"textarea":return h.a.ua(H.value);case"template":if(W(H.content))return h.a.Ca(H.content.childNodes)}return h.a.Ca(H.childNodes)}function W(H){return t.DocumentFragment?H instanceof DocumentFragment:H&&H.nodeType===11}function A(H,U,K){typeof U.require=="string"?a||t.require?(a||t.require)([U.require],function(Q){Q&&typeof Q=="object"&&Q.Xd&&Q.default&&(Q=Q.default),K(Q)}):H("Uses require, but no AMD loader is present"):K(U)}function k(H){return function(U){throw Error("Component '"+H+"': "+U)}}var B={};h.j.register=function(H,U){if(!U)throw Error("Invalid configuration for "+H);if(h.j.tb(H))throw Error("Component "+H+" is already registered");B[H]=U},h.j.tb=function(H){return Object.prototype.hasOwnProperty.call(B,H)},h.j.unregister=function(H){delete B[H],h.j.Bc(H)},h.j.Fc={getConfig:function(H,U){U(h.j.tb(H)?B[H]:null)},loadComponent:function(H,U,K){var Q=k(H);A(Q,U,function(ie){b(H,Q,ie,K)})},loadTemplate:function(H,U,K){if(H=k(H),typeof U=="string")K(h.a.ua(U));else if(U instanceof Array)K(U);else if(W(U))K(h.a.la(U.childNodes));else if(U.element)if(U=U.element,t.HTMLElement?U instanceof HTMLElement:U&&U.tagName&&U.nodeType===1)K(X(U));else if(typeof U=="string"){var Q=n.getElementById(U);Q?K(X(Q)):H("Cannot find element with ID "+U)}else H("Unknown element type: "+U);else H("Unknown template value: "+U)},loadViewModel:function(H,U,K){G(k(H),U,K)}};var O="createViewModel";h.b("components.register",h.j.register),h.b("components.isRegistered",h.j.tb),h.b("components.unregister",h.j.unregister),h.b("components.defaultLoader",h.j.Fc),h.j.loaders.push(h.j.Fc),h.j.dd=B}(),function(){function b(X,W){var A=X.getAttribute("params");if(A){var A=G.parseBindingsString(A,W,X,{valueAccessors:!0,bindingParams:!0}),A=h.a.Ga(A,function(O){return h.o(O,null,{l:X})}),k=h.a.Ga(A,function(O){var H=O.v();return O.ja()?h.o({read:function(){return h.a.f(O())},write:h.Za(H)&&function(U){O()(U)},l:X}):H});return Object.prototype.hasOwnProperty.call(k,"$raw")||(k.$raw=A),k}return{$raw:{}}}h.j.getComponentNameForNode=function(X){var W=h.a.R(X);if(h.j.tb(W)&&(W.indexOf("-")!=-1||""+X=="[object HTMLUnknownElement]"||8>=h.a.W&&X.tagName===W))return W},h.j.tc=function(X,W,A,k){if(W.nodeType===1){var B=h.j.getComponentNameForNode(W);if(B){if(X=X||{},X.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var O={name:B,params:b(W,A)};X.component=k?function(){return O}:O}}return X};var G=new h.ga;9>h.a.W&&(h.j.register=function(X){return function(W){return X.apply(this,arguments)}}(h.j.register),n.createDocumentFragment=function(X){return function(){var W=X(),A=h.j.dd,k;for(k in A);return W}}(n.createDocumentFragment))}(),function(){function b(W,A,k){if(A=A.template,!A)throw Error("Component '"+W+"' has no template");W=h.a.Ca(A),h.h.va(k,W)}function G(W,A,k){var B=W.createViewModel;return B?B.call(W,A,k):A}var X=0;h.c.component={init:function(W,A,k,B,O){function H(){var j=U&&U.dispose;typeof j=="function"&&j.call(U),Q&&Q.s(),K=U=Q=null}var U,K,Q,ie=h.a.la(h.h.childNodes(W));return h.h.Ea(W),h.a.K.za(W,H),h.o(function(){var j=h.a.f(A()),$,ne;if(typeof j=="string"?$=j:($=h.a.f(j.name),ne=h.a.f(j.params)),!$)throw Error("No component name specified");var be=h.i.Cb(W,O),Ce=K=++X;h.j.get($,function(me){if(K===Ce){if(H(),!me)throw Error("Unknown component '"+$+"'");b($,me,W);var _e=G(me,ne,{element:W,templateNodes:ie});me=be.createChildContext(_e,{extend:function(Ve){Ve.$component=_e,Ve.$componentTemplateNodes=ie}}),_e&&_e.koDescendantsComplete&&(Q=h.i.subscribe(W,h.i.pa,_e.koDescendantsComplete,_e)),U=_e,h.Oa(me,W)}})},null,{l:W}),{controlsDescendantBindings:!0}}},h.h.ea.component=!0}();var F={class:"className",for:"htmlFor"};h.c.attr={update:function(b,G){var X=h.a.f(G())||{};h.a.P(X,function(W,A){A=h.a.f(A);var k=W.indexOf(":"),k="lookupNamespaceURI"in b&&0<k&&b.lookupNamespaceURI(W.substr(0,k)),B=A===!1||A===null||A===e;B?k?b.removeAttributeNS(k,W):b.removeAttribute(W):A=A.toString(),8>=h.a.W&&W in F?(W=F[W],B?b.removeAttribute(W):b[W]=A):B||(k?b.setAttributeNS(k,W,A):b.setAttribute(W,A)),W==="name"&&h.a.Yc(b,B?"":A)})}},function(){h.c.checked={after:["value","attr"],init:function(b,G,X){function W(){var j=b.checked,$=k();if(!h.S.Ya()&&(j||!O&&!h.S.qa())){var ne=h.u.G(G);if(U){var be=K?ne.v():ne,Ce=ie;ie=$,Ce!==$?j&&(h.a.Na(be,$,!0),h.a.Na(be,Ce,!1)):h.a.Na(be,$,j),K&&h.Za(ne)&&ne(be)}else B&&($===e?$=j:j||($=e)),h.m.eb(ne,X,"checked",$,!0)}}function A(){var j=h.a.f(G()),$=k();U?(b.checked=0<=h.a.A(j,$),ie=$):b.checked=B&&$===e?!!j:k()===j}var k=h.xb(function(){if(X.has("checkedValue"))return h.a.f(X.get("checkedValue"));if(Q)return X.has("value")?h.a.f(X.get("value")):b.value}),B=b.type=="checkbox",O=b.type=="radio";if(B||O){var H=G(),U=B&&h.a.f(H)instanceof Array,K=!(U&&H.push&&H.splice),Q=O||U,ie=U?k():e;O&&!b.name&&h.c.uniqueName.init(b,function(){return!0}),h.o(W,null,{l:b}),h.a.B(b,"click",W),h.o(A,null,{l:b}),H=e}}},h.m.wa.checked=!0,h.c.checkedValue={update:function(b,G){b.value=h.a.f(G())}}}(),h.c.class={update:function(b,G){var X=h.a.Db(h.a.f(G()));h.a.Eb(b,b.__ko__cssValue,!1),b.__ko__cssValue=X,h.a.Eb(b,X,!0)}},h.c.css={update:function(b,G){var X=h.a.f(G());X!==null&&typeof X=="object"?h.a.P(X,function(W,A){A=h.a.f(A),h.a.Eb(b,W,A)}):h.c.class.update(b,G)}},h.c.enable={update:function(b,G){var X=h.a.f(G());X&&b.disabled?b.removeAttribute("disabled"):X||b.disabled||(b.disabled=!0)}},h.c.disable={update:function(b,G){h.c.enable.update(b,function(){return!h.a.f(G())})}},h.c.event={init:function(b,G,X,W,A){var k=G()||{};h.a.P(k,function(B){typeof B=="string"&&h.a.B(b,B,function(O){var H,U=G()[B];if(U){try{var K=h.a.la(arguments);W=A.$data,K.unshift(W),H=U.apply(W,K)}finally{H!==!0&&(O.preventDefault?O.preventDefault():O.returnValue=!1)}X.get(B+"Bubble")===!1&&(O.cancelBubble=!0,O.stopPropagation&&O.stopPropagation())}})})}},h.c.foreach={Rc:function(b){return function(){var G=b(),X=h.a.bc(G);return!X||typeof X.length=="number"?{foreach:G,templateEngine:h.ba.Ma}:(h.a.f(G),{foreach:X.data,as:X.as,noChildContext:X.noChildContext,includeDestroyed:X.includeDestroyed,afterAdd:X.afterAdd,beforeRemove:X.beforeRemove,afterRender:X.afterRender,beforeMove:X.beforeMove,afterMove:X.afterMove,templateEngine:h.ba.Ma})}},init:function(b,G){return h.c.template.init(b,h.c.foreach.Rc(G))},update:function(b,G,X,W,A){return h.c.template.update(b,h.c.foreach.Rc(G),X,W,A)}},h.m.Ra.foreach=!1,h.h.ea.foreach=!0,h.c.hasfocus={init:function(b,G,X){function W(B){b.__ko_hasfocusUpdating=!0;var O=b.ownerDocument;if("activeElement"in O){var H;try{H=O.activeElement}catch{H=O.body}B=H===b}O=G(),h.m.eb(O,X,"hasfocus",B,!0),b.__ko_hasfocusLastValue=B,b.__ko_hasfocusUpdating=!1}var A=W.bind(null,!0),k=W.bind(null,!1);h.a.B(b,"focus",A),h.a.B(b,"focusin",A),h.a.B(b,"blur",k),h.a.B(b,"focusout",k),b.__ko_hasfocusLastValue=!1},update:function(b,G){var X=!!h.a.f(G());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===X||(X?b.focus():b.blur(),!X&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),h.u.G(h.a.Fb,null,[b,X?"focusin":"focusout"]))}},h.m.wa.hasfocus=!0,h.c.hasFocus=h.c.hasfocus,h.m.wa.hasFocus="hasfocus",h.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,G){h.a.fc(b,G())}},function(){function b(G,X,W){h.c[G]={init:function(A,k,B,O,H){var U,K,Q={},ie,j,$;if(X){O=B.get("as");var ne=B.get("noChildContext");$=!(O&&ne),Q={as:O,noChildContext:ne,exportDependencies:$}}return j=(ie=B.get("completeOn")=="render")||B.has(h.i.pa),h.o(function(){var be=h.a.f(k()),Ce=!W!=!be,me=!K,_e;($||Ce!==U)&&(j&&(H=h.i.Cb(A,H)),Ce&&((!X||$)&&(Q.dataDependency=h.S.o()),_e=X?H.createChildContext(typeof be=="function"?be:k,Q):h.S.qa()?H.extend(null,Q):H),me&&h.S.qa()&&(K=h.a.Ca(h.h.childNodes(A),!0)),Ce?(me||h.h.va(A,h.a.Ca(K)),h.Oa(_e,A)):(h.h.Ea(A),ie||h.i.ma(A,h.i.H)),U=Ce)},null,{l:A}),{controlsDescendantBindings:!0}}},h.m.Ra[G]=!1,h.h.ea[G]=!0}b("if"),b("ifnot",!1,!0),b("with",!0)}(),h.c.let={init:function(b,G,X,W,A){return G=A.extend(G),h.Oa(G,b),{controlsDescendantBindings:!0}}},h.h.ea.let=!0;var N={};h.c.options={init:function(b){if(h.a.R(b)!=="select")throw Error("options binding applies only to SELECT elements");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,G,X){function W(){return h.a.jb(b.options,function(ne){return ne.selected})}function A(ne,be,Ce){var me=typeof be;return me=="function"?be(ne):me=="string"?ne[be]:Ce}function k(ne,be){if(j&&U)h.i.ma(b,h.i.H);else if(ie.length){var Ce=0<=h.a.A(ie,h.w.M(be[0]));h.a.Zc(be[0],Ce),j&&!Ce&&h.u.G(h.a.Fb,null,[b,"change"])}}var B=b.multiple,O=b.length!=0&&B?b.scrollTop:null,H=h.a.f(G()),U=X.get("valueAllowUnset")&&X.has("value"),K=X.get("optionsIncludeDestroyed");G={};var Q,ie=[];U||(B?ie=h.a.Mb(W(),h.w.M):0<=b.selectedIndex&&ie.push(h.w.M(b.options[b.selectedIndex]))),H&&(typeof H.length>"u"&&(H=[H]),Q=h.a.jb(H,function(ne){return K||ne===e||ne===null||!h.a.f(ne._destroy)}),X.has("optionsCaption")&&(H=h.a.f(X.get("optionsCaption")),H!==null&&H!==e&&Q.unshift(N)));var j=!1;if(G.beforeRemove=function(ne){b.removeChild(ne)},H=k,X.has("optionsAfterRender")&&typeof X.get("optionsAfterRender")=="function"&&(H=function(ne,be){k(0,be),h.u.G(X.get("optionsAfterRender"),null,[be[0],ne!==N?ne:e])}),h.a.ec(b,Q,function(ne,be,Ce){return Ce.length&&(ie=!U&&Ce[0].selected?[h.w.M(Ce[0])]:[],j=!0),be=b.ownerDocument.createElement("option"),ne===N?(h.a.Bb(be,X.get("optionsCaption")),h.w.cb(be,e)):(Ce=A(ne,X.get("optionsValue"),ne),h.w.cb(be,h.a.f(Ce)),ne=A(ne,X.get("optionsText"),Ce),h.a.Bb(be,ne)),[be]},G,H),!U){var $;B?$=ie.length&&W().length<ie.length:$=ie.length&&0<=b.selectedIndex?h.w.M(b.options[b.selectedIndex])!==ie[0]:ie.length||0<=b.selectedIndex,$&&h.u.G(h.a.Fb,null,[b,"change"])}(U||h.S.Ya())&&h.i.ma(b,h.i.H),h.a.wd(b),O&&20<Math.abs(O-b.scrollTop)&&(b.scrollTop=O)}},h.c.options.$b=h.a.g.Z(),h.c.selectedOptions={init:function(b,G,X){function W(){var B=G(),O=[];h.a.D(b.getElementsByTagName("option"),function(H){H.selected&&O.push(h.w.M(H))}),h.m.eb(B,X,"selectedOptions",O)}function A(){var B=h.a.f(G()),O=b.scrollTop;B&&typeof B.length=="number"&&h.a.D(b.getElementsByTagName("option"),function(H){var U=0<=h.a.A(B,h.w.M(H));H.selected!=U&&h.a.Zc(H,U)}),b.scrollTop=O}if(h.a.R(b)!="select")throw Error("selectedOptions binding applies only to SELECT elements");var k;h.i.subscribe(b,h.i.H,function(){k?W():(h.a.B(b,"change",W),k=h.o(A,null,{l:b}))},null,{notifyImmediately:!0})},update:function(){}},h.m.wa.selectedOptions=!0,h.c.style={update:function(b,G){var X=h.a.f(G()||{});h.a.P(X,function(W,A){if(A=h.a.f(A),(A===null||A===e||A===!1)&&(A=""),o)o(b).css(W,A);else if(/^--/.test(W))b.style.setProperty(W,A);else{W=W.replace(/-(\w)/g,function(B,O){return O.toUpperCase()});var k=b.style[W];b.style[W]=A,A===k||b.style[W]!=k||isNaN(A)||(b.style[W]=A+"px")}})}},h.c.submit={init:function(b,G,X,W,A){if(typeof G()!="function")throw Error("The value for a submit binding must be a function");h.a.B(b,"submit",function(k){var B,O=G();try{B=O.call(A.$data,b)}finally{B!==!0&&(k.preventDefault?k.preventDefault():k.returnValue=!1)}})}},h.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,G){h.a.Bb(b,G())}},h.h.ea.text=!0,function(){if(t&&t.navigator){var b=function(Q){if(Q)return parseFloat(Q[1])},G=t.navigator.userAgent,X,W,A,k,B;(X=t.opera&&t.opera.version&&parseInt(t.opera.version()))||(B=b(G.match(/Edge\/([^ ]+)$/)))||b(G.match(/Chrome\/([^ ]+)/))||(W=b(G.match(/Version\/([^ ]+) Safari/)))||(A=b(G.match(/Firefox\/([^ ]+)/)))||(k=h.a.W||b(G.match(/MSIE ([^ ]+)/)))||(k=b(G.match(/rv:([^ )]+)/)))}if(8<=k&&10>k)var O=h.a.g.Z(),H=h.a.g.Z(),U=function(Q){var ie=this.activeElement;(ie=ie&&h.a.g.get(ie,H))&&ie(Q)},K=function(Q,ie){var j=Q.ownerDocument;h.a.g.get(j,O)||(h.a.g.set(j,O,!0),h.a.B(j,"selectionchange",U)),h.a.g.set(Q,H,ie)};h.c.textInput={init:function(Q,ie,j){function $(De,Ke){h.a.B(Q,De,Ke)}function ne(){var De=h.a.f(ie());(De===null||De===e)&&(De=""),Ve!==e&&De===Ve?h.a.setTimeout(ne,4):Q.value!==De&&(Ze=!0,Q.value=De,Ze=!1,me=Q.value)}function be(){_e||(Ve=Q.value,_e=h.a.setTimeout(Ce,4))}function Ce(){clearTimeout(_e),Ve=_e=e;var De=Q.value;me!==De&&(me=De,h.m.eb(ie(),j,"textInput",De))}var me=Q.value,_e,Ve,Ie=h.a.W==9?be:Ce,Ze=!1;k&&$("keypress",Ce),11>k&&$("propertychange",function(De){Ze||De.propertyName!=="value"||Ie(De)}),k==8&&($("keyup",Ce),$("keydown",Ce)),K&&(K(Q,Ie),$("dragend",be)),(!k||9<=k)&&$("input",Ie),5>W&&h.a.R(Q)==="textarea"?($("keydown",be),$("paste",be),$("cut",be)):11>X?$("keydown",be):4>A?($("DOMAutoComplete",Ce),$("dragdrop",Ce),$("drop",Ce)):B&&Q.type==="number"&&$("keydown",be),$("change",Ce),$("blur",Ce),h.o(ne,null,{l:Q})}},h.m.wa.textInput=!0,h.c.textinput={preprocess:function(Q,ie,j){j("textInput",Q)}}}(),h.c.uniqueName={init:function(b,G){if(G()){var X="ko_unique_"+ ++h.c.uniqueName.rd;h.a.Yc(b,X)}}},h.c.uniqueName.rd=0,h.c.using={init:function(b,G,X,W,A){var k;return X.has("as")&&(k={as:X.get("as"),noChildContext:X.get("noChildContext")}),G=A.createChildContext(G,k),h.Oa(G,b),{controlsDescendantBindings:!0}}},h.h.ea.using=!0,h.c.value={init:function(b,G,X){var W=h.a.R(b),A=W=="input";if(!A||b.type!="checkbox"&&b.type!="radio"){var k=[],B=X.get("valueUpdate"),O=!1,H=null;B&&(typeof B=="string"?k=[B]:k=h.a.wc(B),h.a.Pa(k,"change"));var U=function(){H=null,O=!1;var ie=G(),j=h.w.M(b);h.m.eb(ie,X,"value",j)};!h.a.W||!A||b.type!="text"||b.autocomplete=="off"||b.form&&b.form.autocomplete=="off"||h.a.A(k,"propertychange")!=-1||(h.a.B(b,"propertychange",function(){O=!0}),h.a.B(b,"focus",function(){O=!1}),h.a.B(b,"blur",function(){O&&U()})),h.a.D(k,function(ie){var j=U;h.a.Ud(ie,"after")&&(j=function(){H=h.w.M(b),h.a.setTimeout(U,0)},ie=ie.substring(5)),h.a.B(b,ie,j)});var K;if(K=A&&b.type=="file"?function(){var ie=h.a.f(G());ie===null||ie===e||ie===""?b.value="":h.u.G(U)}:function(){var ie=h.a.f(G()),j=h.w.M(b);H!==null&&ie===H?h.a.setTimeout(K,0):(ie!==j||j===e)&&(W==="select"?(j=X.get("valueAllowUnset"),h.w.cb(b,ie,j),j||ie===h.w.M(b)||h.u.G(U)):h.w.cb(b,ie))},W==="select"){var Q;h.i.subscribe(b,h.i.H,function(){Q?X.get("valueAllowUnset")?K():U():(h.a.B(b,"change",U),Q=h.o(K,null,{l:b}))},null,{notifyImmediately:!0})}else h.a.B(b,"change",U),h.o(K,null,{l:b})}else h.ib(b,{checkedValue:G})},update:function(){}},h.m.wa.value=!0,h.c.visible={update:function(b,G){var X=h.a.f(G()),W=b.style.display!="none";X&&!W?b.style.display="":!X&&W&&(b.style.display="none")}},h.c.hidden={update:function(b,G){h.c.visible.update(b,function(){return!h.a.f(G())})}},function(b){h.c[b]={init:function(G,X,W,A,k){return h.c.event.init.call(this,G,function(){var B={};return B[b]=X(),B},W,A,k)}}}("click"),h.ca=function(){},h.ca.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource")},h.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock")},h.ca.prototype.makeTemplateSource=function(b,G){if(typeof b=="string"){G=G||n;var X=G.getElementById(b);if(!X)throw Error("Cannot find template with ID "+b);return new h.C.F(X)}if(b.nodeType==1||b.nodeType==8)return new h.C.ia(b);throw Error("Unknown template type: "+b)},h.ca.prototype.renderTemplate=function(b,G,X,W){return b=this.makeTemplateSource(b,W),this.renderTemplateSource(b,G,X,W)},h.ca.prototype.isTemplateRewritten=function(b,G){return this.allowTemplateRewriting===!1?!0:this.makeTemplateSource(b,G).data("isRewritten")},h.ca.prototype.rewriteTemplate=function(b,G,X){b=this.makeTemplateSource(b,X),G=G(b.text()),b.text(G),b.data("isRewritten",!0)},h.b("templateEngine",h.ca),h.kc=function(){function b(W,A,k,B){W=h.m.ac(W);for(var O=h.m.Ra,H=0;H<W.length;H++){var U=W[H].key;if(Object.prototype.hasOwnProperty.call(O,U)){var K=O[U];if(typeof K=="function"){if(U=K(W[H].value))throw Error(U)}else if(!K)throw Error("This template engine does not support the '"+U+"' binding within its templates")}}return k="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+h.m.vb(W,{valueAccessors:!0})+" } })()},'"+k.toLowerCase()+"')",B.createJavaScriptEvaluatorBlock(k)+A}var G=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,X=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{xd:function(W,A,k){A.isTemplateRewritten(W,k)||A.rewriteTemplate(W,function(B){return h.kc.Ld(B,A)},k)},Ld:function(W,A){return W.replace(G,function(k,B,O,H,U){return b(U,B,O,A)}).replace(X,function(k,B){return b(B,"<!-- ko -->","#comment",A)})},md:function(W,A){return h.aa.Xb(function(k,B){var O=k.nextSibling;O&&O.nodeName.toLowerCase()===A&&h.ib(O,W,B)})}}}(),h.b("__tr_ambtns",h.kc.md),function(){h.C={},h.C.F=function(X){if(this.F=X){var W=h.a.R(X);this.ab=W==="script"?1:W==="textarea"?2:W=="template"&&X.content&&X.content.nodeType===11?3:4}},h.C.F.prototype.text=function(){var X=this.ab===1?"text":this.ab===2?"value":"innerHTML";if(arguments.length==0)return this.F[X];var W=arguments[0];X==="innerHTML"?h.a.fc(this.F,W):this.F[X]=W};var b=h.a.g.Z()+"_";h.C.F.prototype.data=function(X){if(arguments.length===1)return h.a.g.get(this.F,b+X);h.a.g.set(this.F,b+X,arguments[1])};var G=h.a.g.Z();h.C.F.prototype.nodes=function(){var X=this.F;if(arguments.length==0){var W=h.a.g.get(X,G)||{},A=W.lb||(this.ab===3?X.content:this.ab===4?X:e);if(!A||W.jd){var k=this.text();k&&k!==W.bb&&(A=h.a.Md(k,X.ownerDocument),h.a.g.set(X,G,{lb:A,bb:k,jd:!0}))}return A}W=arguments[0],this.ab!==e&&this.text(""),h.a.g.set(X,G,{lb:W})},h.C.ia=function(X){this.F=X},h.C.ia.prototype=new h.C.F,h.C.ia.prototype.constructor=h.C.ia,h.C.ia.prototype.text=function(){if(arguments.length==0){var X=h.a.g.get(this.F,G)||{};return X.bb===e&&X.lb&&(X.bb=X.lb.innerHTML),X.bb}h.a.g.set(this.F,G,{bb:arguments[0]})},h.b("templateSources",h.C),h.b("templateSources.domElement",h.C.F),h.b("templateSources.anonymousTemplate",h.C.ia)}(),function(){function b(H,U,K){var Q;for(U=h.h.nextSibling(U);H&&(Q=H)!==U;)H=h.h.nextSibling(Q),K(Q,H)}function G(H,U){if(H.length){var K=H[0],Q=H[H.length-1],ie=K.parentNode,j=h.ga.instance,$=j.preprocessNode;if($){if(b(K,Q,function(ne,be){var Ce=ne.previousSibling,me=$.call(j,ne);me&&(ne===K&&(K=me[0]||be),ne===Q&&(Q=me[me.length-1]||Ce))}),H.length=0,!K)return;K===Q?H.push(K):(H.push(K,Q),h.a.Ua(H,ie))}b(K,Q,function(ne){ne.nodeType!==1&&ne.nodeType!==8||h.vc(U,ne)}),b(K,Q,function(ne){ne.nodeType!==1&&ne.nodeType!==8||h.aa.cd(ne,[U])}),h.a.Ua(H,ie)}}function X(H){return H.nodeType?H:0<H.length?H[0]:null}function W(H,U,K,Q,ie){ie=ie||{};var j=(H&&X(H)||K||{}).ownerDocument,$=ie.templateEngine||k;if(h.kc.xd(K,$,j),K=$.renderTemplate(K,Q,ie,j),typeof K.length!="number"||0<K.length&&typeof K[0].nodeType!="number")throw Error("Template engine must return an array of DOM nodes");switch(j=!1,U){case"replaceChildren":h.h.va(H,K),j=!0;break;case"replaceNode":h.a.Xc(H,K),j=!0;break;case"ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+U)}return j&&(G(K,Q),ie.afterRender&&h.u.G(ie.afterRender,null,[K,Q[ie.as||"$data"]]),U=="replaceChildren"&&h.i.ma(H,h.i.H)),K}function A(H,U,K){return h.O(H)?H():typeof H=="function"?H(U,K):H}var k;h.gc=function(H){if(H!=e&&!(H instanceof h.ca))throw Error("templateEngine must inherit from ko.templateEngine");k=H},h.dc=function(H,U,K,Q,ie){if(K=K||{},(K.templateEngine||k)==e)throw Error("Set a template engine before calling renderTemplate");if(ie=ie||"replaceChildren",Q){var j=X(Q);return h.$(function(){var ne=U&&U instanceof h.fa?U:new h.fa(U,null,null,null,{exportDependencies:!0}),$=A(H,ne.$data,ne),ne=W(Q,ie,$,ne,K);ie=="replaceNode"&&(Q=ne,j=X(Q))},null,{Sa:function(){return!j||!h.a.Sb(j)},l:j&&ie=="replaceNode"?j.parentNode:j})}return h.aa.Xb(function($){h.dc(H,U,K,$,"replaceNode")})},h.Qd=function(H,U,K,Q,ie){function j(Ve,Ie){h.u.G(h.a.ec,null,[Q,Ve,ne,K,$,Ie]),h.i.ma(Q,h.i.H)}function $(Ve,Ie){G(Ie,be),K.afterRender&&K.afterRender(Ie,Ve),be=null}function ne(Ve,Ie){be=ie.createChildContext(Ve,{as:Ce,noChildContext:K.noChildContext,extend:function(De){De.$index=Ie,Ce&&(De[Ce+"Index"]=Ie)}});var Ze=A(H,Ve,be);return W(Q,"ignoreTargetNode",Ze,be,K)}var be,Ce=K.as,me=K.includeDestroyed===!1||h.options.foreachHidesDestroyed&&!K.includeDestroyed;if(me||K.beforeRemove||!h.Pc(U))return h.$(function(){var Ve=h.a.f(U)||[];typeof Ve.length>"u"&&(Ve=[Ve]),me&&(Ve=h.a.jb(Ve,function(Ie){return Ie===e||Ie===null||!h.a.f(Ie._destroy)})),j(Ve)},null,{l:Q});j(U.v());var _e=U.subscribe(function(Ve){j(U(),Ve)},null,"arrayChange");return _e.l(Q),_e};var B=h.a.g.Z(),O=h.a.g.Z();h.c.template={init:function(H,U){var K=h.a.f(U());if(typeof K=="string"||"name"in K)h.h.Ea(H);else if("nodes"in K){if(K=K.nodes||[],h.O(K))throw Error('The "nodes" option must be a plain, non-observable array.');var Q=K[0]&&K[0].parentNode;Q&&h.a.g.get(Q,O)||(Q=h.a.Yb(K),h.a.g.set(Q,O,!0)),new h.C.ia(H).nodes(Q)}else if(K=h.h.childNodes(H),0<K.length)Q=h.a.Yb(K),new h.C.ia(H).nodes(Q);else throw Error("Anonymous template defined, but no template content was provided");return{controlsDescendantBindings:!0}},update:function(H,U,K,Q,ie){var j=U();U=h.a.f(j),K=!0,Q=null,typeof U=="string"?U={}:(j="name"in U?U.name:H,"if"in U&&(K=h.a.f(U.if)),K&&"ifnot"in U&&(K=!h.a.f(U.ifnot)),K&&!j&&(K=!1)),"foreach"in U?Q=h.Qd(j,K&&U.foreach||[],U,H,ie):K?(K=ie,"data"in U&&(K=ie.createChildContext(U.data,{as:U.as,noChildContext:U.noChildContext,exportDependencies:!0})),Q=h.dc(j,K,U,H)):h.h.Ea(H),ie=Q,(U=h.a.g.get(H,B))&&typeof U.s=="function"&&U.s(),h.a.g.set(H,B,!ie||ie.ja&&!ie.ja()?e:ie)}},h.m.Ra.template=function(H){return H=h.m.ac(H),H.length==1&&H[0].unknown||h.m.Id(H,"name")?null:"This template engine does not support anonymous templates nested within its templates"},h.h.ea.template=!0}(),h.b("setTemplateEngine",h.gc),h.b("renderTemplate",h.dc),h.a.Kc=function(b,G,X){if(b.length&&G.length){var W,A,k,B,O;for(W=A=0;(!X||W<X)&&(B=b[A]);++A){for(k=0;O=G[k];++k)if(B.value===O.value){B.moved=O.index,O.moved=B.index,G.splice(k,1),W=k=0;break}W+=k}}},h.a.Pb=function(){function b(G,X,W,A,k){var B=Math.min,O=Math.max,H=[],U,K=G.length,Q,ie=X.length,j=ie-K||1,$=K+ie+1,ne,be,Ce;for(U=0;U<=K;U++)for(be=ne,H.push(ne=[]),Ce=B(ie,U+j),Q=O(0,U-1);Q<=Ce;Q++)ne[Q]=Q?U?G[U-1]===X[Q-1]?be[Q-1]:B(be[Q]||$,ne[Q-1]||$)+1:Q+1:U+1;for(B=[],O=[],j=[],U=K,Q=ie;U||Q;)ie=H[U][Q]-1,Q&&ie===H[U][Q-1]?O.push(B[B.length]={status:W,value:X[--Q],index:Q}):U&&ie===H[U-1][Q]?j.push(B[B.length]={status:A,value:G[--U],index:U}):(--Q,--U,k.sparse||B.push({status:"retained",value:X[Q]}));return h.a.Kc(j,O,!k.dontLimitMoves&&10*K),B.reverse()}return function(G,X,W){return W=typeof W=="boolean"?{dontLimitMoves:W}:W||{},G=G||[],X=X||[],G.length<X.length?b(G,X,"added","deleted",W):b(X,G,"deleted","added",W)}}(),h.b("utils.compareArrays",h.a.Pb),function(){function b(W,A,k,B,O){var H=[],U=h.$(function(){var K=A(k,O,h.a.Ua(H,W))||[];0<H.length&&(h.a.Xc(H,K),B&&h.u.G(B,null,[k,K,O])),H.length=0,h.a.Nb(H,K)},null,{l:W,Sa:function(){return!h.a.kd(H)}});return{Y:H,$:U.ja()?U:e}}var G=h.a.g.Z(),X=h.a.g.Z();h.a.ec=function(W,A,k,B,O,H){function U(Lt){Ze={Aa:Lt,pb:h.ta(be++)},$.push(Ze),j||Ie.push(Ze)}function K(Lt){Ze=ie[Lt],be!==Ze.pb.v()&&Ve.push(Ze),Ze.pb(be++),h.a.Ua(Ze.Y,W),$.push(Ze)}function Q(Lt,Vi){if(Lt)for(var ln=0,ge=Vi.length;ln<ge;ln++)h.a.D(Vi[ln].Y,function(Le){Lt(Le,ln,Vi[ln].Aa)})}A=A||[],typeof A.length>"u"&&(A=[A]),B=B||{};var ie=h.a.g.get(W,G),j=!ie,$=[],ne=0,be=0,Ce=[],me=[],_e=[],Ve=[],Ie=[],Ze,De=0;if(j)h.a.D(A,U);else{if(!H||ie&&ie._countWaitingForRemove){var Ke=h.a.Mb(ie,function(Lt){return Lt.Aa});H=h.a.Pb(Ke,A,{dontLimitMoves:B.dontLimitMoves,sparse:!0})}for(var Ke=0,rt,Xt,Ht;rt=H[Ke];Ke++)switch(Xt=rt.moved,Ht=rt.index,rt.status){case"deleted":for(;ne<Ht;)K(ne++);Xt===e&&(Ze=ie[ne],Ze.$&&(Ze.$.s(),Ze.$=e),h.a.Ua(Ze.Y,W).length&&(B.beforeRemove&&($.push(Ze),De++,Ze.Aa===X?Ze=null:_e.push(Ze)),Ze&&Ce.push.apply(Ce,Ze.Y))),ne++;break;case"added":for(;be<Ht;)K(ne++);Xt!==e?(me.push($.length),K(Xt)):U(rt.value)}for(;be<A.length;)K(ne++);$._countWaitingForRemove=De}h.a.g.set(W,G,$),Q(B.beforeMove,Ve),h.a.D(Ce,B.beforeRemove?h.oa:h.removeNode);var qe,mn,Dt;try{Dt=W.ownerDocument.activeElement}catch{}if(me.length)for(;(Ke=me.shift())!=e;){for(Ze=$[Ke],qe=e;Ke;)if((mn=$[--Ke].Y)&&mn.length){qe=mn[mn.length-1];break}for(A=0;ne=Ze.Y[A];qe=ne,A++)h.h.Wb(W,ne,qe)}for(Ke=0;Ze=$[Ke];Ke++){for(Ze.Y||h.a.extend(Ze,b(W,k,Ze.Aa,O,Ze.pb)),A=0;ne=Ze.Y[A];qe=ne,A++)h.h.Wb(W,ne,qe);!Ze.Ed&&O&&(O(Ze.Aa,Ze.Y,Ze.pb),Ze.Ed=!0,qe=Ze.Y[Ze.Y.length-1])}for(Dt&&W.ownerDocument.activeElement!=Dt&&Dt.focus(),Q(B.beforeRemove,_e),Ke=0;Ke<_e.length;++Ke)_e[Ke].Aa=X;Q(B.afterMove,Ve),Q(B.afterAdd,Ie)}}(),h.b("utils.setDomNodeChildrenFromArrayMapping",h.a.ec),h.ba=function(){this.allowTemplateRewriting=!1},h.ba.prototype=new h.ca,h.ba.prototype.constructor=h.ba,h.ba.prototype.renderTemplateSource=function(b,G,X,W){return(G=!(9>h.a.W)&&b.nodes?b.nodes():null)?h.a.la(G.cloneNode(!0).childNodes):(b=b.text(),h.a.ua(b,W))},h.ba.Ma=new h.ba,h.gc(h.ba.Ma),h.b("nativeTemplateEngine",h.ba),function(){h.$a=function(){var G=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(X,W,A,k){if(k=k||n,A=A||{},2>G)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var B=X.data("precompiled");return B||(B=X.text()||"",B=o.template(null,"{{ko_with $item.koBindingContext}}"+B+"{{/ko_with}}"),X.data("precompiled",B)),X=[W.$data],W=o.extend({koBindingContext:W},A.templateOptions),W=o.tmpl(B,X,W),W.appendTo(k.createElement("div")),o.fragments={},W},this.createJavaScriptEvaluatorBlock=function(X){return"{{ko_code ((function() { return "+X+" })()) }}"},this.addTemplate=function(X,W){n.write("<script type='text/html' id='"+X+"'>"+W+"<\/script>")},0<G&&(o.tmpl.tag.ko_code={open:"__.push($1 || '');"},o.tmpl.tag.ko_with={open:"with($1) {",close:"} "})},h.$a.prototype=new h.ca,h.$a.prototype.constructor=h.$a;var b=new h.$a;0<b.Hd&&h.gc(b),h.b("jqueryTmplTemplateEngine",h.$a)}()})})()})()})();var f1t=ko;typeof window<"u"?(ko=window.ko,typeof lM<"u"?window.ko=lM:delete window.ko):(ko=global.ko,typeof lM<"u"?global.ko=lM:delete global.ko);var vS=f1t;var V2o=_(T(),1);/** * @license * Knockout ES5 plugin - https://github.com/SteveSanderson/knockout-es5 * Copyright (c) Steve Sanderson * MIT license */var Y6="__knockoutObservables",H6="__knockoutSubscribable";function LCe(e,t){if(!e)throw new Error("When calling ko.track, you must pass an object as the first parameter.");var n=this,i=ZCe(e,!0);return t=t||Object.getOwnPropertyNames(e),t.forEach(function(o){if(!(o===Y6||o===H6)&&!(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&&p1t(n,a)}}),e}function ZCe(e,t){var n=e[Y6];return!n&&t&&(n={},Object.defineProperty(e,Y6,{value:n})),n}function h1t(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),LCe.call(i,e,[t]),e}function p1t(e,t){var n=null;e.computed(function(){n&&(n.dispose(),n=null);var i=t();i instanceof Array&&(n=b1t(e,t,i))})}function b1t(e,t,n){var i=y1t(e,n);return i.subscribe(t)}function y1t(e,t){var n=t[H6];if(!n){n=new e.subscribable,Object.defineProperty(t,H6,{value:n});var i={};g1t(t,n,i),x1t(e,t,n,i)}return n}function g1t(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 x1t(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 RCe(e,t){if(!e)return null;var n=ZCe(e,!1);return n&&n[t]||null}function _1t(e,t){var n=RCe(e,t);n&&n.valueHasMutated()}function T1t(e){e.track=LCe,e.getObservable=RCe,e.valueHasMutated=_1t,e.defineProperty=h1t}var dM={attachToKo:T1t};var Z2o=_(T(),1),GCe="http://www.w3.org/2000/svg",ECe="cesium-svgPath-svg",S1t={register:function(e){e.bindingHandlers.cesiumSvgPath={init:function(t,n){let i=document.createElementNS(GCe,"svg:svg");i.setAttribute("class",ECe);let o=document.createElementNS(GCe,"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",`${ECe} ${e.unwrap(r.css)}`)},disposeWhenNodeIsRemoved:t}),{controlsDescendantBindings:!0}}},e.virtualElements.allowedBindings.cesiumSvgPath=!0}},uM=S1t;dM.attachToKo(vS);uM.register(vS);var Se=vS;function mM(e){c(e)||(e=new _f),this._clock=e,this._eventHelper=new hr,this._eventHelper.add(e.onTick,this.synchronize,this),this.systemTime=Se.observable(ee.now()),this.systemTime.equalityComparer=ee.equals,this.startTime=Se.observable(e.startTime),this.startTime.equalityComparer=ee.equals,this.startTime.subscribe(function(t){e.startTime=t,this.synchronize()},this),this.stopTime=Se.observable(e.stopTime),this.stopTime.equalityComparer=ee.equals,this.stopTime.subscribe(function(t){e.stopTime=t,this.synchronize()},this),this.currentTime=Se.observable(e.currentTime),this.currentTime.equalityComparer=ee.equals,this.currentTime.subscribe(function(t){e.currentTime=t,this.synchronize()},this),this.multiplier=Se.observable(e.multiplier),this.multiplier.subscribe(function(t){e.multiplier=t,this.synchronize()},this),this.clockStep=Se.observable(e.clockStep),this.clockStep.subscribe(function(t){e.clockStep=t,this.synchronize()},this),this.clockRange=Se.observable(e.clockRange),this.clockRange.subscribe(function(t){e.clockRange=t,this.synchronize()},this),this.canAnimate=Se.observable(e.canAnimate),this.canAnimate.subscribe(function(t){e.canAnimate=t,this.synchronize()},this),this.shouldAnimate=Se.observable(e.shouldAnimate),this.shouldAnimate.subscribe(function(t){e.shouldAnimate=t,this.synchronize()},this),Se.track(this,["systemTime","startTime","stopTime","currentTime","multiplier","clockStep","clockRange","canAnimate","shouldAnimate"])}Object.defineProperties(mM.prototype,{clock:{get:function(){return this._clock}}});mM.prototype.synchronize=function(){let e=this._clock;this.systemTime=ee.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};mM.prototype.isDestroyed=function(){return!1};mM.prototype.destroy=function(){this._eventHelper.removeAll(),he(this)};var fM=mM;var M2o=_(T(),1);function C1t(){this.canExecute=void 0,this.beforeExecute=void 0,this.afterExecute=void 0,L.throwInstantiationError()}var z6=C1t;var O2o=_(T(),1);function V1t(e,t){if(!c(e))throw new L("func is required.");t=t??!0;let n=new ye,i=new ye;function o(){if(!o.canExecute)throw new L("Cannot execute command, canExecute is false.");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,Se.track(o,["canExecute"]),Object.defineProperties(o,{beforeExecute:{value:n},afterExecute:{value:i}}),o}var Rn=V1t;var Y2o=_(T(),1);var HL={};HL.createCheckbox=function(e,t,n){C.typeOf.string("labelText",e),C.typeOf.string("checkedBinding",t);let i=document.createElement("div"),o=document.createElement("label"),r=document.createElement("input");r.type="checkbox";let s=`checked: ${t}`;return c(n)&&(s+=`, enable: ${n}`),r.setAttribute("data-bind",s),o.appendChild(r),o.appendChild(document.createTextNode(e)),i.appendChild(o),i};HL.createSection=function(e,t,n,i){C.defined("panel",e),C.typeOf.string("headerText",t),C.typeOf.string("sectionVisibleBinding",n),C.typeOf.string("toggleSectionVisibilityBinding",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};HL.createRangeInput=function(e,t,n,i,o,r){C.typeOf.string("rangeText",e),C.typeOf.string("sliderValueBinding",t),C.typeOf.number("min",n),C.typeOf.number("max",i),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 l=document.createElement("div");l.appendChild(a);let d=document.createElement("div");return d.className="cesium-cesiumInspector-slider",d.appendChild(document.createTextNode(e)),d.appendChild(s),d.appendChild(l),d};HL.createRangeInputWithDynamicMinMax=function(e,t,n,i){C.typeOf.string("rangeText",e),C.typeOf.string("sliderValueBinding",t),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};HL.createButton=function(e,t,n){C.typeOf.string("buttonText",e),C.typeOf.string("clickedBinding",t);let i=document.createElement("button");i.type="button",i.textContent=e,i.className="cesium-cesiumInspector-pickButton";let o=`click: ${t}`;return c(n)&&(o+=`, css: {"cesium-cesiumInspector-pickButtonHighlight" : ${n}}`),i.setAttribute("data-bind",o),i};var sd=HL;var K2o=_(T(),1);function L1t(e,t,n,i,o){return n.call(i,e[t]),Se.getObservable(e,t).subscribe(n,i,o)}var Za=L1t;var q2o=_(T(),1);function XCe(e,t){if(!c(e))throw new L("command is required.");this._command=e,t=t??z.EMPTY_OBJECT,this.toggled=t.toggled??!1,this.tooltip=t.tooltip??"",Se.track(this,["toggled","tooltip"])}Object.defineProperties(XCe.prototype,{command:{get:function(){return this._command}}});var Qg=XCe;var nvo=_(T(),1);var FS="http://www.w3.org/2000/svg",wCe="http://www.w3.org/1999/xlink",VB,hM=Y.fromCssColorString("rgba(247,250,255,0.384)"),LB=Y.fromCssColorString("rgba(143,191,255,0.216)"),K6=Y.fromCssColorString("rgba(153,197,255,0.098)"),ZB=Y.fromCssColorString("rgba(255,255,255,0.086)"),Z1t=Y.fromCssColorString("rgba(255,255,255,0.267)"),R1t=Y.fromCssColorString("rgba(255,255,255,0)"),ICe=Y.fromCssColorString("rgba(66,67,68,0.3)"),WCe=Y.fromCssColorString("rgba(0,0,0,0.5)");function jg(e){return Y.fromCssColorString(window.getComputedStyle(e).getPropertyValue("color"))}var pM={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 qf(e){let t=document.createElementNS(FS,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(qf(e.children[o]))}else n.indexOf("xlink:")===0?t.setAttributeNS(wCe,n.substring(6),e[n]):n==="textContent"?t.textContent=e[n]:t.setAttribute(n,e[n]);return t}function J6(e,t,n){let i=document.createElementNS(FS,"text");i.setAttribute("x",e),i.setAttribute("y",t),i.setAttribute("class","cesium-animation-svgText");let o=document.createElementNS(FS,"tspan");return o.textContent=n,i.appendChild(o),i}function G1t(e,t,n){e.setAttribute("transform",`translate(100,100) rotate(${n})`),t.setAttribute("transform",`rotate(${n})`)}var RB=new Y;function cs(e,t){let n=t.alpha,i=1-n;return RB.red=e.red*i+t.red*n,RB.green=e.green*i+t.green*n,RB.blue=e.blue*i+t.blue*n,RB.toCssColorString()}function Q6(e,t,n){let i=pM[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 qf(o)}function E1t(e,t,n){let i=pM[n],o=pM.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 qf(r)}function X1t(e,t){let n=e._viewModel,i=n.shuttleRingDragging;if(!(i&&VB!==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(),l,d;if(t.type==="touchstart"||t.type==="touchmove"?(l=t.touches[0].clientX,d=t.touches[0].clientY):(l=t.clientX,d=t.clientY),!i&&(l>a.right||l<a.left||d<a.top||d>a.bottom))return;let u=e._shuttleRingPointer.getBoundingClientRect(),f=l-o-a.left,p=d-r-a.top,y=Math.atan2(p,f)*180/Math.PI+90;y>180&&(y-=360);let h=n.shuttleRingAngle;i||l<u.right&&l>u.left&&d>u.top&&d<u.bottom?(VB=e,n.shuttleRingDragging=!0,n.shuttleRingAngle=y):y<h?n.slower():y>h&&n.faster(),t.preventDefault()}else e===VB&&(VB=void 0),n.shuttleRingDragging=!1}function W0(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=[Za(t,"toggled",this.setToggled,this),Za(t,"tooltip",this.setTooltip,this),Za(t.command,"canExecute",this.setEnabled,this)]}W0.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();he(this)};W0.prototype.isDestroyed=function(){return!1};W0.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")}};W0.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")))};W0.prototype.setTooltip=function(e){this.svgElement.getElementsByTagName("title")[0].textContent=e};function zL(e,t){if(!c(e))throw new L("container is required.");if(!c(t))throw new L("viewModel is required.");e=Wn(e),this._viewModel=t,this._container=e,this._centerX=0,this._centerY=0,this._defsElement=void 0,this._svgNode=void 0,this._topG=void 0,this._lastHeight=void 0,this._lastWidth=void 0;let n=e.ownerDocument,i=document.createElement("style");i.textContent=".cesium-animation-rectButton .cesium-animation-buttonGlow { filter: url(#animation_blurred); }.cesium-animation-rectButton .cesium-animation-buttonMain { fill: url(#animation_buttonNormal); }.cesium-animation-buttonToggled .cesium-animation-buttonMain { fill: url(#animation_buttonToggled); }.cesium-animation-rectButton:hover .cesium-animation-buttonMain { fill: url(#animation_buttonHovered); }.cesium-animation-buttonDisabled .cesium-animation-buttonMain { fill: url(#animation_buttonDisabled); }.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshGradient); }.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshHovered); }.cesium-animation-shuttleRingPointer { fill: url(#animation_shuttleRingPointerGradient); }.cesium-animation-shuttleRingPausePointer { fill: url(#animation_shuttleRingPointerPaused); }.cesium-animation-knobOuter { fill: url(#animation_knobOuter); }.cesium-animation-knobInner { fill: url(#animation_knobInner); }",n.head.insertBefore(i,n.head.childNodes[0]);let o=document.createElement("div");o.className="cesium-animation-theme",o.innerHTML='<div class="cesium-animation-themeNormal"></div><div class="cesium-animation-themeHover"></div><div class="cesium-animation-themeSelect"></div><div class="cesium-animation-themeDisabled"></div><div class="cesium-animation-themeKnob"></div><div class="cesium-animation-themePointer"></div><div class="cesium-animation-themeSwoosh"></div><div class="cesium-animation-themeSwooshHover"></div>',this._theme=o,this._themeNormal=o.childNodes[0],this._themeHover=o.childNodes[1],this._themeSelect=o.childNodes[2],this._themeDisabled=o.childNodes[3],this._themeKnob=o.childNodes[4],this._themePointer=o.childNodes[5],this._themeSwoosh=o.childNodes[6],this._themeSwooshHover=o.childNodes[7];let r=document.createElementNS(FS,"svg:svg");this._svgNode=r,r.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink",wCe);let s=document.createElementNS(FS,"g");this._topG=s,this._realtimeSVG=new W0(E1t(3,4,"animation_pathClock"),t.playRealtimeViewModel),this._playReverseSVG=new W0(Q6(44,99,"animation_pathPlayReverse"),t.playReverseViewModel),this._playForwardSVG=new W0(Q6(124,99,"animation_pathPlay"),t.playForwardViewModel),this._pauseSVG=new W0(Q6(84,99,"animation_pathPause"),t.pauseViewModel);let a=document.createElementNS(FS,"g");a.appendChild(this._realtimeSVG.svgElement),a.appendChild(this._playReverseSVG.svgElement),a.appendChild(this._playForwardSVG.svgElement),a.appendChild(this._pauseSVG.svgElement);let l=qf({tagName:"circle",class:"cesium-animation-shuttleRingBack",cx:100,cy:100,r:99});this._shuttleRingBackPanel=l;let d=pM.animation_pathSwooshFX,u=pM.animation_pathPointer,f=qf({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=f,this._shuttleRingPointer=qf({class:"cesium-animation-shuttleRingPointer",id:"animation_pathPointer",tagName:u.tagName,d:u.d});let p=qf({tagName:"g",transform:"translate(100,100)"});this._knobOuter=qf({tagName:"circle",class:"cesium-animation-knobOuter",cx:0,cy:0,r:71});let y=61,h=qf({tagName:"circle",class:"cesium-animation-knobInner",cx:0,cy:0,r:y});this._knobDate=J6(0,-24,""),this._knobTime=J6(0,-7,""),this._knobStatus=J6(0,-41,"");let g=qf({tagName:"circle",class:"cesium-animation-blank",cx:0,cy:0,r:y}),x=document.createElementNS(FS,"g");x.setAttribute("class","cesium-animation-shuttleRingG"),e.appendChild(o),s.appendChild(x),s.appendChild(p),s.appendChild(a),x.appendChild(l),x.appendChild(f),x.appendChild(this._shuttleRingPointer),p.appendChild(this._knobOuter),p.appendChild(h),p.appendChild(this._knobDate),p.appendChild(this._knobTime),p.appendChild(this._knobStatus),p.appendChild(g),r.appendChild(s),e.appendChild(r);let S=this;function V(v){X1t(S,v)}this._mouseCallback=V,l.addEventListener("mousedown",V,!0),l.addEventListener("touchstart",V,!0),f.addEventListener("mousedown",V,!0),f.addEventListener("touchstart",V,!0),n.addEventListener("mousemove",V,!0),n.addEventListener("touchmove",V,!0),n.addEventListener("mouseup",V,!0),n.addEventListener("touchend",V,!0),n.addEventListener("touchcancel",V,!0),this._shuttleRingPointer.addEventListener("mousedown",V,!0),this._shuttleRingPointer.addEventListener("touchstart",V,!0),this._knobOuter.addEventListener("mousedown",V,!0),this._knobOuter.addEventListener("touchstart",V,!0);let Z=this._knobTime.childNodes[0],R=this._knobDate.childNodes[0],E=this._knobStatus.childNodes[0],I;this._subscriptions=[Za(t.pauseViewModel,"toggled",function(v){I!==v&&(I=v,I?S._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPausePointer"):S._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPointer"))}),Za(t,"shuttleRingAngle",function(v){G1t(S._shuttleRingPointer,S._knobOuter,v)}),Za(t,"dateLabel",function(v){R.textContent!==v&&(R.textContent=v)}),Za(t,"timeLabel",function(v){Z.textContent!==v&&(Z.textContent=v)}),Za(t,"multiplierLabel",function(v){E.textContent!==v&&(E.textContent=v)})],this.applyThemeChanges(),this.resize()}Object.defineProperties(zL.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});zL.prototype.isDestroyed=function(){return!1};zL.prototype.destroy=function(){c(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 he(this)};zL.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,l=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},${l})`),this._centerX=Math.max(1,100*a),this._centerY=Math.max(1,100*l),this._lastHeight=e,this._lastWidth=t};zL.prototype.applyThemeChanges=function(){let e=this._container.ownerDocument;if(!e.body.contains(this._container)){if(c(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=jg(this._themeNormal),n=jg(this._themeHover),i=jg(this._themeSelect),o=jg(this._themeDisabled),r=jg(this._themeKnob),s=jg(this._themePointer),a=jg(this._themeSwoosh),l=jg(this._themeSwooshHover),d=qf({tagName:"defs",children:[{id:"animation_buttonNormal",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":cs(t,hM)},{tagName:"stop",offset:"12%","stop-color":cs(t,LB)},{tagName:"stop",offset:"46%","stop-color":cs(t,K6)},{tagName:"stop",offset:"81%","stop-color":cs(t,ZB)}]},{id:"animation_buttonHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":cs(n,hM)},{tagName:"stop",offset:"12%","stop-color":cs(n,LB)},{tagName:"stop",offset:"46%","stop-color":cs(n,K6)},{tagName:"stop",offset:"81%","stop-color":cs(n,ZB)}]},{id:"animation_buttonToggled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":cs(i,hM)},{tagName:"stop",offset:"12%","stop-color":cs(i,LB)},{tagName:"stop",offset:"46%","stop-color":cs(i,K6)},{tagName:"stop",offset:"81%","stop-color":cs(i,ZB)}]},{id:"animation_buttonDisabled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":cs(o,Z1t)},{tagName:"stop",offset:"75%","stop-color":cs(o,R1t)}]},{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":l.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":l.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":l.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":cs(s,WCe)},{tagName:"stop",offset:"100%","stop-color":cs(s,WCe)}]},{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":cs(r,hM)},{tagName:"stop",offset:"60%","stop-color":cs(r,ICe)},{tagName:"stop",offset:"85%","stop-color":cs(r,LB)}]},{id:"animation_knobInner",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":cs(r,ICe)},{tagName:"stop",offset:"60%","stop-color":cs(r,hM)},{tagName:"stop",offset:"85%","stop-color":cs(r,ZB)}]}]});c(this._defsElement)?this._svgNode.replaceChild(d,this._defsElement):this._svgNode.appendChild(d),this._defsElement=d};var bM=zL;var cvo=_(T(),1);var I1t=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],qg=15,KL=105;function PCe(e,t){return e-t}function j6(e,t){let n=Wo(t,e,PCe);return n<0?~n:n}function W1t(e,t){if(Math.abs(e)<=qg)return e/qg;let n=qg,i=KL,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 w1t(e,t,n){if(n.clockStep===fo.SYSTEM_CLOCK)return qg;if(Math.abs(e)<=1)return e*qg;let i=t[t.length-1];e>i?e=i:e<-i&&(e=-i);let o=qg,r=KL,s,a=0,l;return e>0?(s=Math.log(i),l=(s-a)/(r-o),(Math.log(e)-a)/l+o):(s=Math.log(-t[0]),l=(s-a)/(r-o),-((Math.log(Math.abs(e))-a)/l+o))}function Tm(e){if(!c(e))throw new L("clockViewModel is required.");let t=this;this._clockViewModel=e,this._allShuttleRingTicks=[],this._dateFormatter=Tm.defaultDateFormatter,this._timeFormatter=Tm.defaultTimeFormatter,this.shuttleRingDragging=!1,this.snapToTicks=!1,Se.track(this,["_allShuttleRingTicks","_dateFormatter","_timeFormatter","shuttleRingDragging","snapToTicks"]),this._sortedFilteredPositiveTicks=[],this.setShuttleRingTicks(Tm.defaultTicks),this.timeLabel=void 0,Se.defineProperty(this,"timeLabel",function(){return t._timeFormatter(t._clockViewModel.currentTime,t)}),this.dateLabel=void 0,Se.defineProperty(this,"dateLabel",function(){return t._dateFormatter(t._clockViewModel.currentTime,t)}),this.multiplierLabel=void 0,Se.defineProperty(this,"multiplierLabel",function(){let s=t._clockViewModel;if(s.clockStep===fo.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,Se.defineProperty(this,"shuttleRingAngle",{get:function(){return w1t(e.multiplier,t._allShuttleRingTicks,e)},set:function(s){s=Math.max(Math.min(s,KL),-KL);let a=t._allShuttleRingTicks,l=t._clockViewModel;if(l.clockStep=fo.SYSTEM_CLOCK_MULTIPLIER,Math.abs(s)===KL){l.multiplier=s>0?a[a.length-1]:a[0];return}let d=W1t(s,a);if(t.snapToTicks)d=a[j6(d,a)];else if(d!==0){let u=Math.abs(d);if(u>100){let f=u.toFixed(0).length-2,p=Math.pow(10,f);d=Math.round(d/p)*p|0}else u>qg?d=Math.round(d):u>1?d=+d.toFixed(1):u>0&&(d=+d.toFixed(2))}l.multiplier=d}}),this._canAnimate=void 0,Se.defineProperty(this,"_canAnimate",function(){let s=t._clockViewModel,a=s.clockRange;if(t.shuttleRingDragging||a===zr.UNBOUNDED)return!0;let l=s.multiplier,d=s.currentTime,u=s.startTime,f=!1;if(a===zr.LOOP_STOP)f=ee.greaterThan(d,u)||d.equals(u)&&l>0;else{let p=s.stopTime;f=ee.greaterThan(d,u)&&ee.lessThan(d,p)||d.equals(u)&&l>0||d.equals(p)&&l<0}return f||(s.shouldAnimate=!1),f}),this._isSystemTimeAvailable=void 0,Se.defineProperty(this,"_isSystemTimeAvailable",function(){let s=t._clockViewModel;if(s.clockRange===zr.UNBOUNDED)return!0;let l=s.systemTime;return ee.greaterThanOrEquals(l,s.startTime)&&ee.lessThanOrEquals(l,s.stopTime)}),this._isAnimating=void 0,Se.defineProperty(this,"_isAnimating",function(){return t._clockViewModel.shouldAnimate&&(t._canAnimate||t.shuttleRingDragging)});let n=Rn(function(){let s=t._clockViewModel;s.shouldAnimate?s.shouldAnimate=!1:t._canAnimate&&(s.shouldAnimate=!0)});this._pauseViewModel=new Qg(n,{toggled:Se.computed(function(){return!t._isAnimating}),tooltip:"Pause"});let i=Rn(function(){let s=t._clockViewModel,a=s.multiplier;a>0&&(s.multiplier=-a),s.shouldAnimate=!0});this._playReverseViewModel=new Qg(i,{toggled:Se.computed(function(){return t._isAnimating&&e.multiplier<0}),tooltip:"Play Reverse"});let o=Rn(function(){let s=t._clockViewModel,a=s.multiplier;a<0&&(s.multiplier=-a),s.shouldAnimate=!0});this._playForwardViewModel=new Qg(o,{toggled:Se.computed(function(){return t._isAnimating&&e.multiplier>0&&e.clockStep!==fo.SYSTEM_CLOCK}),tooltip:"Play Forward"});let r=Rn(function(){t._clockViewModel.clockStep=fo.SYSTEM_CLOCK},Se.getObservable(this,"_isSystemTimeAvailable"));this._playRealtimeViewModel=new Qg(r,{toggled:Se.computed(function(){return e.clockStep===fo.SYSTEM_CLOCK}),tooltip:Se.computed(function(){return t._isSystemTimeAvailable?"Today (real-time)":"Current time not in range"})}),this._slower=Rn(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,l=s.multiplier,d=j6(l,a)-1;d>=0&&(s.multiplier=a[d])}),this._faster=Rn(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,l=s.multiplier,d=j6(l,a)+1;d<a.length&&(s.multiplier=a[d])})}Tm.defaultDateFormatter=function(e,t){let n=ee.toGregorianDate(e);return`${I1t[n.month-1]} ${n.day} ${n.year}`};Tm.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];Tm.defaultTimeFormatter=function(e,t){let n=ee.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`};Tm.prototype.getShuttleRingTicks=function(){return this._sortedFilteredPositiveTicks.slice(0)};Tm.prototype.setShuttleRingTicks=function(e){if(!c(e))throw new L("positiveTicks is required.");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(PCe);let s=[];for(n=r.length,t=n-1;t>=0;--t)i=r[t],i!==0&&s.push(-i);Array.prototype.push.apply(s,r),this._allShuttleRingTicks=s};Object.defineProperties(Tm.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){if(typeof e!="function")throw new L("dateFormatter must be a function");this._dateFormatter=e}},timeFormatter:{get:function(){return this._timeFormatter},set:function(e){if(typeof e!="function")throw new L("timeFormatter must be a function");this._timeFormatter=e}}});Tm._maxShuttleRingAngle=KL;Tm._realtimeShuttleRingAngle=qg;var yM=Tm;var gvo=_(T(),1);var fvo=_(T(),1);function vCe(e){e=e??z.EMPTY_OBJECT;let t=e.globe,n=e.imageryProviderViewModels??z.EMPTY_ARRAY,i=e.terrainProviderViewModels??z.EMPTY_ARRAY;if(!c(t))throw new L("globe is required");this._globe=t,this.imageryProviderViewModels=n.slice(0),this.terrainProviderViewModels=i.slice(0),this.dropDownVisible=!1,Se.track(this,["imageryProviderViewModels","terrainProviderViewModels","dropDownVisible"]);let o=Se.getObservable(this,"imageryProviderViewModels"),r=Se.pureComputed(function(){let f=o(),p={},y;for(y=0;y<f.length;y++){let x=f[y],S=x.category;c(p[S])?p[S].push(x):p[S]=[x]}let h=Object.keys(p),g=[];for(y=0;y<h.length;y++){let x=h[y];g.push({name:x,providers:p[x]})}return g});this._imageryProviders=r;let s=Se.getObservable(this,"terrainProviderViewModels"),a=Se.pureComputed(function(){let f=s(),p={},y;for(y=0;y<f.length;y++){let x=f[y],S=x.category;c(p[S])?p[S].push(x):p[S]=[x]}let h=Object.keys(p),g=[];for(y=0;y<h.length;y++){let x=h[y];g.push({name:x,providers:p[x]})}return g});this._terrainProviders=a,this.buttonTooltip=void 0,Se.defineProperty(this,"buttonTooltip",function(){let f=this.selectedImagery,p=this.selectedTerrain,y=c(f)?f.name:void 0,h=c(p)?p.name:void 0;return c(y)&&c(h)?`${y} ${h}`:c(y)?y:h}),this.buttonImageUrl=void 0,Se.defineProperty(this,"buttonImageUrl",function(){let f=this.selectedImagery;if(c(f))return f.iconUrl}),this.selectedImagery=void 0;let l=Se.observable();this._currentImageryLayers=[],Se.defineProperty(this,"selectedImagery",{get:function(){return l()},set:function(f){if(l()===f){this.dropDownVisible=!1;return}let p,y=this._currentImageryLayers,h=y.length,g=this._globe.imageryLayers,x=!1;for(p=0;p<h;p++){let S=g.length;for(let V=0;V<S;V++){let Z=g.get(V);if(Z===y[p]){g.remove(Z),x=!0;break}}}if(c(f)){let S=f.creationCommand();if(Array.isArray(S)){let V=S.length;for(this._currentImageryLayers=[],p=V-1;p>=0;p--){let Z=Ya.fromProviderAsync(S[p]);g.add(Z,0),this._currentImageryLayers.push(Z)}}else{this._currentImageryLayers=[];let V=Ya.fromProviderAsync(S);if(V.name=f.name,x)g.add(V,0);else{let Z=g.get(0);c(Z)&&g.remove(Z),g.add(V,0)}this._currentImageryLayers.push(V)}}l(f),this.dropDownVisible=!1}}),this.selectedTerrain=void 0;let d=Se.observable();Se.defineProperty(this,"selectedTerrain",{get:function(){return d()},set:function(f){if(d()===f){this.dropDownVisible=!1;return}let p;if(c(f)&&(p=f.creationCommand()),c(p)&&!c(p.then))this._globe.depthTestAgainstTerrain=!(p instanceof ep),this._globe.terrainProvider=p;else if(c(p)){let y=!1,h=this._globe.terrainProviderChanged.addEventListener(()=>{y=!0,h()}),x=new sM(p).readyEvent.addEventListener(S=>{y||(this._globe.depthTestAgainstTerrain=!(S instanceof ep),this._globe.terrainProvider=S,x())})}d(f),this.dropDownVisible=!1}});let u=this;this._toggleDropDown=Rn(function(){u.dropDownVisible=!u.dropDownVisible}),this.selectedImagery=e.selectedImageryProviderViewModel??n[0],this.selectedTerrain=e.selectedTerrainProviderViewModel}Object.defineProperties(vCe.prototype,{toggleDropDown:{get:function(){return this._toggleDropDown}},globe:{get:function(){return this._globe}}});var gM=vCe;function GB(e,t){if(!c(e))throw new L("container is required.");e=Wn(e);let n=new gM(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 l=document.createElement("div");l.className="cesium-baseLayerPicker-category",a.appendChild(l);let d=document.createElement("div");d.className="cesium-baseLayerPicker-categoryTitle",d.setAttribute("data-bind","text: name"),l.appendChild(d);let u=document.createElement("div");u.className="cesium-baseLayerPicker-choices",u.setAttribute("data-bind","foreach: providers"),l.appendChild(u);let f=document.createElement("div");f.className="cesium-baseLayerPicker-item",f.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(f);let p=document.createElement("img");p.className="cesium-baseLayerPicker-itemIcon",p.setAttribute("data-bind","attr: { src: iconUrl }"),p.setAttribute("draggable","false"),f.appendChild(p);let y=document.createElement("div");y.className="cesium-baseLayerPicker-itemLabel",y.setAttribute("data-bind","text: name"),f.appendChild(y);let h=document.createElement("div");h.className="cesium-baseLayerPicker-sectionTitle",h.setAttribute("data-bind","visible: terrainProviderViewModels.length > 0"),h.innerHTML="Terrain",r.appendChild(h);let g=document.createElement("div");g.className="cesium-baseLayerPicker-section",g.setAttribute("data-bind","foreach: _terrainProviders"),r.appendChild(g);let x=document.createElement("div");x.className="cesium-baseLayerPicker-category",g.appendChild(x);let S=document.createElement("div");S.className="cesium-baseLayerPicker-categoryTitle",S.setAttribute("data-bind","text: name"),x.appendChild(S);let V=document.createElement("div");V.className="cesium-baseLayerPicker-choices",V.setAttribute("data-bind","foreach: providers"),x.appendChild(V);let Z=document.createElement("div");Z.className="cesium-baseLayerPicker-item",Z.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedTerrain },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedTerrain = $data; }'),V.appendChild(Z);let R=document.createElement("img");R.className="cesium-baseLayerPicker-itemIcon",R.setAttribute("data-bind","attr: { src: iconUrl }"),R.setAttribute("draggable","false"),Z.appendChild(R);let E=document.createElement("div");E.className="cesium-baseLayerPicker-itemLabel",E.setAttribute("data-bind","text: name"),Z.appendChild(E),Se.applyBindings(n,i),Se.applyBindings(n,r),this._viewModel=n,this._container=e,this._element=i,this._dropPanel=r,this._closeDropDown=function(I){i.contains(I.target)||r.contains(I.target)||(n.dropDownVisible=!1)},Ot.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(GB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});GB.prototype.isDestroyed=function(){return!1};GB.prototype.destroy=function(){return Ot.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Se.cleanNode(this._element),Se.cleanNode(this._dropPanel),this._container.removeChild(this._element),this._container.removeChild(this._dropPanel),he(this)};var xM=GB;var Rvo=_(T(),1);var Cvo=_(T(),1);function FCe(e){if(!c(e.name))throw new L("options.name is required.");if(!c(e.tooltip))throw new L("options.tooltip is required.");if(!c(e.iconUrl))throw new L("options.iconUrl is required.");if(typeof e.creationFunction!="function")throw new L("options.creationFunction is required.");let t=e.creationFunction;c(t.canExecute)||(t=Rn(t)),this._creationCommand=t,this.name=e.name,this.tooltip=e.tooltip,this.iconUrl=e.iconUrl,this._category=e.category??"",Se.track(this,["name","tooltip","iconUrl"])}Object.defineProperties(FCe.prototype,{creationCommand:{get:function(){return this._creationCommand}},category:{get:function(){return this._category}}});var ls=FCe;function P1t(){let e=[],t=devicePixelRatio>=2;return e.push(new ls({name:"Bing Maps Aerial",iconUrl:on("Widgets/Images/ImageryProviders/bingAerial.png"),tooltip:"Bing Maps aerial imagery, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return m0({style:u0.AERIAL})}})),e.push(new ls({name:"Bing Maps Aerial with Labels",iconUrl:on("Widgets/Images/ImageryProviders/bingAerialLabels.png"),tooltip:"Bing Maps aerial imagery with labels, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return m0({style:u0.AERIAL_WITH_LABELS})}})),e.push(new ls({name:"Bing Maps Roads",iconUrl:on("Widgets/Images/ImageryProviders/bingRoads.png"),tooltip:"Bing Maps standard road maps, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return m0({style:u0.ROAD})}})),e.push(new ls({name:"ArcGIS World Imagery",iconUrl:on("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 l0.fromBasemapType(Mf.SATELLITE,{enablePickFeatures:!1})}})),e.push(new ls({name:"ArcGIS World Hillshade",iconUrl:on("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 l0.fromBasemapType(Mf.HILLSHADE,{enablePickFeatures:!1})}})),e.push(new ls({name:"Esri World Ocean",iconUrl:on("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 l0.fromBasemapType(Mf.OCEANS,{enablePickFeatures:!1})}})),e.push(new ls({name:"Open\xADStreet\xADMap",iconUrl:on("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 I0({url:"https://tile.openstreetmap.org/"})}})),e.push(new ls({name:"Stadia x Stamen Watercolor",iconUrl:on("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 I0({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:on("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 I0({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:on("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 I0({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:on("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 I0({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:on("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 d0.fromAssetId(3954)}})),e.push(new ls({name:"Blue Marble",iconUrl:on("Widgets/Images/ImageryProviders/blueMarble.png"),tooltip:"Blue Marble Next Generation July, 2004 imagery from NASA.",category:"Cesium ion",creationFunction:function(){return d0.fromAssetId(3845)}})),e.push(new ls({name:"Earth at night",iconUrl:on("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 d0.fromAssetId(3812)}})),e.push(new ls({name:"Natural Earth\xA0II",iconUrl:on("Widgets/Images/ImageryProviders/naturalEarthII.png"),tooltip:`Natural Earth II, darkened for contrast. http://www.naturalearthdata.com/`,category:"Cesium ion",creationFunction:function(){return Rg.fromUrl(on("Assets/Textures/NaturalEarthII"))}})),e}var _M=P1t;var Ivo=_(T(),1);function v1t(){let e=[];return e.push(new ls({name:"WGS84 Ellipsoid",iconUrl:on("Widgets/Images/TerrainProviders/Ellipsoid.png"),tooltip:"WGS84 standard ellipsoid, also known as EPSG:4326",category:"Cesium ion",creationFunction:function(){return new ep({ellipsoid:re.WGS84})}})),e.push(new ls({name:"Cesium World Terrain",iconUrl:on("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 TS({requestWaterMask:!0,requestVertexNormals:!0})}})),e}var TM=v1t;var Uvo=_(T(),1);var vvo=_(T(),1);function F1t(e){return function(t){let n=e._scene.pick(t.position);c(n)&&n.primitive instanceof bs&&(e.tileset=n.primitive),e.pickActive=!1}}function MCe(e,t){t?e._eventHandler.setInputAction(function(n){let i=e._scene.pick(n.endPosition);c(i)&&i.primitive instanceof bs&&(e.tileset=i.primitive)},Vn.MOUSE_MOVE):(e._eventHandler.removeInputAction(Vn.MOUSE_MOVE),e.picking=e.picking)}var A1t={maximumFractionDigits:3};function SM(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,A1t):Math.round(t).toLocaleString()}function CM(e,t){if(!c(e))return"";let n=t?e._statisticsPerPass[Fo.PICK]:e._statisticsPerPass[Fo.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>${SM(n.geometryByteLength)}</li><li><strong>Texture Memory (MB): </strong>${SM(n.texturesByteLength)}</li><li><strong>Batch Table Memory (MB): </strong>${SM(n.batchTableByteLength)}</li>`,i+="</ul>"),i}function NCe(){let e=Ri.statistics;return` <ul class="cesium-cesiumInspector-statistics"> <li><strong>Geometry Memory (MB): </strong>${SM(e.geometryByteLength)}</li> <li><strong>Texture Memory (MB): </strong>${SM(e.texturesByteLength)}</li> </ul> `}var M1t=[{text:"Highlight",value:Wl.HIGHLIGHT},{text:"Replace",value:Wl.REPLACE},{text:"Mix",value:Wl.MIX}],ACe=new Y(1,1,0,.4),N1t=new Y,EB=new Y;function Ra(e,t){C.typeOf.object("scene",e),C.typeOf.object("performanceContainer",t);let n=this,i=e.canvas;this._eventHandler=new tu(i),this._scene=e,this._performanceContainer=t,this._canvas=i,this._performanceDisplay=new p0({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,Se.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=Se.observable({}),this.properties=[],Se.defineProperty(this,"properties",function(){let U=[],K=n._properties();for(let Q in K)K.hasOwnProperty(Q)&&U.push(Q);return U});let o=Se.observable();Se.defineProperty(this,"dynamicScreenSpaceError",{get:function(){return o()},set:function(U){o(U),c(n._tileset)&&(n._tileset.dynamicScreenSpaceError=U)}}),this.dynamicScreenSpaceError=!1;let r=Se.observable();Se.defineProperty(this,"colorBlendMode",{get:function(){return r()},set:function(U){r(U),c(n._tileset)&&(n._tileset.colorBlendMode=U,n._scene.requestRender())}}),this.colorBlendMode=Wl.HIGHLIGHT;let s=Se.observable(),a=Se.observable();Se.defineProperty(this,"picking",{get:function(){return a()},set:function(U){a(U),U?n._eventHandler.setInputAction(function(K){let Q=e.pick(K.endPosition);if(Q instanceof Us?(n.feature=Q,n.tile=Q.content.tile):c(Q)&&c(Q.content)?(n.feature=void 0,n.tile=Q.content.tile):(n.feature=void 0,n.tile=void 0),!!c(n._tileset)){if(s&&c(Q)&&c(Q.content)){let ie;e.pickPositionSupported&&(ie=e.pickPosition(K.endPosition),c(ie)&&(n._tileset.debugPickPosition=ie)),n._tileset.debugPickedTile=Q.content.tile}else n._tileset.debugPickedTile=void 0;n._scene.requestRender()}},Vn.MOUSE_MOVE):(n.feature=void 0,n.tile=void 0,n._eventHandler.removeInputAction(Vn.MOUSE_MOVE))}}),this.picking=!0;let l=Se.observable();Se.defineProperty(this,"colorize",{get:function(){return l()},set:function(U){l(U),c(n._tileset)&&(n._tileset.debugColorizeTiles=U,n._scene.requestRender())}}),this.colorize=!1;let d=Se.observable();Se.defineProperty(this,"wireframe",{get:function(){return d()},set:function(U){d(U),c(n._tileset)&&(n._tileset.debugWireframe=U,n._scene.requestRender())}}),this.wireframe=!1;let u=Se.observable();Se.defineProperty(this,"showBoundingVolumes",{get:function(){return u()},set:function(U){u(U),c(n._tileset)&&(n._tileset.debugShowBoundingVolume=U,n._scene.requestRender())}}),this.showBoundingVolumes=!1;let f=Se.observable();Se.defineProperty(this,"showContentBoundingVolumes",{get:function(){return f()},set:function(U){f(U),c(n._tileset)&&(n._tileset.debugShowContentBoundingVolume=U,n._scene.requestRender())}}),this.showContentBoundingVolumes=!1;let p=Se.observable();Se.defineProperty(this,"showRequestVolumes",{get:function(){return p()},set:function(U){p(U),c(n._tileset)&&(n._tileset.debugShowViewerRequestVolume=U,n._scene.requestRender())}}),this.showRequestVolumes=!1;let y=Se.observable();Se.defineProperty(this,"freezeFrame",{get:function(){return y()},set:function(U){y(U),c(n._tileset)&&(n._tileset.debugFreezeFrame=U,n._scene.debugShowFrustumPlanes=U,n._scene.requestRender())}}),this.freezeFrame=!1,Se.defineProperty(this,"showOnlyPickedTileDebugLabel",{get:function(){return s()},set:function(U){s(U),c(n._tileset)&&(n._tileset.debugPickedTileLabelOnly=U,n._scene.requestRender())}}),this.showOnlyPickedTileDebugLabel=!1;let h=Se.observable();Se.defineProperty(this,"showGeometricError",{get:function(){return h()},set:function(U){h(U),c(n._tileset)&&(n._tileset.debugShowGeometricError=U,n._scene.requestRender())}}),this.showGeometricError=!1;let g=Se.observable();Se.defineProperty(this,"showRenderingStatistics",{get:function(){return g()},set:function(U){g(U),c(n._tileset)&&(n._tileset.debugShowRenderingStatistics=U,n._scene.requestRender())}}),this.showRenderingStatistics=!1;let x=Se.observable();Se.defineProperty(this,"showMemoryUsage",{get:function(){return x()},set:function(U){x(U),c(n._tileset)&&(n._tileset.debugShowMemoryUsage=U,n._scene.requestRender())}}),this.showMemoryUsage=!1;let S=Se.observable();Se.defineProperty(this,"showUrl",{get:function(){return S()},set:function(U){S(U),c(n._tileset)&&(n._tileset.debugShowUrl=U,n._scene.requestRender())}}),this.showUrl=!1;let V=Se.observable();Se.defineProperty(this,"maximumScreenSpaceError",{get:function(){return V()},set:function(U){U=Number(U),isNaN(U)||(V(U),c(n._tileset)&&(n._tileset.maximumScreenSpaceError=U))}}),this.maximumScreenSpaceError=16;let Z=Se.observable();Se.defineProperty(this,"dynamicScreenSpaceErrorDensity",{get:function(){return Z()},set:function(U){U=Number(U),isNaN(U)||(Z(U),c(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=U))}}),this.dynamicScreenSpaceErrorDensity=2e-4,this.dynamicScreenSpaceErrorDensitySliderValue=void 0,Se.defineProperty(this,"dynamicScreenSpaceErrorDensitySliderValue",{get:function(){return Math.pow(Z(),1/6)},set:function(U){let K=Math.pow(U,6);Z(K),c(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=K)}});let R=Se.observable();Se.defineProperty(this,"dynamicScreenSpaceErrorFactor",{get:function(){return R()},set:function(U){U=Number(U),isNaN(U)||(R(U),c(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorFactor=U))}}),this.dynamicScreenSpaceErrorFactor=24;let E=F1t(this),I=Se.observable();Se.defineProperty(this,"pickActive",{get:function(){return I()},set:function(U){I(U),U?n._eventHandler.setInputAction(E,Vn.LEFT_CLICK):n._eventHandler.removeInputAction(Vn.LEFT_CLICK)}});let v=Se.observable();Se.defineProperty(this,"pointCloudShading",{get:function(){return v()},set:function(U){v(U),c(n._tileset)&&(n._tileset.pointCloudShading.attenuation=U)}}),this.pointCloudShading=!1;let P=Se.observable();Se.defineProperty(this,"geometricErrorScale",{get:function(){return P()},set:function(U){U=Number(U),isNaN(U)||(P(U),c(n._tileset)&&(n._tileset.pointCloudShading.geometricErrorScale=U))}}),this.geometricErrorScale=1;let F=Se.observable();Se.defineProperty(this,"maximumAttenuation",{get:function(){return F()},set:function(U){U=Number(U),isNaN(U)||(F(U),c(n._tileset)&&(n._tileset.pointCloudShading.maximumAttenuation=U===0?void 0:U))}}),this.maximumAttenuation=0;let N=Se.observable();Se.defineProperty(this,"baseResolution",{get:function(){return N()},set:function(U){U=Number(U),isNaN(U)||(N(U),c(n._tileset)&&(n._tileset.pointCloudShading.baseResolution=U===0?void 0:U))}}),this.baseResolution=0;let b=Se.observable();Se.defineProperty(this,"eyeDomeLighting",{get:function(){return b()},set:function(U){b(U),c(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLighting=U)}}),this.eyeDomeLighting=!1;let G=Se.observable();Se.defineProperty(this,"eyeDomeLightingStrength",{get:function(){return G()},set:function(U){U=Number(U),isNaN(U)||(G(U),c(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingStrength=U))}}),this.eyeDomeLightingStrength=1;let X=Se.observable();Se.defineProperty(this,"eyeDomeLightingRadius",{get:function(){return X()},set:function(U){U=Number(U),isNaN(U)||(X(U),c(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingRadius=U))}}),this.eyeDomeLightingRadius=1,this.pickActive=!1;let W=Se.observable();Se.defineProperty(this,"skipLevelOfDetail",{get:function(){return W()},set:function(U){W(U),c(n._tileset)&&(n._tileset.skipLevelOfDetail=U)}}),this.skipLevelOfDetail=!0;let A=Se.observable();Se.defineProperty(this,"skipScreenSpaceErrorFactor",{get:function(){return A()},set:function(U){U=Number(U),isNaN(U)||(A(U),c(n._tileset)&&(n._tileset.skipScreenSpaceErrorFactor=U))}}),this.skipScreenSpaceErrorFactor=16;let k=Se.observable();Se.defineProperty(this,"baseScreenSpaceError",{get:function(){return k()},set:function(U){U=Number(U),isNaN(U)||(k(U),c(n._tileset)&&(n._tileset.baseScreenSpaceError=U))}}),this.baseScreenSpaceError=1024;let B=Se.observable();Se.defineProperty(this,"skipLevels",{get:function(){return B()},set:function(U){U=Number(U),isNaN(U)||(B(U),c(n._tileset)&&(n._tileset.skipLevels=U))}}),this.skipLevels=1;let O=Se.observable();Se.defineProperty(this,"immediatelyLoadDesiredLevelOfDetail",{get:function(){return O()},set:function(U){O(U),c(n._tileset)&&(n._tileset.immediatelyLoadDesiredLevelOfDetail=U)}}),this.immediatelyLoadDesiredLevelOfDetail=!1;let H=Se.observable();Se.defineProperty(this,"loadSiblings",{get:function(){return H()},set:function(U){H(U),c(n._tileset)&&(n._tileset.loadSiblings=U)}}),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()}),c(this._tileset)||MCe(this,!0)}Object.defineProperties(Ra.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 M1t}},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,c(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=CM(e,!1),this._pickStatisticsText=CM(e,!0),this._resourceCacheStatisticsText=NCe(),MCe(this,!1)}},feature:{get:function(){return this._feature},set:function(e){if(this._feature===e)return;let t=this._feature;c(t)&&!t.content.isDestroyed()&&(!this.colorize&&c(this._style)?t.color=c(this._style.color)?this._style.color.evaluateColor(t,N1t):Y.WHITE:t.color=EB,this._scene.requestRender()),c(e)&&(Y.clone(e.color,EB),e.color=ACe,this._scene.requestRender()),this._feature=e}},tile:{get:function(){return this._tile},set:function(e){if(this._tile===e)return;let t=this._tile;c(t)&&!t.isDestroyed()&&!q6(t.content)&&(t.color=EB,this._scene.requestRender()),c(e)&&!q6(e.content)&&(Y.clone(e.color,EB),e.color=ACe,this._scene.requestRender()),this._tile=e}}});function q6(e){if(!c(e))return!1;if(e.featuresLength>0)return!0;let t=e.innerContents;if(c(t)){let n=t.length;for(let i=0;i<n;++i)if(!q6(t[i]))return!1;return!0}return!1}Ra.prototype.togglePickTileset=function(){this.pickActive=!this.pickActive};Ra.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};Ra.prototype.toggleTileset=function(){this.tilesetVisible=!this.tilesetVisible};Ra.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};Ra.prototype.toggleUpdate=function(){this.updateVisible=!this.updateVisible};Ra.prototype.toggleLogging=function(){this.loggingVisible=!this.loggingVisible};Ra.prototype.toggleStyle=function(){this.styleVisible=!this.styleVisible};Ra.prototype.toggleTileDebugLabels=function(){this.tileDebugLabelsVisible=!this.tileDebugLabelsVisible};Ra.prototype.toggleOptimization=function(){this.optimizationVisible=!this.optimizationVisible};Ra.prototype.trimTilesCache=function(){c(this._tileset)&&this._tileset.trimLoadedTiles()};Ra.prototype.compileStyle=function(){let e=this._tileset;if(!(!c(e)||this.styleString===JSON.stringify(e.style))){this._editorError="";try{this.styleString.length===0&&(this.styleString="{}"),this._style=new RS(JSON.parse(this.styleString)),this._shouldStyle=!0,this._scene.requestRender()}catch(t){this._editorError=t.toString()}this.feature=this._feature,this.tile=this._tile}};Ra.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(` `),l=a.length,d;if(t.shiftKey)for(d=0;d<l;++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<l;++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};Ra.prototype._update=function(){let e=this._tileset;if(this.performance&&this._performanceDisplay.update(),c(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=CM(e,!1),this._pickStatisticsText=CM(e,!0),this._resourceCacheStatisticsText=NCe())};Ra.prototype.isDestroyed=function(){return!1};Ra.prototype.destroy=function(){this._eventHandler.destroy(),this._removePostRenderEvent();let e=this;return this._definedProperties.forEach(function(t){Se.getObservable(e,t).dispose()}),he(this)};Ra.getStatistics=CM;var VM=Ra;function XB(e,t){C.defined("container",e),C.typeOf.object("scene",t),e=Wn(e);let n=document.createElement("div"),i=document.createElement("div");i.setAttribute("data-bind","visible: performance");let o=new VM(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=sd.createSection,l=sd.createCheckbox,d=sd.createRangeInput,u=sd.createButton,f=a(s,"Tileset","tilesetVisible","toggleTileset"),p=a(s,"Display","displayVisible","toggleDisplay"),y=a(s,"Update","updateVisible","toggleUpdate"),h=a(s,"Logging","loggingVisible","toggleLogging"),g=a(s,"Tile Debug Labels","tileDebugLabelsVisible","toggleTileDebugLabels"),x=a(s,"Style","styleVisible","toggleStyle"),S=a(s,"Optimization","optimizationVisible","toggleOptimization"),V=document.createElement("div");V.className="field-group";let Z=document.createElement("label");Z.className="field-label",Z.appendChild(document.createTextNode("Properties: "));let R=document.createElement("div");R.setAttribute("data-bind","text: properties"),V.appendChild(Z),V.appendChild(R),f.appendChild(V),f.appendChild(u("Pick Tileset","togglePickTileset","pickActive")),f.appendChild(u("Trim Tiles Cache","trimTilesCache")),f.appendChild(l("Enable Picking","picking")),p.appendChild(l("Colorize","colorize"));let E=p.appendChild(l("Wireframe","wireframe","_tileset === undefined || hasEnabledWireframe")),I=document.createElement("p");I.setAttribute("data-bind","visible: _tileset !== undefined && !hasEnabledWireframe"),I.setAttribute("class","cesium-3DTilesInspector-disabledElementsInfo"),I.innerText="Set enableDebugWireframe to true in the tileset constructor to enable this option.",E.appendChild(I),p.appendChild(l("Bounding Volumes","showBoundingVolumes")),p.appendChild(l("Content Volumes","showContentBoundingVolumes")),p.appendChild(l("Request Volumes","showRequestVolumes")),p.appendChild(l("Point Cloud Shading","pointCloudShading"));let v=document.createElement("div");v.setAttribute("data-bind","visible: pointCloudShading"),v.appendChild(d("Geometric Error Scale","geometricErrorScale",0,2,.01)),v.appendChild(d("Maximum Attenuation","maximumAttenuation",0,32,1)),v.appendChild(d("Base Resolution","baseResolution",0,1,.01)),v.appendChild(l("Eye Dome Lighting (EDL)","eyeDomeLighting")),p.appendChild(v);let P=document.createElement("div");P.setAttribute("data-bind","visible: eyeDomeLighting"),P.appendChild(d("EDL Strength","eyeDomeLightingStrength",0,2,.1)),P.appendChild(d("EDL Radius","eyeDomeLightingRadius",0,4,.1)),v.appendChild(P),y.appendChild(l("Freeze Frame","freezeFrame")),y.appendChild(l("Dynamic Screen Space Error","dynamicScreenSpaceError"));let F=document.createElement("div");F.appendChild(d("Maximum Screen Space Error","maximumScreenSpaceError",0,128,1)),y.appendChild(F);let N=document.createElement("div");N.setAttribute("data-bind","visible: dynamicScreenSpaceError"),N.appendChild(d("Screen Space Error Density","dynamicScreenSpaceErrorDensitySliderValue",0,1,.005,"dynamicScreenSpaceErrorDensity")),N.appendChild(d("Screen Space Error Factor","dynamicScreenSpaceErrorFactor",1,32,.1)),y.appendChild(N),h.appendChild(l("Performance","performance")),h.appendChild(i),h.appendChild(l("Statistics","showStatistics"));let b=document.createElement("div");b.className="cesium-3dTilesInspector-statistics",b.setAttribute("data-bind","html: statisticsText, visible: showStatistics"),h.appendChild(b),h.appendChild(l("Pick Statistics","showPickStatistics"));let G=document.createElement("div");G.className="cesium-3dTilesInspector-statistics",G.setAttribute("data-bind","html: pickStatisticsText, visible: showPickStatistics"),h.appendChild(G),h.appendChild(l("Resource Cache Statistics","showResourceCacheStatistics"));let X=document.createElement("div");X.className="cesium-3dTilesInspector-statistics",X.setAttribute("data-bind","html: resourceCacheStatisticsText, visible: showResourceCacheStatistics"),h.appendChild(X);let W=document.createElement("div");x.appendChild(W),W.appendChild(document.createTextNode("Color Blend Mode: "));let A=document.createElement("select");A.setAttribute("data-bind",'options: colorBlendModes, optionsText: "text", optionsValue: "value", value: colorBlendMode'),W.appendChild(A);let k=document.createElement("textarea");k.setAttribute("data-bind","textInput: styleString, event: { keydown: styleEditorKeyPress }"),W.className="cesium-cesiumInspector-styleEditor",W.appendChild(k);let B=u("Compile (Ctrl+Enter)","compileStyle");W.appendChild(B);let O=document.createElement("div");O.className="cesium-cesiumInspector-error",O.setAttribute("data-bind","text: editorError"),W.appendChild(O),g.appendChild(l("Show Picked Only","showOnlyPickedTileDebugLabel")),g.appendChild(l("Geometric Error","showGeometricError")),g.appendChild(l("Rendering Statistics","showRenderingStatistics")),g.appendChild(l("Memory Usage (MB)","showMemoryUsage")),g.appendChild(l("Url","showUrl")),S.appendChild(l("Skip Tile LODs","skipLevelOfDetail"));let H=document.createElement("div");H.appendChild(d("Skip SSE Factor","skipScreenSpaceErrorFactor",1,50,1)),S.appendChild(H);let U=document.createElement("div");U.appendChild(d("SSE before skipping LOD","baseScreenSpaceError",0,4096,1)),S.appendChild(U);let K=document.createElement("div");K.appendChild(d("Min. levels to skip","skipLevels",0,10,1)),S.appendChild(K),S.appendChild(l("Load only tiles that meet the max SSE.","immediatelyLoadDesiredLevelOfDetail")),S.appendChild(l("Load siblings of visible tiles","loadSiblings")),Se.applyBindings(o,n)}Object.defineProperties(XB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});XB.prototype.isDestroyed=function(){return!1};XB.prototype.destroy=function(){return Se.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),he(this)};var LM=XB;var qvo=_(T(),1);var Hvo=_(T(),1);function k1t(e){let t;if(c(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 l=Math.pow(2,a);o>=l&&(s.push(a+1),o-=l)}r=s.reverse().join(" and ")}t+=`<br>    ${n[i]} in frustum ${r}`}t+=`<br>Total: ${e.totalCommands}`}return t}function $6(e,t,n){let i=Math.min(n,t);return i=Math.max(i,e),i}var U1t=new bn,O1t=new m;function ZM(e,t){if(!c(e))throw new L("scene is required");if(!c(t))throw new L("performanceContainer is required");let n=this,i=e.canvas,o=new tu(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="",Se.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=Rn(function(){n.dropDownVisible=!n.dropDownVisible}),this._toggleGeneral=Rn(function(){n.generalVisible=!n.generalVisible}),this._togglePrimitives=Rn(function(){n.primitivesVisible=!n.primitivesVisible}),this._toggleTerrain=Rn(function(){n.terrainVisible=!n.terrainVisible}),this._frustumsSubscription=Se.getObservable(this,"frustums").subscribe(function(d){n._scene.debugShowFrustums=d,n._scene.requestRender()}),this._frustumPlanesSubscription=Se.getObservable(this,"frustumPlanes").subscribe(function(d){n._scene.debugShowFrustumPlanes=d,n._scene.requestRender()}),this._performanceSubscription=Se.getObservable(this,"performance").subscribe(function(d){d?n._performanceDisplay=new p0({container:n._performanceContainer}):n._performanceContainer.innerHTML=""}),this._showPrimitiveBoundingSphere=Rn(function(){return n._primitive.debugShowBoundingVolume=n.primitiveBoundingSphere,n._scene.requestRender(),!0}),this._primitiveBoundingSphereSubscription=Se.getObservable(this,"primitiveBoundingSphere").subscribe(function(){n._showPrimitiveBoundingSphere()}),this._showPrimitiveReferenceFrame=Rn(function(){if(n.primitiveReferenceFrame){let d=n._primitive.modelMatrix;n._modelMatrixPrimitive=new Y9({modelMatrix:d}),n._scene.primitives.add(n._modelMatrixPrimitive)}else c(n._modelMatrixPrimitive)&&(n._scene.primitives.remove(n._modelMatrixPrimitive),n._modelMatrixPrimitive=void 0);return n._scene.requestRender(),!0}),this._primitiveReferenceFrameSubscription=Se.getObservable(this,"primitiveReferenceFrame").subscribe(function(){n._showPrimitiveReferenceFrame()}),this._doFilterPrimitive=Rn(function(){return n.filterPrimitive?n._scene.debugCommandFilter=function(d){return c(n._modelMatrixPrimitive)&&d.owner===n._modelMatrixPrimitive._primitive?!0:c(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=Se.getObservable(this,"filterPrimitive").subscribe(function(){n._doFilterPrimitive(),n._scene.requestRender()}),this._wireframeSubscription=Se.getObservable(this,"wireframe").subscribe(function(d){r._surface.tileProvider._debug.wireframe=d,n._scene.requestRender()}),this._depthFrustumSubscription=Se.getObservable(this,"depthFrustum").subscribe(function(d){n._scene.debugShowDepthFrustum=d,n._scene.requestRender()}),this._incrementDepthFrustum=Rn(function(){let d=n.depthFrustum+1;return n.depthFrustum=$6(1,n._numberOfFrustums,d),n._scene.requestRender(),!0}),this._decrementDepthFrustum=Rn(function(){let d=n.depthFrustum-1;return n.depthFrustum=$6(1,n._numberOfFrustums,d),n._scene.requestRender(),!0}),this._suspendUpdatesSubscription=Se.getObservable(this,"suspendUpdates").subscribe(function(d){r._surface._debug.suspendLodUpdate=d,d||(n.filterTile=!1)});let s;this._showTileCoordinates=Rn(function(){return n.tileCoordinates&&!c(s)?s=e.imageryLayers.addImageryProvider(new cM({tilingScheme:e.terrainProvider.tilingScheme})):!n.tileCoordinates&&c(s)&&(e.imageryLayers.remove(s),s=void 0),!0}),this._tileCoordinatesSubscription=Se.getObservable(this,"tileCoordinates").subscribe(function(){n._showTileCoordinates(),n._scene.requestRender()}),this._tileBoundingSphereSubscription=Se.getObservable(this,"tileBoundingSphere").subscribe(function(){n._showTileBoundingSphere(),n._scene.requestRender()}),this._showTileBoundingSphere=Rn(function(){return n.tileBoundingSphere?r._surface.tileProvider._debug.boundingSphereTile=n._tile:r._surface.tileProvider._debug.boundingSphereTile=void 0,n._scene.requestRender(),!0}),this._doFilterTile=Rn(function(){return n.filterTile?(n.suspendUpdates=!0,r._surface._tilesToRender=[],c(n._tile)&&n._tile.renderable&&r._surface._tilesToRender.push(n._tile)):n.suspendUpdates=!1,!0}),this._filterTileSubscription=Se.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});c(u)&&(n.primitive=c(u.collection)?u.collection:u.primitive),n._scene.requestRender(),n.pickPrimitiveActive=!1}this._pickPrimitive=Rn(function(){n.pickPrimitiveActive=!n.pickPrimitiveActive}),this._pickPrimitiveActiveSubscription=Se.getObservable(this,"pickPrimitiveActive").subscribe(function(d){d?o.setInputAction(a,Vn.LEFT_CLICK):o.removeInputAction(Vn.LEFT_CLICK)});function l(d){let u,f=r.ellipsoid,p=n._scene.camera.getPickRay(d.position,U1t),y=r.pick(p,n._scene,O1t);if(c(y)){let h=f.cartesianToCartographic(y),g=r._surface.tileProvider._tilesToRenderByTextureCount;for(let x=0;!u&&x<g.length;++x){let S=g[x];if(c(S))for(let V=0;!u&&V<S.length;++V){let Z=S[V];de.contains(Z.rectangle,h)&&(u=Z)}}}n.tile=u,n.pickTileActive=!1}this._pickTile=Rn(function(){n.pickTileActive=!n.pickTileActive}),this._pickTileActiveSubscription=Se.getObservable(this,"pickTileActive").subscribe(function(d){d?o.setInputAction(l,Vn.LEFT_CLICK):o.removeInputAction(Vn.LEFT_CLICK)}),this._removePostRenderEvent=e.postRender.addEventListener(function(){n._update()})}Object.defineProperties(ZM.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 Rn(function(){e.tile=e.tile.parent})}},selectNW:{get:function(){let e=this;return Rn(function(){e.tile=e.tile.northwestChild})}},selectNE:{get:function(){let e=this;return Rn(function(){e.tile=e.tile.northeastChild})}},selectSW:{get:function(){let e=this;return Rn(function(){e.tile=e.tile.southwestChild})}},selectSE:{get:function(){let e=this;return Rn(function(){e.tile=e.tile.southeastChild})}},primitive:{get:function(){return this._primitive},set:function(e){let t=this._primitive;e!==t&&(this.hasPickedPrimitive=!0,c(t)&&(t.debugShowBoundingVolume=!1),this._scene.debugCommandFilter=void 0,c(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(c(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;c(n)&&c(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}}});ZM.prototype._update=function(){this.frustums&&(this.frustumStatisticText=k1t(this._scene.debugFrustumStatistics));let e=this._scene.numberOfFrustums;this._numberOfFrustums=e,this.depthFrustum=$6(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}`};ZM.prototype.isDestroyed=function(){return!1};ZM.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(),he(this)};var RM=ZM;function IB(e,t){if(!c(e))throw new L("container is required.");if(!c(t))throw new L("scene is required.");e=Wn(e);let n=document.createElement("div"),i=new RM(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=sd.createSection,l=sd.createCheckbox,d=a(s,"General","generalVisible","toggleGeneral"),u=l("Show Frustums","frustums"),f=document.createElement("div");f.className="cesium-cesiumInspector-frustumStatistics",f.setAttribute("data-bind","visible: frustums, html: frustumStatisticText"),u.appendChild(f),d.appendChild(u),d.appendChild(l("Show Frustum Planes","frustumPlanes")),d.appendChild(l("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 y=document.createElement("div");d.appendChild(y);let h=document.createElement("span");h.setAttribute("data-bind",'html: "     Frustum:"'),y.appendChild(h);let g=document.createElement("span");g.setAttribute("data-bind","text: depthFrustumText"),y.appendChild(g);let x=document.createElement("input");x.type="button",x.value="-",x.className="cesium-cesiumInspector-pickButton",x.setAttribute("data-bind","click: decrementDepthFrustum"),y.appendChild(x);let S=document.createElement("input");S.type="button",S.value="+",S.className="cesium-cesiumInspector-pickButton",S.setAttribute("data-bind","click: incrementDepthFrustum"),y.appendChild(S);let V=a(s,"Primitives","primitivesVisible","togglePrimitives"),Z=document.createElement("div");Z.className="cesium-cesiumInspector-pickSection",V.appendChild(Z);let R=document.createElement("input");R.type="button",R.value="Pick a primitive",R.className="cesium-cesiumInspector-pickButton",R.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickPrimitiveActive}, click: pickPrimitive');let E=document.createElement("div");E.className="cesium-cesiumInspector-center",E.appendChild(R),Z.appendChild(E),Z.appendChild(l("Show bounding sphere","primitiveBoundingSphere","hasPickedPrimitive")),Z.appendChild(l("Show reference frame","primitiveReferenceFrame","hasPickedPrimitive")),this._primitiveOnly=l("Show only selected","filterPrimitive","hasPickedPrimitive"),Z.appendChild(this._primitiveOnly);let I=a(s,"Terrain","terrainVisible","toggleTerrain"),v=document.createElement("div");v.className="cesium-cesiumInspector-pickSection",I.appendChild(v);let P=document.createElement("input");P.type="button",P.value="Pick a tile",P.className="cesium-cesiumInspector-pickButton",P.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickTileActive}, click: pickTile'),E=document.createElement("div"),E.appendChild(P),E.className="cesium-cesiumInspector-center",v.appendChild(E);let F=document.createElement("div");v.appendChild(F);let N=document.createElement("input");N.type="button",N.value="Parent",N.className="cesium-cesiumInspector-pickButton",N.setAttribute("data-bind","click: selectParent");let b=document.createElement("input");b.type="button",b.value="NW",b.className="cesium-cesiumInspector-pickButton",b.setAttribute("data-bind","click: selectNW");let G=document.createElement("input");G.type="button",G.value="NE",G.className="cesium-cesiumInspector-pickButton",G.setAttribute("data-bind","click: selectNE");let X=document.createElement("input");X.type="button",X.value="SW",X.className="cesium-cesiumInspector-pickButton",X.setAttribute("data-bind","click: selectSW");let W=document.createElement("input");W.type="button",W.value="SE",W.className="cesium-cesiumInspector-pickButton",W.setAttribute("data-bind","click: selectSE");let A=document.createElement("div");A.className="cesium-cesiumInspector-tileText",F.className="cesium-cesiumInspector-frustumStatistics",F.appendChild(A),F.setAttribute("data-bind","visible: hasPickedTile"),A.setAttribute("data-bind","html: tileText");let k=document.createElement("div");k.className="cesium-cesiumInspector-relativeText",k.textContent="Select relative:",F.appendChild(k);let B=document.createElement("table"),O=document.createElement("tr"),H=document.createElement("tr"),U=document.createElement("td");U.appendChild(N);let K=document.createElement("td");K.appendChild(b);let Q=document.createElement("td");Q.appendChild(G),O.appendChild(U),O.appendChild(K),O.appendChild(Q);let ie=document.createElement("td"),j=document.createElement("td");j.appendChild(X);let $=document.createElement("td");$.appendChild(W),H.appendChild(ie),H.appendChild(j),H.appendChild($),B.appendChild(O),B.appendChild(H),F.appendChild(B),v.appendChild(l("Show bounding volume","tileBoundingSphere","hasPickedTile")),v.appendChild(l("Show only selected","filterTile","hasPickedTile")),I.appendChild(l("Wireframe","wireframe")),I.appendChild(l("Suspend LOD update","suspendUpdates")),I.appendChild(l("Show tile coordinates","tileCoordinates")),Se.applyBindings(i,this._element)}Object.defineProperties(IB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});IB.prototype.isDestroyed=function(){return!1};IB.prototype.destroy=function(){return Se.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),he(this)};var GM=IB;var cFo=_(T(),1);var iFo=_(T(),1);function WB(e,t){c(t)||(t=document.body),t=Wn(t);let n=this,i=Se.observable(_r.fullscreen),o=Se.observable(_r.enabled),r=t.ownerDocument;this.isFullscreen=void 0,Se.defineProperty(this,"isFullscreen",{get:function(){return i()}}),this.isFullscreenEnabled=void 0,Se.defineProperty(this,"isFullscreenEnabled",{get:function(){return o()},set:function(s){o(s&&_r.enabled)}}),this.tooltip=void 0,Se.defineProperty(this,"tooltip",function(){return this.isFullscreenEnabled?i()?"Exit full screen":"Full screen":"Full screen unavailable"}),this._command=Rn(function(){_r.fullscreen?_r.exitFullscreen():_r.requestFullscreen(n._fullscreenElement)},Se.getObservable(this,"isFullscreenEnabled")),this._fullscreenElement=Wn(e)??r.body,this._callback=function(){i(_r.fullscreen)},r.addEventListener(_r.changeEventName,this._callback)}Object.defineProperties(WB.prototype,{fullscreenElement:{get:function(){return this._fullscreenElement},set:function(e){if(!(e instanceof Element))throw new L("value must be a valid Element.");this._fullscreenElement=e}},command:{get:function(){return this._command}}});WB.prototype.isDestroyed=function(){return!1};WB.prototype.destroy=function(){document.removeEventListener(_r.changeEventName,this._callback),he(this)};var EM=WB;var D1t="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",B1t="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 wB(e,t){if(!c(e))throw new L("container is required.");e=Wn(e);let n=new EM(t,e);n._exitFullScreenPath=B1t,n._enterFullScreenPath=D1t;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),Se.applyBindings(n,i),this._container=e,this._viewModel=n,this._element=i}Object.defineProperties(wB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});wB.prototype.isDestroyed=function(){return!1};wB.prototype.destroy=function(){return this._viewModel.destroy(),Se.cleanNode(this._element),this._container.removeChild(this._element),he(this)};var XM=wB;var gFo=_(T(),1);var fFo=_(T(),1);function kCe(e,t){if(!c(e))throw new L("scene is required.");this._scene=e,this._duration=t;let n=this;this._command=Rn(function(){n._scene.camera.flyHome(n._duration)}),this.tooltip="View Home",Se.track(this,["tooltip"])}Object.defineProperties(kCe.prototype,{scene:{get:function(){return this._scene}},command:{get:function(){return this._command}},duration:{get:function(){return this._duration},set:function(e){if(c(e)&&e<0)throw new L("value must be positive.");this._duration=e}}});var IM=kCe;function PB(e,t,n){if(!c(e))throw new L("container is required.");e=Wn(e);let i=new IM(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),Se.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(PB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});PB.prototype.isDestroyed=function(){return!1};PB.prototype.destroy=function(){return Se.cleanNode(this._element),this._container.removeChild(this._element),he(this)};var WM=PB;var GFo=_(T(),1);var CFo=_(T(),1);var UCe=1e3;function Sm(e){if(!c(e)||!c(e.scene))throw new L("options.scene is required.");c(e.geocoderServices)?this._geocoderServices=e.geocoderServices:this._geocoderServices=[new VS({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 ye,this._suggestions=[],this._selectedSuggestion=void 0,this._showSuggestions=!0,this._handleArrowDown=DCe,this._handleArrowUp=OCe;let t=this;this._suggestionsVisible=Se.pureComputed(function(){let o=Se.getObservable(t,"_suggestions")().length>0,r=Se.getObservable(t,"_showSuggestions")();return o&&r}),this._searchCommand=Rn(function(i){if(i=i??Bg.SEARCH,t._focusTextbox=!1,c(t._selectedSuggestion))return t.activateSuggestion(t._selectedSuggestion),!1;if(t.hideSuggestions(),t.isSearchInProgress)Q1t(t);else return K1t(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?OCe(t):r?DCe(t):a&&t._searchCommand(),!0},this.activateSuggestion=function(i){t.hideSuggestions(),t._searchText=i.displayName;let o=i.destination;HCe(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??Sm.flyToDestination,this._focusTextbox=!1,Se.track(this,["_searchText","_isSearchInProgress","keepExpanded","_suggestions","_selectedSuggestion","_showSuggestions","_focusTextbox"]);let n=Se.getObservable(this,"_searchText");n.extend({rateLimit:{timeout:500}}),this._suggestionSubscription=n.subscribe(function(){Sm._updateSearchSuggestions(t)}),this.isSearchInProgress=void 0,Se.defineProperty(this,"isSearchInProgress",{get:function(){return this._isSearchInProgress}}),this.searchText=void 0,Se.defineProperty(this,"searchText",{get:function(){return this.isSearchInProgress?"Searching...":this._searchText},set:function(i){if(typeof i!="string")throw new L("value must be a valid string.");this._searchText=i}}),this.flightDuration=void 0,Se.defineProperty(this,"flightDuration",{get:function(){return this._flightDuration},set:function(i){if(c(i)&&i<0)throw new L("value must be positive.");this._flightDuration=i}})}Object.defineProperties(Sm.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}}});Sm.prototype.destroy=function(){this._suggestionSubscription.dispose()};function OCe(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],Sm._adjustSuggestionsScroll(e,n)}function DCe(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],Sm._adjustSuggestionsScroll(e,i)}function Y1t(e,t){let n=c(t)?t.availability:void 0;return c(n)?IT(t,[e]).then(function(i){return e=i[0],e.height+=UCe,e}):(e.height+=UCe,Promise.resolve(e))}function H1t(e,t){let n=e._scene,i=n.ellipsoid,o=n.camera,r=n.terrainProvider,s=t,a;return t instanceof de?w.equalsEpsilon(t.south,t.north,w.EPSILON7)&&w.equalsEpsilon(t.east,t.west,w.EPSILON7)?t=de.center(t):a=WT(t,n):t=i.cartesianToCartographic(t),c(a)||(a=Y1t(t,r)),a.then(function(l){s=i.cartographicToCartesian(l)}).finally(function(){o.flyTo({destination:s,complete:function(){e._complete.raiseEvent()},duration:e._flightDuration,endTransform:M.IDENTITY})})}async function z1t(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 K1t(e,t,n){let i=e._searchText;if(YCe(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 z1t(t[o],i,n),c(r)&&r.state==="fulfilled"&&r.value.length>0)break}if(e._wasGeocodeCancelled)return;e._isSearchInProgress=!1,tq(e);let s=r.value;if(r.state==="fulfilled"&&c(s)&&s.length>0){e._searchText=s[0].displayName,e.destinationFound(e,s[0].destination);let a=BCe(e,PL.getCreditsFromResult(s[0]));c(a)||eq(e,t[o].credit);return}e._searchText=`${i} (not found)`}function eq(e,t){c(t)&&!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&(e._scene.frameState.creditDisplay.addStaticCredit(t),e._previousCredits.push(t))}function BCe(e,t){return c(t)&&t.forEach(n=>eq(e,n)),t}function tq(e){!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&e._previousCredits.forEach(t=>{e._scene.frameState.creditDisplay.removeStaticCredit(t)}),e._previousCredits.length=0}function J1t(e,t){let n=Wn(e._viewContainer),i=n.getElementsByClassName("search-results")[0],r=n.getElementsByTagName("li")[t];if(t===0){i.scrollTop=0;return}let s=r.offsetTop;s+r.clientHeight>i.clientHeight?i.scrollTop=s+r.clientHeight:s<i.scrollTop&&(i.scrollTop=s)}function Q1t(e){e._isSearchInProgress&&(e._isSearchInProgress=!1,e._wasGeocodeCancelled=!0)}function YCe(e){return/^\s*$/.test(e)}function HCe(e){Se.getObservable(e,"_suggestions").removeAll()}async function j1t(e){if(!e.autoComplete)return;let t=e._searchText;if(HCe(e),tq(e),!YCe(t))for(let n of e._geocoderServices){let i=await n.geocode(t,Bg.AUTOCOMPLETE);if(e._suggestions=e._suggestions.concat(i),i.length>0){let o=!0;i.forEach(r=>{let s=PL.getCreditsFromResult(r);o=o&&!c(s),BCe(e,s)}),o&&eq(e,n.credit)}if(e._suggestions.length>=5)return}}Sm.flyToDestination=H1t;Sm._updateSearchSuggestions=j1t;Sm._adjustSuggestionsScroll=J1t;Sm.prototype.isDestroyed=function(){return!1};Sm.prototype.destroy=function(){return tq(this),he(this)};var wM=Sm;var q1t="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",$1t="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 vB(e){if(!c(e)||!c(e.container))throw new L("options.container is required.");if(!c(e.scene))throw new L("options.scene is required.");let t=Wn(e.container),n=new wM(e);n._startSearchPath=q1t,n._stopSearchPath=$1t;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 l=document.createElement("li");a.appendChild(l),l.setAttribute("data-bind","text: $data.displayName, click: $parent.activateSuggestion, event: { mouseover: $parent.handleMouseover}, css: { active: $data === $parent._selectedSuggestion }"),s.appendChild(a),t.appendChild(s),Se.applyBindings(n,i),Se.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()},Ot.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(vB.prototype,{container:{get:function(){return this._container}},searchSuggestionsContainer:{get:function(){return this._searchSuggestionsContainer}},viewModel:{get:function(){return this._viewModel}}});vB.prototype.isDestroyed=function(){return!1};vB.prototype.destroy=function(){let e=this._container;return Ot.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(),Se.cleanNode(this._form),Se.cleanNode(this._searchSuggestionsContainer),e.removeChild(this._form),e.removeChild(this._searchSuggestionsContainer),this._textBox.removeEventListener("focus",this._onTextBoxFocus,!1),he(this)};var PM=vB;var AFo=_(T(),1);var WFo=_(T(),1);function eVt(e,t){t.currentTarget.parentElement.parentElement.querySelector(`#${e.name}-expander`).classList.toggle("active"),t.currentTarget.textContent=t.currentTarget.textContent==="+"?"-":"+"}function KCe(e,t){Se.track(e);for(let n=0;n<e.sublayers.length;n++)KCe(e.sublayers[n],t)}function FB(e){return e.modelName==="FullModel"}function JCe(e){return e.modelName==="Overview"}function QCe(e){return JCe(e)||FB(e)}function zCe(e,t){if(QCe(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:Se.observable(!1),index:t.sublayers.length};return t.topLayers.push(n),t.sublayers.push(e),n}}function tVt(e,t){if(QCe(e)){t.sublayers.forEach(i=>i.visibility=!1),t.sublayers[e.index].visibility=!0;let n=document.getElementById("bsl-wrapper");FB(e)?(t.currentLevel=t.selectedLevel,n.style.display="block"):(t.selectedLevel=t.currentLevel,t.currentLevel="All",n.style.display="none")}}async function nVt(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 iVt(e){let t=this;this.levels=[],this.viewModel={sublayers:[],levels:this.levels,currentLevel:Se.observable(),selectedLevel:"All",topLayers:[{name:"Select a layer to explore...",disable:Se.observable(!0),index:-1}],currentLayer:Se.observable(),expandClickHandler:eVt,setOptionDisable:function(i,o){Se.applyBindingsToNode(i,{disable:o.disable},o)},defaultLayer:void 0},this.viewModel.currentLayer.subscribe(function(i){tVt(i,t.viewModel)});let n=e.sublayers;for(let i=0;i<n.length;i++){KCe(n[i],this.viewModel);let o=zCe(n[i],this.viewModel);c(o)&&(JCe(o)||!c(this.viewModel.defaultLayer)&&FB(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=zCe(i,this.viewModel),this.viewModel.currentLayer.subscribe(function(o){e.show=FB(o)})}else this.viewModel.topLayers.length===1&&(this.viewModel.topLayers[0].name="Building layers not found");return nVt(e,this.levels),this.viewModel.currentLevel.subscribe(function(i){i!=="All"?e.filterByAttributes([{name:"BldgLevel",values:[i]}]):e.filterByAttributes()}),this.viewModel}var vM=iVt;function oVt(e,t){let n=document.getElementById(e);C.defined("container",n),C.defined("i3sProvider",t);let 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 vM(t);Se.track(o),Se.applyBindings(o,n),c(o.defaultLayer)&&(o.currentLayer=o.defaultLayer)}var nq=oVt;var zFo=_(T(),1);var UFo=_(T(),1);var rVt="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",sVt="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 iq(){this._cameraClicked=new ye,this._closeClicked=new ye,this.maxHeight=500,this.enableCamera=!1,this.isCameraTracking=!1,this.showInfo=!1,this.titleText="",this.description="",Se.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,Se.defineProperty(this,"cameraIconPath",{get:function(){return!this.enableCamera||this.isCameraTracking?sVt:rVt}}),Se.defineProperty(this,"_bodyless",{get:function(){return!c(this.description)||this.description.length===0}})}iq.prototype.maxHeightOffset=function(e){return`${this.maxHeight-e}px`};Object.defineProperties(iq.prototype,{cameraClicked:{get:function(){return this._cameraClicked}},closeClicked:{get:function(){return this._closeClicked}}});var FM=iq;function AB(e){C.defined("container",e),e=Wn(e);let t=document.createElement("div");t.className="cesium-infoBox",t.setAttribute("data-bind",'css: { "cesium-infoBox-visible" : showInfo, "cesium-infoBox-bodyless" : _bodyless }'),e.appendChild(t);let n=document.createElement("div");n.className="cesium-infoBox-title",n.setAttribute("data-bind","text: titleText"),t.appendChild(n);let i=document.createElement("button");i.type="button",i.className="cesium-button cesium-infoBox-camera",i.setAttribute("data-bind",'attr: { title: "Focus camera on object" },click: function () { cameraClicked.raiseEvent(this); },enable: enableCamera,cesiumSvgPath: { path: cameraIconPath, width: 32, height: 32 }'),t.appendChild(i);let o=document.createElement("button");o.type="button",o.className="cesium-infoBox-close",o.setAttribute("data-bind","click: function () { closeClicked.raiseEvent(this); }"),o.innerHTML="×",t.appendChild(o);let r=document.createElement("iframe");r.className="cesium-infoBox-iframe",r.setAttribute("sandbox","allow-same-origin allow-popups allow-forms"),r.setAttribute("data-bind","style : { maxHeight : maxHeightOffset(40) }"),r.setAttribute("allowfullscreen",!0),t.appendChild(r);let s=new FM;Se.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 l=r.contentDocument,d=l.createElement("link");d.href=on("Widgets/InfoBox/InfoBoxDescription.css"),d.rel="stylesheet",d.type="text/css";let u=l.createElement("div");u.className="cesium-infoBox-description",l.head.appendChild(d),l.body.appendChild(u),a._descriptionSubscription=Za(s,"description",function(f){r.style.height="5px",u.innerHTML=f;let p=null,y=u.firstElementChild;if(y!==null&&u.childNodes.length===1){let g=window.getComputedStyle(y);if(g!==null){let x=g["background-color"],S=Y.fromCssColorString(x);c(S)&&S.alpha!==0&&(p=g["background-color"])}}t.style["background-color"]=p;let h=u.getBoundingClientRect().height;r.style.height=`${h}px`})}),r.setAttribute("src","about:blank")}Object.defineProperties(AB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}},frame:{get:function(){return this._frame}}});AB.prototype.isDestroyed=function(){return!1};AB.prototype.destroy=function(){let e=this._container;return Se.cleanNode(this._element),e.removeChild(this._element),c(this._descriptionSubscription)&&this._descriptionSubscription.dispose(),he(this)};var AM=AB;var iAo=_(T(),1);var qFo=_(T(),1);function MB(e){if(!c(e))throw new L("scene is required.");this._scene=e,this._orthographic=e.camera.frustum instanceof sn,this._flightInProgress=!1,this.dropDownVisible=!1,this.tooltipPerspective="Perspective Projection",this.tooltipOrthographic="Orthographic Projection",this.selectedTooltip=void 0,this.sceneMode=e.mode,Se.track(this,["_orthographic","_flightInProgress","sceneMode","dropDownVisible","tooltipPerspective","tooltipOrthographic"]);let t=this;Se.defineProperty(this,"selectedTooltip",function(){return t._orthographic?t.tooltipOrthographic:t.tooltipPerspective}),this._toggleDropDown=Rn(function(){t.sceneMode===se.SCENE2D||t._flightInProgress||(t.dropDownVisible=!t.dropDownVisible)}),this._eventHelper=new hr,this._eventHelper.add(e.morphComplete,function(n,i,o,r){t.sceneMode=o,t._orthographic=o===se.SCENE2D||t._scene.camera.frustum instanceof sn}),this._eventHelper.add(e.preRender,function(){t._flightInProgress=c(e.camera._currentFlight)}),this._switchToPerspective=Rn(function(){t.sceneMode!==se.SCENE2D&&(t._scene.camera.switchToPerspectiveFrustum(),t._orthographic=!1,t.dropDownVisible=!1)}),this._switchToOrthographic=Rn(function(){t.sceneMode!==se.SCENE2D&&(t._scene.camera.switchToOrthographicFrustum(),t._orthographic=!0,t.dropDownVisible=!1)}),this._sceneMode=se}Object.defineProperties(MB.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}}});MB.prototype.isDestroyed=function(){return!1};MB.prototype.destroy=function(){this._eventHelper.removeAll(),he(this)};var MM=MB;var aVt="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",cVt="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 NB(e,t){if(!c(e))throw new L("container is required.");if(!c(t))throw new L("scene is required.");e=Wn(e);let n=new MM(t);n._perspectivePath=aVt,n._orthographicPath=cVt;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),Se.applyBindings(n,i),this._viewModel=n,this._container=e,this._wrapper=i,this._closeDropDown=function(a){i.contains(a.target)||(n.dropDownVisible=!1)},Ot.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(NB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});NB.prototype.isDestroyed=function(){return!1};NB.prototype.destroy=function(){return this._viewModel.destroy(),Ot.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Se.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),he(this)};var NM=NB;var fAo=_(T(),1);var cAo=_(T(),1);function oq(e){if(!c(e)||!c(e.scene))throw new L("options.scene is required.");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,Se.track(this,["lowFrameRateMessage","lowFrameRateMessageDismissed","showingLowFrameRateMessage"]);let t=this;this._dismissMessage=Rn(function(){t.showingLowFrameRateMessage=!1,t.lowFrameRateMessageDismissed=!0});let n=K9.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(oq.prototype,{scene:{get:function(){return this._scene}},dismissMessage:{get:function(){return this._dismissMessage}}});oq.prototype.destroy=function(){return this._unsubscribeLowFrameRate(),this._unsubscribeNominalFrameRate(),he(this)};var kM=oq;function kB(e){if(!c(e)||!c(e.container))throw new L("options.container is required.");if(!c(e.scene))throw new L("options.scene is required.");let t=Wn(e.container),n=new kM(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),Se.applyBindings(n,i),this._container=t,this._viewModel=n,this._element=i}Object.defineProperties(kB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});kB.prototype.isDestroyed=function(){return!1};kB.prototype.destroy=function(){return this._viewModel.destroy(),Se.cleanNode(this._element),this._container.removeChild(this._element),he(this)};var UM=kB;var SAo=_(T(),1);var yAo=_(T(),1);function jCe(){this.showInstructions=!1;let e=this;this._command=Rn(function(){e.showInstructions=!e.showInstructions}),this._showClick=Rn(function(){e._touch=!1}),this._showTouch=Rn(function(){e._touch=!0}),this._touch=!1,this.tooltip="Navigation Instructions",Se.track(this,["tooltip","showInstructions","_touch"])}Object.defineProperties(jCe.prototype,{command:{get:function(){return this._command}},showClick:{get:function(){return this._showClick}},showTouch:{get:function(){return this._showTouch}}});var OM=jCe;function UB(e){if(!c(e)||!c(e.container))throw new L("options.container is required.");let t=Wn(e.container),n=new OM,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 l=document.createElement("img");l.src=on("Widgets/Images/NavigationHelp/Mouse.svg"),l.className="cesium-navigation-button-icon",l.style.width="25px",l.style.height="25px",a.appendChild(l),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=on("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 f=document.createElement("div");f.className="cesium-click-navigation-help cesium-navigation-help-instructions",f.setAttribute("data-bind",'css: { "cesium-click-navigation-help-visible" : !_touch}'),f.innerHTML=` <table> <tr> <td><img src="${on("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="${on("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="${on("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(f);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="${on("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="${on("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="${on("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="${on("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),Se.applyBindings(n,o),this._container=t,this._viewModel=n,this._wrapper=o,this._closeInstructions=function(y){o.contains(y.target)||(n.showInstructions=!1)},Ot.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeInstructions,!0):(document.addEventListener("mousedown",this._closeInstructions,!0),document.addEventListener("touchstart",this._closeInstructions,!0))}Object.defineProperties(UB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});UB.prototype.isDestroyed=function(){return!1};UB.prototype.destroy=function(){return Ot.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeInstructions,!0):(document.removeEventListener("mousedown",this._closeInstructions,!0),document.removeEventListener("touchstart",this._closeInstructions,!0)),Se.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),he(this)};var DM=UB;var IAo=_(T(),1);var ZAo=_(T(),1);var lVt=new D,OB="-1000px";function BM(e,t,n){if(!c(e))throw new L("scene is required.");if(!c(t))throw new L("selectionIndicatorElement is required.");if(!c(n))throw new L("container is required.");this._scene=e,this._screenPositionX=OB,this._screenPositionY=OB,this._tweens=e.tweens,this._container=n??document.body,this._selectionIndicatorElement=t,this._scale=1,this.position=void 0,this.showSelection=!1,Se.track(this,["position","_screenPositionX","_screenPositionY","_scale","showSelection"]),this.isVisible=void 0,Se.defineProperty(this,"isVisible",{get:function(){return this.showSelection&&c(this.position)}}),Se.defineProperty(this,"_transform",{get:function(){return`scale(${this._scale})`}}),this.computeScreenSpacePosition=function(i,o){return Oi.worldToWindowCoordinates(e,i,o)}}BM.prototype.update=function(){if(this.showSelection&&c(this.position)){let e=this.computeScreenSpacePosition(this.position,lVt);if(!c(e))this._screenPositionX=OB,this._screenPositionY=OB;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`}}};BM.prototype.animateAppear=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:2,stopValue:1,duration:.8,easingFunction:Jr.EXPONENTIAL_OUT})};BM.prototype.animateDepart=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:this._scale,stopValue:1.5,duration:.8,easingFunction:Jr.EXPONENTIAL_OUT})};Object.defineProperties(BM.prototype,{container:{get:function(){return this._container}},selectionIndicatorElement:{get:function(){return this._selectionIndicatorElement}},scene:{get:function(){return this._scene}}});var YM=BM;function DB(e,t){if(!c(e))throw new L("container is required.");e=Wn(e),this._container=e;let n=document.createElement("div");n.className="cesium-selection-wrapper",n.setAttribute("data-bind",'style: { "top" : _screenPositionY, "left" : _screenPositionX },css: { "cesium-selection-wrapper-visible" : isVisible }'),e.appendChild(n),this._element=n;let i="http://www.w3.org/2000/svg",o="M -34 -34 L -34 -11.25 L -30 -15.25 L -30 -30 L -15.25 -30 L -11.25 -34 L -34 -34 z M 11.25 -34 L 15.25 -30 L 30 -30 L 30 -15.25 L 34 -11.25 L 34 -34 L 11.25 -34 z M -34 11.25 L -34 34 L -11.25 34 L -15.25 30 L -30 30 L -30 15.25 L -34 11.25 z M 34 11.25 L 30 15.25 L 30 30 L 15.25 30 L 11.25 34 L 34 34 L 34 11.25 z",r=document.createElementNS(i,"svg:svg");r.setAttribute("width",160),r.setAttribute("height",160),r.setAttribute("viewBox","0 0 160 160");let s=document.createElementNS(i,"g");s.setAttribute("transform","translate(80,80)"),r.appendChild(s);let a=document.createElementNS(i,"path");a.setAttribute("data-bind","attr: { transform: _transform }"),a.setAttribute("d",o),s.appendChild(a),n.appendChild(r);let l=new YM(t,this._element,this._container);this._viewModel=l,Se.applyBindings(this._viewModel,this._element)}Object.defineProperties(DB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});DB.prototype.isDestroyed=function(){return!1};DB.prototype.destroy=function(){let e=this._container;return Se.cleanNode(this._element),e.removeChild(this._element),he(this)};var HM=DB;var UAo=_(T(),1);var FAo=_(T(),1);function BB(e,t){if(!c(e))throw new L("scene is required.");this._scene=e;let n=this,i=function(o,r,s,a){n.sceneMode=s,n.dropDownVisible=!1};this._eventHelper=new hr,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",Se.track(this,["sceneMode","dropDownVisible","tooltip2D","tooltip3D","tooltipColumbusView"]),this.selectedTooltip=void 0,Se.defineProperty(this,"selectedTooltip",function(){let o=n.sceneMode;return o===se.SCENE2D?n.tooltip2D:o===se.SCENE3D?n.tooltip3D:n.tooltipColumbusView}),this._toggleDropDown=Rn(function(){n.dropDownVisible=!n.dropDownVisible}),this._morphTo2D=Rn(function(){e.morphTo2D(n._duration)}),this._morphTo3D=Rn(function(){e.morphTo3D(n._duration)}),this._morphToColumbusView=Rn(function(){e.morphToColumbusView(n._duration)}),this._sceneMode=se}Object.defineProperties(BB.prototype,{scene:{get:function(){return this._scene}},duration:{get:function(){return this._duration},set:function(e){if(e<0)throw new L("duration value must be positive.");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}}});BB.prototype.isDestroyed=function(){return!1};BB.prototype.destroy=function(){this._eventHelper.removeAll(),he(this)};var zM=BB;var dVt="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",uVt="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",mVt="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 YB(e,t,n){if(!c(e))throw new L("container is required.");if(!c(t))throw new L("scene is required.");e=Wn(e);let i=new zM(t,n);i._globePath=dVt,i._flatMapPath=uVt,i._columbusViewPath=mVt;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 l=document.createElement("button");l.type="button",l.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",l.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(l),Se.applyBindings(i,o),this._viewModel=i,this._container=e,this._wrapper=o,this._closeDropDown=function(d){o.contains(d.target)||(i.dropDownVisible=!1)},Ot.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(YB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});YB.prototype.isDestroyed=function(){return!1};YB.prototype.destroy=function(){return this._viewModel.destroy(),Ot.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Se.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),he(this)};var KM=YB;var qAo=_(T(),1);var BAo=_(T(),1);function AS(e,t,n){this._color=e,this._height=t,this._base=n??0}AS.prototype.getHeight=function(){return this._height};AS.prototype.getBase=function(){return this._base};AS.prototype.getStartTime=function(){return this._start};AS.prototype.getStopTime=function(){return this._stop};AS.prototype.setRange=function(e,t){this._start=e,this._stop=t};AS.prototype.render=function(e){let t="";if(this._start&&this._stop&&this._color){let n=ee.secondsDifference(this._start,e.epochJulian),i=Math.round(e.timeBarWidth*e.getAlpha(n)),o=ee.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 JM=AS;var zAo=_(T(),1);function qCe(e,t,n,i){this.interval=e,this.height=t,this.color=n||new Y(.5,.5,.5,1),this.backgroundColor=i||new Y(0,0,0,0)}qCe.prototype.render=function(e,t){let n=this.interval.start,i=this.interval.stop,o=t.startJulian,r=ee.addSeconds(t.startJulian,t.duration,new ee);if(ee.lessThan(n,o)&&ee.greaterThan(i,r))e.fillStyle=this.color.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height);else if(ee.lessThanOrEquals(n,r)&&ee.greaterThanOrEquals(i,o)){let s,a,l;for(s=0;s<t.timeBarWidth;++s){let d=ee.addSeconds(t.startJulian,s/t.timeBarWidth*t.duration,new ee);!c(a)&&ee.greaterThanOrEquals(d,n)?a=s:!c(l)&&ee.greaterThanOrEquals(d,i)&&(l=s)}e.fillStyle=this.backgroundColor.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height),c(a)&&(c(l)||(l=t.timeBarWidth),e.fillStyle=this.color.toCssColorString(),e.fillRect(a,t.y,Math.max(l-a,1),this.height))}};var QM=qCe;var rq=1e12,Cm={none:0,scrub:1,slide:2,zoom:3,touchOnly:4},yl={none:0,scrub:1,slideZoom:2,singleTap:3,ignore:4},$g=[.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],fVt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function gl(e,t){if(!c(e))throw new L("container is required.");if(!c(t))throw new L("clock is required.");e=Wn(e);let n=e.ownerDocument;this.container=e;let i=n.createElement("div");i.className="cesium-timeline-main",e.appendChild(i),this._topDiv=i,this._endJulian=void 0,this._epochJulian=void 0,this._lastXPos=void 0,this._scrubElement=void 0,this._startJulian=void 0,this._timeBarSecondsSpan=void 0,this._clock=t,this._scrubJulian=t.currentTime,this._mainTicSpan=-1,this._mouseMode=Cm.none,this._touchMode=yl.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=hVt(this),this._onMouseUp=pVt(this),this._onMouseMove=bVt(this),this._onMouseWheel=yVt(this),this._onTouchStart=gVt(this),this._onTouchMove=_Vt(this),this._onTouchEnd=xVt(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()}gl.prototype.addEventListener=function(e,t,n){this._topDiv.addEventListener(e,t,n)};gl.prototype.removeEventListener=function(e,t,n){this._topDiv.removeEventListener(e,t,n)};gl.prototype.isDestroyed=function(){return!1};gl.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),he(this)};gl.prototype.addHighlightRange=function(e,t,n){let i=new JM(e,t,n);return this._highlightRanges.push(i),this.resize(),i};gl.prototype.addTrack=function(e,t,n,i){let o=new QM(e,t,n,i);return this._trackList.push(o),this._lastHeight=void 0,this.resize(),o};gl.prototype.zoomTo=function(e,t){if(!c(e))throw new L("startTime is required.");if(!c(t))throw new L("stopTime is required");if(ee.lessThanOrEquals(t,e))throw new L("Start time must come before end time.");if(this._startJulian=e,this._endJulian=t,this._timeBarSecondsSpan=ee.secondsDifference(t,e),this._clock&&this._clock.clockRange!==zr.UNBOUNDED){let i=this._clock.startTime,o=this._clock.stopTime,r=ee.secondsDifference(o,i),s=ee.secondsDifference(i,this._startJulian),a=ee.secondsDifference(o,this._endJulian);this._timeBarSecondsSpan>=r?(this._timeBarSecondsSpan=r,this._startJulian=this._clock.startTime,this._endJulian=this._clock.stopTime):s>0?(this._endJulian=ee.addSeconds(this._endJulian,s,new ee),this._startJulian=i,this._timeBarSecondsSpan=ee.secondsDifference(this._endJulian,this._startJulian)):a<0&&(this._startJulian=ee.addSeconds(this._startJulian,a,new ee),this._endJulian=o,this._timeBarSecondsSpan=ee.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)};gl.prototype.zoomFrom=function(e){let t=ee.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(ee.addSeconds(this._startJulian,t-t*e,new ee),ee.addSeconds(this._endJulian,n*e-n,new ee))};function sq(e){return e<10?`0${e.toString()}`:e.toString()}gl.prototype.makeLabel=function(e){let t=ee.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`${fVt[t.month-1]} ${t.day} ${t.year} ${sq(t.hour)}:${sq(t.minute)}:${sq(t.second)}${i}`};gl.prototype.smallestTicInPixels=7;gl.prototype._makeTics=function(){let e=this._timeBarEle,t=ee.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,l=31536e6,d=1e-10,u=0,f=this._timeBarSecondsSpan;f<a?(f=a,this._timeBarSecondsSpan=a,this._endJulian=ee.addSeconds(this._startJulian,a,new ee)):f>l&&(f=l,this._timeBarSecondsSpan=l,this._endJulian=ee.addSeconds(this._startJulian,l,new ee));let p=this._timeBarEle.clientWidth;p<10&&(p=10);let y=this._startJulian,h=Math.min(f/p*1e-5,.4),g,x=ee.toGregorianDate(y);f>31536e4?g=ee.fromDate(new Date(Date.UTC(Math.floor(x.year/100)*100,0))):f>31536e3?g=ee.fromDate(new Date(Date.UTC(Math.floor(x.year/10)*10,0))):f>86400?g=ee.fromDate(new Date(Date.UTC(x.year,0))):g=ee.fromDate(new Date(Date.UTC(x.year,x.month,x.day)));let S=ee.secondsDifference(this._startJulian,ee.addSeconds(g,h,new ee)),V=S+f;this._epochJulian=g;function Z(U){return Math.floor(S/U)*U}function R(U,K){return Math.ceil(U/K+.5)*K}function E(U){return(U-S)/f}function I(U,K){return U-K*Math.round(U/K)}this._rulerEle.innerHTML=this.makeLabel(ee.addSeconds(this._endJulian,-a,new ee));let v=this._rulerEle.offsetWidth+20;v<30&&(v=180);let P=u;u-=d;let F={startTime:S,startJulian:y,epochJulian:g,duration:f,timeBarWidth:p,getAlpha:E};this._highlightRanges.forEach(function(U){s+=U.render(F)});let N=0,b=0,G=0,X=v/p;X>1&&(X=1),X*=this._timeBarSecondsSpan;let W=-1,A=-1,k=$g.length,B;for(B=0;B<k;++B){let U=$g[B];if(++W,N=U,U>X&&U>u)break;A<0&&p*(U/this._timeBarSecondsSpan)>=this.smallestTicInPixels&&(A=W)}if(W>0){for(;W>0;)if(--W,Math.abs(I(N,$g[W]))<1e-5){$g[W]>=u&&(b=$g[W]);break}if(A>=0)for(;A<W;){if(Math.abs(I(b,$g[A]))<1e-5&&$g[A]>=u){G=$g[A];break}++A}}u=P,u>d&&G<1e-5&&Math.abs(u-N)>d&&(G=u,u<=N+d&&(b=0));let O=-999999,H;if(p*(G/this._timeBarSecondsSpan)>=3)for(o=Z(G);o<=V;o=R(o,G))s+=`<span class="cesium-timeline-ticTiny" style="left: ${Math.round(p*E(o)).toString()}px;"></span>`;if(p*(b/this._timeBarSecondsSpan)>=3)for(o=Z(b);o<=V;o=R(o,b))s+=`<span class="cesium-timeline-ticSub" style="left: ${Math.round(p*E(o)).toString()}px;"></span>`;if(p*(N/this._timeBarSecondsSpan)>=2){this._mainTicSpan=N,V+=N,o=Z(N);let U=ee.computeTaiMinusUtc(g);for(;o<=V;){let K=ee.addSeconds(y,o-S,new ee);if(N>2.1){let $=ee.computeTaiMinusUtc(K);Math.abs($-U)>.1&&(o+=$-U,K=ee.addSeconds(y,o-S,new ee))}let Q=Math.round(p*E(o)),ie=this.makeLabel(K);this._rulerEle.innerHTML=ie,H=this._rulerEle.offsetWidth,H<10&&(H=v);let j=Q-(H/2-1);j>O?(O=j+H+5,s+=`<span class="cesium-timeline-ticMain" style="left: ${Q.toString()}px;"></span><span class="cesium-timeline-ticLabel" style="left: ${j.toString()}px;">${ie}</span>`):s+=`<span class="cesium-timeline-ticSub" style="left: ${Q.toString()}px;"></span>`,o=R(o,N)}}else this._mainTicSpan=-1;s+=`<span class="cesium-timeline-icon16" style="left:${i}px;bottom:0;background-position: 0 0;"></span>`,e.innerHTML=s,this._scrubElement=e.lastChild,this._context.clearRect(0,0,this._trackListEle.width,this._trackListEle.height),F.y=0,this._trackList.forEach(function(U){U.render(r._context,F),F.y+=U.height})};gl.prototype.updateFromClock=function(){this._scrubJulian=this._clock.currentTime;let e=this._scrubElement;if(c(this._scrubElement)){let t=ee.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`)}c(this._timelineDragLocation)&&(this._setTimeBarTime(this._timelineDragLocation,this._timelineDragLocation*this._timeBarSecondsSpan/this._topDiv.clientWidth),this.zoomTo(ee.addSeconds(this._startJulian,this._timelineDrag,new ee),ee.addSeconds(this._endJulian,this._timelineDrag,new ee)))};gl.prototype._setTimeBarTime=function(e,t){if(e=Math.round(e),this._scrubJulian=ee.addSeconds(this._startJulian,t,new ee),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 hVt(e){return function(t){e._mouseMode!==Cm.touchOnly&&(t.button===0?(e._mouseMode=Cm.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition="-16px 0"),e._onMouseMove(t)):(e._mouseX=t.clientX,t.button===2?e._mouseMode=Cm.zoom:e._mouseMode=Cm.slide)),t.preventDefault()}}function pVt(e){return function(t){e._mouseMode=Cm.none,e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0"),e._timelineDrag=0,e._timelineDragLocation=void 0}}function bVt(e){return function(t){let n;if(e._mouseMode===Cm.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===Cm.slide){if(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0){let i=n*e._timeBarSecondsSpan/e._topDiv.clientWidth;e.zoomTo(ee.addSeconds(e._startJulian,i,new ee),ee.addSeconds(e._endJulian,i,new ee))}}else e._mouseMode===Cm.zoom&&(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0&&e.zoomFrom(Math.pow(1.01,n)))}}function yVt(e){return function(t){let n=t.wheelDeltaY||t.wheelDelta||-t.detail;rq=Math.max(Math.min(Math.abs(n),rq),1),n/=rq,e.zoomFrom(Math.pow(1.05,-n))}}function gVt(e){return function(t){let n=t.touches.length,i,o,r=e._topDiv.getBoundingClientRect().left;t.preventDefault(),e._mouseMode=Cm.touchOnly,n===1?(i=ee.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=yl.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition=n===1?"-16px 0":"0 0")):(e._touchMode=yl.singleTap,e._touchState.centerX=t.touches[0].clientX-r)):n===2?(e._touchMode=yl.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=yl.ignore}}function xVt(e){return function(t){let n=t.touches.length,i=e._topDiv.getBoundingClientRect().left;e._touchMode===yl.singleTap?(e._touchMode=yl.scrub,e._onTouchMove(t)):e._touchMode===yl.scrub&&e._onTouchMove(t),e._mouseMode=Cm.touchOnly,n!==1?e._touchMode=n>0?yl.ignore:yl.none:e._touchMode===yl.slideZoom&&(e._touchState.centerX=t.touches[0].clientX-i),e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0")}}function _Vt(e){return function(t){let n,i,o,r,s,a,l=1,d=e._topDiv.getBoundingClientRect().left;e._touchMode===yl.singleTap&&(e._touchMode=yl.slideZoom),e._mouseMode=Cm.touchOnly,e._touchMode===yl.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===yl.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),c(r)&&(s>0&&e._touchState.spanX>0?(l=e._touchState.spanX/s,a=ee.addSeconds(e._startJulian,(e._touchState.centerX*e._timeBarSecondsSpan-r*e._timeBarSecondsSpan*l)/e._topDiv.clientWidth,new ee)):(n=e._touchState.centerX-r,a=ee.addSeconds(e._startJulian,n*e._timeBarSecondsSpan/e._topDiv.clientWidth,new ee)),e.zoomTo(a,ee.addSeconds(a,e._timeBarSecondsSpan*l,new ee)),e._touchState.centerX=r,e._touchState.spanX=s))}}gl.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 jM=gl;var c9o=_(T(),1);var n9o=_(T(),1);function $Ce(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 l=t[a];l.match(o)[0].length>=s&&(l=l.slice(s)),i+=`${l} `}return i}function Vm(e){C.typeOf.object("scene",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 l=o.getPrimitiveFunction;l===!0&&(l=function(){t[r]=t._voxelPrimitive[r]}),c(l)&&t._getPrimitiveFunctions.push(l);let d=Se.observable();return Se.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),c(a)&&c(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=$Ce(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===La.BOX}}),n({name:"shapeIsEllipsoid",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsEllipsoid=o===La.ELLIPSOID}}),n({name:"shapeIsCylinder",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsCylinder=o===La.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:-w.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLongitudeMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingEllipsoidMaxLongitudeMax",initialValue:w.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:-w.PI,getPrimitiveFunction:function(){t.clippingEllipsoidMinLongitudeMin=t._voxelPrimitive.minBounds.x}}),n({name:"clippingEllipsoidMinLongitudeMax",initialValue:w.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:-w.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMaxLatitudeMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingEllipsoidMaxLatitudeMax",initialValue:w.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:-w.PI_OVER_TWO,getPrimitiveFunction:function(){t.clippingEllipsoidMinLatitudeMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingEllipsoidMinLatitudeMax",initialValue:w.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:-w.PI,getPrimitiveFunction:function(){t.clippingCylinderMaxAngleMin=t._voxelPrimitive.minBounds.y}}),n({name:"clippingCylinderMaxAngleMax",initialValue:w.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:-w.PI}),n({name:"clippingCylinderMinAngleMax",initialValue:w.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&&yp(t)},getPrimitiveFunction:function(){t.translationX=M.getTranslation(t._voxelPrimitive.modelMatrix,new m).x}}),n({name:"translationY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&yp(t)},getPrimitiveFunction:function(){t.translationY=M.getTranslation(t._voxelPrimitive.modelMatrix,new m).y}}),n({name:"translationZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&yp(t)},getPrimitiveFunction:function(){t.translationZ=M.getTranslation(t._voxelPrimitive.modelMatrix,new m).z}}),n({name:"scaleX",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&yp(t)},getPrimitiveFunction:function(){t.scaleX=M.getScale(t._voxelPrimitive.modelMatrix,new m).x}}),n({name:"scaleY",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&yp(t)},getPrimitiveFunction:function(){t.scaleY=M.getScale(t._voxelPrimitive.modelMatrix,new m).y}}),n({name:"scaleZ",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&yp(t)},getPrimitiveFunction:function(){t.scaleZ=M.getScale(t._voxelPrimitive.modelMatrix,new m).z}}),n({name:"angleX",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&yp(t)}}),n({name:"angleY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&yp(t)}}),n({name:"angleZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&yp(t)}})}var TVt=new m,SVt=new m,CVt=new Ea,VVt=new te;function yp(e){let t=m.fromElements(e.translationX,e.translationY,e.translationZ,TVt),n=m.fromElements(e.scaleX,e.scaleY,e.scaleZ,SVt),i=CVt;i.heading=e.angleX,i.pitch=e.angleY,i.roll=e.angleZ;let o=te.fromHeadingPitchRoll(i,VVt),r=te.multiplyByScale(o,n,o);e._voxelPrimitive.modelMatrix=M.fromRotationTranslation(r,t,e._voxelPrimitive.modelMatrix)}Object.defineProperties(Vm.prototype,{scene:{get:function(){return this._scene}},voxelPrimitive:{get:function(){return this._voxelPrimitive},set:function(e){if(c(this._customShaderCompilationRemoveCallback)&&this._customShaderCompilationRemoveCallback(),!c(e))return;this._voxelPrimitive=e;let t=this;t._customShaderCompilationRemoveCallback=t._voxelPrimitive.customShaderCompilationEvent.addEventListener(function(n){let i=t._voxelPrimitive.customShader.fragmentShaderText;t.shaderString=$Ce(i),c(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,yp(t)}}});Vm.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};Vm.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};Vm.prototype.toggleTransform=function(){this.transformVisible=!this.transformVisible};Vm.prototype.toggleBounds=function(){this.boundsVisible=!this.boundsVisible};Vm.prototype.toggleClipping=function(){this.clippingVisible=!this.clippingVisible};Vm.prototype.toggleShader=function(){this.shaderVisible=!this.shaderVisible};Vm.prototype.compileShader=function(){c(this._voxelPrimitive)&&(this._voxelPrimitive.customShader=new aS({fragmentShaderText:this.shaderString,uniforms:this._voxelPrimitive.customShader.uniforms}))};Vm.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(` `),l=a.length,d;if(t.shiftKey)for(d=0;d<l;++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<l;++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};Vm.prototype.isDestroyed=function(){return!1};Vm.prototype.destroy=function(){let e=this;return this._definedProperties.forEach(function(t){Se.getObservable(e,t).dispose()}),he(this)};var qM=Vm;function HB(e,t){C.defined("container",e),C.typeOf.object("scene",t),e=Wn(e);let n=document.createElement("div"),i=new qM(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:l,createButton:d}=sd,u=s(r,"Display","displayVisible","toggleDisplay"),f=s(r,"Transform","transformVisible","toggleTransform"),p=s(r,"Clipping","clippingVisible","toggleClipping"),y=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(l("Screen Space Error","screenSpaceError",0,128)),u.appendChild(l("Step Size","stepSize",0,2));let h=10,g=10,x=w.PI;f.appendChild(l("Translation X","translationX",-h,+h)),f.appendChild(l("Translation Y","translationY",-h,+h)),f.appendChild(l("Translation Z","translationZ",-h,+h)),f.appendChild(l("Scale X","scaleX",0,+g)),f.appendChild(l("Scale Y","scaleY",0,+g)),f.appendChild(l("Scale Z","scaleZ",0,+g)),f.appendChild(l("Heading","angleX",-x,+x)),f.appendChild(l("Pitch","angleY",-x,+x)),f.appendChild(l("Roll","angleZ",-x,+x)),aq("Max X","Min X","Max Y","Min Y","Max Z","Min Z","clippingBoxMaxX","clippingBoxMinX","clippingBoxMaxY","clippingBoxMinY","clippingBoxMaxZ","clippingBoxMinZ","shapeIsBox",p),aq("Max Longitude","Min Longitude","Max Latitude","Min Latitude","Max Height","Min Height","clippingEllipsoidMaxLongitude","clippingEllipsoidMinLongitude","clippingEllipsoidMaxLatitude","clippingEllipsoidMinLatitude","clippingEllipsoidMaxHeight","clippingEllipsoidMinHeight","shapeIsEllipsoid",p),aq("Max Radius","Min Radius","Max Angle","Min Angle","Max Height","Min Height","clippingCylinderMaxRadius","clippingCylinderMinRadius","clippingCylinderMaxAngle","clippingCylinderMinAngle","clippingCylinderMaxHeight","clippingCylinderMinHeight","shapeIsCylinder",p);let S=document.createElement("div");y.appendChild(S);let V=document.createElement("textarea");V.setAttribute("data-bind","textInput: shaderString, event: { keydown: shaderEditorKeyPress }"),S.className="cesium-cesiumInspector-styleEditor",S.appendChild(V);let Z=d("Compile (Ctrl+Enter)","compileShader");S.appendChild(Z);let R=document.createElement("label");R.style.display="block",R.setAttribute("data-bind","text: shaderCompilationMessage, style: {color: shaderCompilationSuccess ? 'green' : 'red'}"),S.appendChild(R),Se.applyBindings(i,n)}Object.defineProperties(HB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});HB.prototype.isDestroyed=function(){return!1};HB.prototype.destroy=function(){return Se.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),he(this)};function aq(e,t,n,i,o,r,s,a,l,d,u,f,p,y){let h=sd.createRangeInputWithDynamicMinMax,g=y.appendChild(document.createElement("div"));g.setAttribute("data-bind",`if: ${p}`),g.appendChild(h(e,s)),g.appendChild(h(t,a)),g.appendChild(h(n,l)),g.appendChild(h(i,d)),g.appendChild(h(o,u)),g.appendChild(h(r,f))}var $M=HB;var S9o=_(T(),1);var y9o=_(T(),1);var o1e=_(i1e(),1);function RVt(e){let t=!1,n=window.screen;return c(n)&&(c(n.lockOrientation)?t=n.lockOrientation(e):c(n.mozLockOrientation)?t=n.mozLockOrientation(e):c(n.msLockOrientation)?t=n.msLockOrientation(e):c(n.orientation&&n.orientation.lock)&&(t=n.orientation.lock(e))),t}function r1e(){let e=window.screen;c(e)&&(c(e.unlockOrientation)?e.unlockOrientation():c(e.mozUnlockOrientation)?e.mozUnlockOrientation():c(e.msUnlockOrientation)?e.msUnlockOrientation():c(e.orientation&&e.orientation.unlock)&&e.orientation.unlock())}function GVt(e,t,n,i){i()||(n()?(t.useWebVR=!1,e._locked&&(r1e(),e._locked=!1),e._noSleep.disable(),_r.exitFullscreen(),n(!1)):(_r.fullscreen||_r.requestFullscreen(e._vrElement),e._noSleep.enable(),e._locked||(e._locked=RVt("landscape")),t.useWebVR=!0,n(!0)))}function zB(e,t){if(!c(e))throw new L("scene is required.");let n=this,i=Se.observable(_r.enabled),o=Se.observable(!1);this.isVRMode=void 0,Se.defineProperty(this,"isVRMode",{get:function(){return o()}}),this.isVREnabled=void 0,Se.defineProperty(this,"isVREnabled",{get:function(){return i()},set:function(s){i(s&&_r.enabled)}}),this.tooltip=void 0,Se.defineProperty(this,"tooltip",function(){return i()?o()?"Exit VR mode":"Enter VR mode":"VR mode is unavailable"});let r=Se.observable(!1);this._isOrthographic=void 0,Se.defineProperty(this,"_isOrthographic",{get:function(){return r()}}),this._eventHelper=new hr,this._eventHelper.add(e.preRender,function(){r(e.camera.frustum instanceof sn)}),this._locked=!1,this._noSleep=new o1e.default,this._command=Rn(function(){GVt(n,e,o,r)},Se.getObservable(this,"isVREnabled")),this._vrElement=Wn(t)??document.body,this._callback=function(){!_r.fullscreen&&o()&&(e.useWebVR=!1,n._locked&&(r1e(),n._locked=!1),n._noSleep.disable(),o(!1))},document.addEventListener(_r.changeEventName,this._callback)}Object.defineProperties(zB.prototype,{vrElement:{get:function(){return this._vrElement},set:function(e){if(!(e instanceof Element))throw new L("value must be a valid Element.");this._vrElement=e}},command:{get:function(){return this._command}}});zB.prototype.isDestroyed=function(){return!1};zB.prototype.destroy=function(){this._eventHelper.removeAll(),document.removeEventListener(_r.changeEventName,this._callback),he(this)};var eN=zB;var EVt="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",XVt="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 KB(e,t,n){if(!c(e))throw new L("container is required.");if(!c(t))throw new L("scene is required.");e=Wn(e);let i=new eN(t,n);i._exitVRPath=XVt,i._enterVRPath=EVt;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),Se.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(KB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});KB.prototype.isDestroyed=function(){return!1};KB.prototype.destroy=function(){return this._viewModel.destroy(),Se.cleanNode(this._element),this._container.removeChild(this._element),he(this)};var tN=KB;var O9o=_(T(),1);var s1e=new ue;function l1e(e){let t=e.clock;t.currentTime=e.timeJulian,t.shouldAnimate=!1}function IVt(e){let t=e.getPropertyIds(),n="";return t.forEach(function(i){let o=e.getProperty(i);c(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 WVt(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(c(r)&&r!=="")return r}return"Unnamed Feature"}function a1e(e,t){let n=e.scene.pick(t.position);if(c(n)){let i=n.id??n.primitive.id;if(i instanceof $o)return i;if(n instanceof Us)return new $o({name:WVt(n),description:IVt(n),feature:n})}if(c(e.scene.globe))return vVt(e,t.position)}var wVt=new ee;function uq(e,t){if(c(t)){let n=t.clock;if(c(n)&&c(e)){let i=n.startTime,o=n.stopTime;ee.equals(i,o)&&(o=ee.addSeconds(i,w.EPSILON2,wVt)),e.updateFromClock(),e.zoomTo(i,o)}}}var PVt=new m;function vVt(e,t){let n=e.scene,i=n.camera.getPickRay(t),o=n.imageryLayers.pickImageryLayerFeatures(i,n);if(!c(o))return;let r=new $o({id:"Loading...",description:"Loading feature information..."});return o.then(function(s){if(e.selectedEntity!==r)return;if(!c(s)||s.length===0){e.selectedEntity=c1e();return}let a=s[0],l=new $o({id:a.name,description:a.description});if(c(a.position)){let d=e.scene.ellipsoid.cartographicToCartesian(a.position,PVt);l.position=new Oc(d)}e.selectedEntity=l},function(){e.selectedEntity===r&&(e.selectedEntity=c1e())}),r}function c1e(){return new $o({id:"None",description:"No features found."})}function FVt(e,t){let n=e._geocoder,i=e._homeButton,o=e._sceneModePicker,r=e._projectionPicker,s=e._baseLayerPicker,a=e._animation,l=e._timeline,d=e._fullscreenButton,u=e._infoBox,f=e._selectionIndicator,p=t?"hidden":"visible";if(c(n)&&(n.container.style.visibility=p),c(i)&&(i.container.style.visibility=p),c(o)&&(o.container.style.visibility=p),c(r)&&(r.container.style.visibility=p),c(s)&&(s.container.style.visibility=p),c(a)&&(a.container.style.visibility=p),c(l)&&(l.container.style.visibility=p),c(d)&&d.viewModel.isFullscreenEnabled&&(d.container.style.visibility=p),c(u)&&(u.container.style.visibility=p),c(f)&&(f.container.style.visibility=p),e._container){let y=t||!c(d)?0:d.container.clientWidth;e._vrButton.container.style.right=`${y}px`,e.forceResize()}}function qi(e,t){if(!c(e))throw new L("container is required.");if(e=Wn(e),t=t??z.EMPTY_OBJECT,t.globe===!1&&c(t.baseLayer)&&t.baseLayer!==!1)throw new L("Cannot use baseLayer when globe is disabled.");let n=(!c(t.globe)||t.globe!==!1)&&(!c(t.baseLayerPicker)||t.baseLayerPicker!==!1);if(!n&&c(t.selectedImageryProviderViewModel))throw new L("options.selectedImageryProviderViewModel is not available when not using the BaseLayerPicker widget. Either specify options.baseLayer instead or set options.baseLayerPicker to true.");if(!n&&c(t.selectedTerrainProviderViewModel))throw new L("options.selectedTerrainProviderViewModel is not available when not using the BaseLayerPicker widget. Either specify options.terrainProvider instead or set options.baseLayerPicker to true.");let 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,l,d,u=!1;c(t.clockViewModel)?(d=t.clockViewModel,l=d.clock):(l=new _f,d=new fM(l),u=!0);let f=new G9(r,{baseLayer:n&&c(t.selectedImageryProviderViewModel)||c(t.baseLayer)||c(t.imageryProvider)?!1:void 0,clock:l,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:c(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=f.scene,y=new hr;y.add(l.onTick,qi.prototype._onTick,this);let h;if(!c(t.selectionIndicator)||t.selectionIndicator!==!1){let K=document.createElement("div");K.className="cesium-viewer-selectionIndicatorContainer",o.appendChild(K),h=new HM(K,p)}let g;if(!c(t.infoBox)||t.infoBox!==!1){let K=document.createElement("div");K.className="cesium-viewer-infoBoxContainer",o.appendChild(K),g=new AM(K);let Q=g.viewModel;y.add(Q.cameraClicked,qi.prototype._onInfoBoxCameraClicked,this),y.add(Q.closeClicked,qi.prototype._onInfoBoxClockClicked,this)}let x=document.createElement("div");x.className="cesium-viewer-toolbar",o.appendChild(x);let S;if(!c(t.geocoder)||t.geocoder!==!1){let K=document.createElement("div");K.className="cesium-viewer-geocoderContainer",x.appendChild(K);let Q;typeof t.geocoder=="string"?Q=[new VS({scene:p,geocodeProviderType:t.geocoder})]:c(t.geocoder)&&typeof t.geocoder!="boolean"&&(Q=Array.isArray(t.geocoder)?t.geocoder:[t.geocoder]),S=new PM({container:K,geocoderServices:Q,scene:p}),y.add(S.viewModel.search.beforeExecute,qi.prototype._clearObjects,this)}let V;if((!c(t.homeButton)||t.homeButton!==!1)&&(V=new WM(x,p),c(S)&&y.add(V.viewModel.command.afterExecute,function(){let K=S.viewModel;K.searchText="",K.isSearchInProgress&&K.search()}),y.add(V.viewModel.command.beforeExecute,qi.prototype._clearTrackedObject,this)),t.sceneModePicker===!0&&a)throw new L("options.sceneModePicker is not available when options.scene3DOnly is set to true.");let Z;!a&&(!c(t.sceneModePicker)||t.sceneModePicker!==!1)&&(Z=new KM(x,p));let R;t.projectionPicker&&(R=new NM(x,p));let E,I;if(n){let K=t.imageryProviderViewModels??_M(),Q=t.terrainProviderViewModels??TM();E=new xM(x,{globe:p.globe,imageryProviderViewModels:K,selectedImageryProviderViewModel:t.selectedImageryProviderViewModel,terrainProviderViewModels:Q,selectedTerrainProviderViewModel:t.selectedTerrainProviderViewModel}),I=x.getElementsByClassName("cesium-baseLayerPicker-dropDown")[0]}if(c(t.baseLayer)&&t.baseLayer!==!1&&(n&&(E.viewModel.selectedImagery=void 0),p.imageryLayers.removeAll(),p.imageryLayers.add(t.baseLayer)),c(t.terrainProvider)&&(n&&(E.viewModel.selectedTerrain=void 0),p.terrainProvider=t.terrainProvider),c(t.terrain)){if(c(t.terrainProvider))throw new L("Specify either options.terrainProvider or options.terrain.");n&&(p.globe.depthTestAgainstTerrain=!0),p.setTerrain(t.terrain)}let v;if(!c(t.navigationHelpButton)||t.navigationHelpButton!==!1){let K=!0;try{if(c(window.localStorage)){let Q=window.localStorage.getItem("cesium-hasSeenNavHelp");c(Q)&&Q?K=!1:window.localStorage.setItem("cesium-hasSeenNavHelp","true")}}catch{}v=new DM({container:x,instructionsInitiallyVisible:t.navigationInstructionsInitiallyVisible??K})}let P;if(!c(t.animation)||t.animation!==!1){let K=document.createElement("div");K.className="cesium-viewer-animationContainer",o.appendChild(K),P=new bM(K,new yM(d))}let F;if(!c(t.timeline)||t.timeline!==!1){let K=document.createElement("div");K.className="cesium-viewer-timelineContainer",o.appendChild(K),F=new jM(K,l),F.addEventListener("settime",l1e,!1),F.zoomTo(l.startTime,l.stopTime)}let N,b,G;(!c(t.fullscreenButton)||t.fullscreenButton!==!1)&&(G=document.createElement("div"),G.className="cesium-viewer-fullscreenContainer",o.appendChild(G),N=new XM(G,t.fullscreenElement),b=Za(N.viewModel,"isFullscreenEnabled",function(K){G.style.display=K?"block":"none",c(F)&&(F.container.style.right=`${G.clientWidth}px`,F.resize())}));let X,W,A;if(t.vrButton){let K=document.createElement("div");K.className="cesium-viewer-vrContainer",o.appendChild(K),X=new tN(K,p,t.fullScreenElement),W=Za(X.viewModel,"isVREnabled",function(Q){K.style.display=Q?"block":"none",c(N)&&(K.style.right=`${G.clientWidth}px`),c(F)&&(F.container.style.right=`${K.clientWidth}px`,F.resize())}),A=Za(X.viewModel,"isVRMode",function(Q){FVt(i,Q)})}this._baseLayerPickerDropDown=I,this._fullscreenSubscription=b,this._vrSubscription=W,this._vrModeSubscription=A,this._dataSourceChangedListeners={},this._container=e,this._bottomContainer=s,this._element=o,this._cesiumWidget=f,this._selectionIndicator=h,this._infoBox=g,this._clockViewModel=d,this._destroyClockViewModel=u,this._toolbar=x,this._homeButton=V,this._sceneModePicker=Z,this._projectionPicker=R,this._baseLayerPicker=E,this._navigationHelpButton=v,this._animation=P,this._timeline=F,this._fullscreenButton=N,this._vrButton=X,this._geocoder=S,this._eventHelper=y,this._lastWidth=0,this._lastHeight=0,this._enableInfoOrSelection=c(g)||c(h),this._selectedEntity=void 0,this._selectedEntityChanged=new ye;let k=this._cesiumWidget.dataSources,B=this._cesiumWidget.dataSourceDisplay;y.add(k.dataSourceAdded,qi.prototype._onDataSourceAdded,this),y.add(k.dataSourceRemoved,qi.prototype._onDataSourceRemoved,this),y.add(p.postUpdate,qi.prototype.resize,this);let O=k.length;for(let K=0;K<O;K++)this._dataSourceAdded(k,k.get(K));this._dataSourceAdded(void 0,B.defaultDataSource),y.add(k.dataSourceAdded,qi.prototype._dataSourceAdded,this),y.add(k.dataSourceRemoved,qi.prototype._dataSourceRemoved,this);function H(K){let Q=a1e(i,K);c(Q)?J.getValueOrUndefined(Q.position,i.clock.currentTime)?i.trackedEntity=Q:i.zoomTo(Q):c(i.trackedEntity)&&(i.trackedEntity=void 0)}function U(K){i.selectedEntity=a1e(i,K)}f.screenSpaceEventHandler.setInputAction(U,Vn.LEFT_CLICK),f.screenSpaceEventHandler.setInputAction(H,Vn.LEFT_DOUBLE_CLICK),f._canAnimateUpdateCallback=this._updateCanAnimate(this)}Object.defineProperties(qi.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=c(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;c(e)?c(t)&&t.animateAppear():c(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,uq(this._timeline,e))}}});qi.prototype.extend=function(e,t){if(!c(e))throw new L("mixin is required.");e(this,t)};qi.prototype.resize=function(){let e=this._cesiumWidget,t=this._container,n=t.clientWidth,i=t.clientHeight,o=c(this._animation),r=c(this._timeline);if(e.resize(),n===this._lastWidth&&i===this._lastHeight)return;let s=i-125,a=this._baseLayerPickerDropDown;if(c(a)&&(a.style.maxHeight=`${s}px`),c(this._geocoder)){let h=this._geocoder.searchSuggestionsContainer;h.style.maxHeight=`${s}px`}c(this._infoBox)&&(this._infoBox.viewModel.maxHeight=s);let l=this._timeline,d,u=0,f=5,p=3,y=0;if(o&&window.getComputedStyle(this._animation.container).visibility!=="hidden"){let h=this._lastWidth;d=this._animation.container,n>900?(u=169,h<=900&&(d.style.width="169px",d.style.height="112px",this._animation.resize())):n>=600?(u=136,(h<600||h>900)&&(d.style.width="136px",d.style.height="90px",this._animation.resize())):(u=106,(h>600||h===0)&&(d.style.width="106px",d.style.height="70px",this._animation.resize())),f=u+5}if(r&&window.getComputedStyle(this._timeline.container).visibility!=="hidden"){let h=this._fullscreenButton,g=this._vrButton,x=l.container,S=x.style;p=x.clientHeight+3,S.left=`${u}px`;let V=0;c(h)&&(V+=h.container.clientWidth),c(g)&&(V+=g.container.clientWidth),S.right=`${V}px`,l.resize()}!r&&c(this._fullscreenButton)&&(y=this._fullscreenButton.container.clientWidth),this._bottomContainer.style.left=`${f}px`,this._bottomContainer.style.bottom=`${p}px`,this._bottomContainer.style.right=`${y}px`,this._lastWidth=n,this._lastHeight=i};qi.prototype.forceResize=function(){this._lastWidth=0,this.resize()};qi.prototype.render=function(){this._cesiumWidget.render()};qi.prototype.isDestroyed=function(){return!1};qi.prototype.destroy=function(){return c(this.screenSpaceEventHandler)&&!this.screenSpaceEventHandler.isDestroyed()&&(this.screenSpaceEventHandler.removeInputAction(Vn.LEFT_CLICK),this.screenSpaceEventHandler.removeInputAction(Vn.LEFT_DOUBLE_CLICK)),this._container.removeChild(this._element),this._element.removeChild(this._toolbar),this._eventHelper.removeAll(),c(this._geocoder)&&(this._geocoder=this._geocoder.destroy()),c(this._homeButton)&&(this._homeButton=this._homeButton.destroy()),c(this._sceneModePicker)&&(this._sceneModePicker=this._sceneModePicker.destroy()),c(this._projectionPicker)&&(this._projectionPicker=this._projectionPicker.destroy()),c(this._baseLayerPicker)&&(this._baseLayerPicker=this._baseLayerPicker.destroy()),c(this._animation)&&(this._element.removeChild(this._animation.container),this._animation=this._animation.destroy()),c(this._timeline)&&(this._timeline.removeEventListener("settime",l1e,!1),this._element.removeChild(this._timeline.container),this._timeline=this._timeline.destroy()),c(this._fullscreenButton)&&(this._fullscreenSubscription.dispose(),this._element.removeChild(this._fullscreenButton.container),this._fullscreenButton=this._fullscreenButton.destroy()),c(this._vrButton)&&(this._vrSubscription.dispose(),this._vrModeSubscription.dispose(),this._element.removeChild(this._vrButton.container),this._vrButton=this._vrButton.destroy()),c(this._infoBox)&&(this._element.removeChild(this._infoBox.container),this._infoBox=this._infoBox.destroy()),c(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(),he(this)};qi.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(qi.prototype._onEntityCollectionChanged,this)};qi.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener(qi.prototype._onEntityCollectionChanged,this),c(this.selectedEntity)&&n.getById(this.selectedEntity.id)===this.selectedEntity&&(this.selectedEntity=void 0)};qi.prototype._updateCanAnimate=function(e){return function(t){e._clockViewModel.canAnimate=t}};qi.prototype._onTick=function(e){let t=e.currentTime,n,i=!1,o=this.selectedEntity,r=c(o)&&this._enableInfoOrSelection;r&&o.isShowing&&o.isAvailable(t)&&(this._cesiumWidget.dataSourceDisplay.getBoundingSphere(o,!0,s1e)!==ut.FAILED?n=s1e.center:c(o.position)&&(n=o.position.getValue(t,n)),i=c(n));let s=c(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;c(s)&&(s.position=m.clone(n,s.position),s.showSelection=r&&i,s.update());let a=c(this._infoBox)?this._infoBox.viewModel:void 0;c(a)&&(a.showInfo=r,a.enableCamera=i,a.isCameraTracking=this.trackedEntity===this.selectedEntity,r?(a.titleText=o.name??o.id,a.description=J.getValueOrDefault(o.description,t,"")):(a.titleText="",a.description=""))};qi.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)}};qi.prototype._onInfoBoxCameraClicked=function(e){if(e.isCameraTracking&&this.trackedEntity===this.selectedEntity)this.trackedEntity=void 0;else{let n=this.selectedEntity.position;c(n)?this.trackedEntity=this.selectedEntity:this.zoomTo(this.selectedEntity)}};qi.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};qi.prototype._onInfoBoxClockClicked=function(e){this.selectedEntity=void 0};qi.prototype._clearObjects=function(){this.trackedEntity=void 0,this.selectedEntity=void 0};qi.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&uq(this.timeline,e)};qi.prototype._onDataSourceAdded=function(e,t){this._cesiumWidget._automaticallyTrackDataSourceClocks&&t===this.clockTrackedDataSource&&uq(this._timeline,t);let n=t.entities.id,i=this._eventHelper.add(t.changedEvent,qi.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};qi.prototype._onDataSourceRemoved=function(e,t){let n=t.entities.id;this._dataSourceChangedListeners[n](),this._dataSourceChangedListeners[n]=void 0};qi.prototype.zoomTo=function(e,t){return this._cesiumWidget.zoomTo(e,t)};qi.prototype.flyTo=function(e,t){return this._cesiumWidget.flyTo(e,t)};var mq=qi;var H9o=_(T(),1);function AVt(e){C.typeOf.object("viewer",e);let t=document.createElement("div");t.className="cesium-viewer-cesium3DTilesInspectorContainer",e.container.appendChild(t);let n=new LM(t,e.scene);Object.defineProperties(e,{cesium3DTilesInspector:{get:function(){return n}}})}var fq=AVt;var Q9o=_(T(),1);function MVt(e){if(!c(e))throw new L("viewer is required.");let t=document.createElement("div");t.className="cesium-viewer-cesiumInspectorContainer",e.container.appendChild(t);let n=new GM(t,e.scene);Object.defineProperties(e,{cesiumInspector:{get:function(){return n}}})}var hq=MVt;var $9o=_(T(),1);function NVt(e,t){if(!c(e))throw new L("viewer is required.");if(e.hasOwnProperty("dropTarget"))throw new L("dropTarget is already defined by another mixin.");if(e.hasOwnProperty("dropEnabled"))throw new L("dropEnabled is already defined by another mixin.");if(e.hasOwnProperty("dropError"))throw new L("dropError is already defined by another mixin.");if(e.hasOwnProperty("clearOnDrop"))throw new L("clearOnDrop is already defined by another mixin.");if(e.hasOwnProperty("flyToOnDrop"))throw new L("flyToOnDrop is already defined by another mixin.");t=t??z.EMPTY_OBJECT;let n=!0,i=t.flyToOnDrop??!0,o=new ye,r=t.clearOnDrop??!0,s=t.dropTarget??e.container,a=t.clampToGround??!0,l=t.proxy;s=Wn(s),Object.defineProperties(e,{dropTarget:{get:function(){return s},set:function(u){if(!c(u))throw new L("value is required.");d1e(s,d),s=u,pq(s,d)}},dropEnabled:{get:function(){return n},set:function(u){u!==n&&(u?pq(s,d):d1e(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 l},set:function(u){l=u}},clampToGround:{get:function(){return a},set:function(u){a=u}}});function d(u){MS(u),r&&(e.entities.removeAll(),e.dataSources.removeAll());let f=u.dataTransfer.files,p=f.length;for(let y=0;y<p;y++){let h=f[y],g=new FileReader;g.onload=kVt(e,h,l,a),g.onerror=UVt(e,h),g.readAsText(h)}}pq(s,d),e.destroy=A9(e,e.destroy,function(){e.dropEnabled=!1}),e._handleDrop=d}function MS(e){e.stopPropagation(),e.preventDefault()}function d1e(e,t){let n=e;c(n)&&(n.removeEventListener("drop",t,!1),n.removeEventListener("dragenter",MS,!1),n.removeEventListener("dragover",MS,!1),n.removeEventListener("dragexit",MS,!1))}function pq(e,t){e.addEventListener("drop",t,!1),e.addEventListener("dragenter",MS,!1),e.addEventListener("dragover",MS,!1),e.addEventListener("dragexit",MS,!1)}function kVt(e,t,n,i){let o=e.scene;return function(r){let s=t.name;try{let a;if(/\.czml$/i.test(s))a=c2.load(JSON.parse(r.target.result),{sourceUri:s});else if(/\.geojson$/i.test(s)||/\.json$/i.test(s)||/\.topojson$/i.test(s))a=gg.load(JSON.parse(r.target.result),{sourceUri:s,clampToGround:i});else if(/\.(kml|kmz)$/i.test(s))a=XT.load(t,{sourceUri:s,proxy:n,camera:o.camera,canvas:o.canvas,clampToGround:i,screenOverlayContainer:e.container});else if(/\.gpx$/i.test(s))a=xv.load(t,{sourceUri:s,proxy:n});else{e.dropError.raiseEvent(e,s,`Unrecognized file: ${s}`);return}c(a)&&e.dataSources.add(a).then(function(l){e.flyToOnDrop&&e.flyTo(l)}).catch(function(l){e.dropError.raiseEvent(e,s,l)})}catch(a){e.dropError.raiseEvent(e,s,a)}}}function UVt(e,t){return function(n){e.dropError.raiseEvent(e,t.name,n.target.error)}}var bq=NVt;var iMo=_(T(),1);function OVt(e,t){if(!c(e))throw new L("viewer is required.");t=t??z.EMPTY_OBJECT;let n=new UM({scene:e.scene,container:e.bottomContainer,lowFrameRateMessage:t.lowFrameRateMessage});Object.defineProperties(e,{performanceWatchdog:{get:function(){return n}}})}var yq=OVt;var aMo=_(T(),1);function DVt(e){C.typeOf.object("viewer",e);let t=document.createElement("div");t.className="cesium-viewer-voxelInspectorContainer",e.container.appendChild(t);let n=new $M(t,e.scene);Object.defineProperties(e,{voxelInspector:{get:function(){return n}}})}var gq=DVt;globalThis.CESIUM_VERSION="1.129";var BVt="1.129";return y1e(YVt);})(); //# sourceMappingURL=Cesium.js.map