{"version":3,"file":"CSS3DRenderer.mjs","sources":["../../../../packages/ThreeLayer/CSS3DRenderer.js"],"sourcesContent":["import { Matrix4, Object3D, Quaternion, Vector3 } from 'three';\r\n\r\n/**\r\n * Based on http://www.emagix.net/academic/mscs-project/item/camera-sync-with-css3-and-webgl-threejs\r\n */\r\n\r\nconst _position = new Vector3();\r\nconst _quaternion = new Quaternion();\r\nconst _scale = new Vector3();\r\n\r\nclass CSS3DObject extends Object3D {\r\n  constructor(element = document.createElement('div')) {\r\n    super();\r\n\r\n    this.isCSS3DObject = true;\r\n\r\n    this.element = element;\r\n    this.element.style.position = 'absolute';\r\n    this.element.style.pointerEvents = 'auto';\r\n    this.element.style.userSelect = 'none';\r\n\r\n    this.element.setAttribute('draggable', false);\r\n\r\n    this.addEventListener('removed', function () {\r\n      this.traverse(function (object) {\r\n        if (object.element instanceof Element && object.element.parentNode !== null) {\r\n          object.element.parentNode.removeChild(object.element);\r\n        }\r\n      });\r\n    });\r\n  }\r\n\r\n  copy(source, recursive) {\r\n    super.copy(source, recursive);\r\n\r\n    this.element = source.element.cloneNode(true);\r\n\r\n    return this;\r\n  }\r\n}\r\n\r\nclass CSS3DSprite extends CSS3DObject {\r\n  constructor(element) {\r\n    super(element);\r\n\r\n    this.isCSS3DSprite = true;\r\n\r\n    this.rotation2D = 0;\r\n  }\r\n\r\n  copy(source, recursive) {\r\n    super.copy(source, recursive);\r\n\r\n    const self = this;\r\n\r\n    self.rotation2D = source.rotation2D;\r\n\r\n    return this;\r\n  }\r\n}\r\n\r\n//\r\n\r\nconst _matrix = new Matrix4();\r\nconst _matrix2 = new Matrix4();\r\n\r\nclass CSS3DRenderer {\r\n  constructor(parameters = {}) {\r\n    const _this = this;\r\n\r\n    let _width, _height;\r\n    let _widthHalf, _heightHalf;\r\n\r\n    const cache = {\r\n      camera: { style: '' },\r\n      objects: new WeakMap(),\r\n    };\r\n\r\n    const domElement =\r\n      parameters.element !== undefined ? parameters.element : document.createElement('div');\r\n\r\n    domElement.style.overflow = 'hidden';\r\n\r\n    this.domElement = domElement;\r\n\r\n    const viewElement = document.createElement('div');\r\n    viewElement.style.transformOrigin = '0 0';\r\n    viewElement.style.pointerEvents = 'none';\r\n    domElement.appendChild(viewElement);\r\n\r\n    const cameraElement = document.createElement('div');\r\n\r\n    cameraElement.style.transformStyle = 'preserve-3d';\r\n\r\n    viewElement.appendChild(cameraElement);\r\n\r\n    this.getSize = function () {\r\n      return {\r\n        width: _width,\r\n        height: _height,\r\n      };\r\n    };\r\n\r\n    this.render = function (scene, camera) {\r\n      const fov = camera.projectionMatrix.elements[5] * _heightHalf;\r\n\r\n      if (camera.view && camera.view.enabled) {\r\n        // view offset\r\n        viewElement.style.transform = `translate( ${\r\n          -camera.view.offsetX * (_width / camera.view.width)\r\n        }px, ${-camera.view.offsetY * (_height / camera.view.height)}px )`;\r\n\r\n        // view fullWidth and fullHeight, view width and height\r\n        viewElement.style.transform += `scale( ${camera.view.fullWidth / camera.view.width}, ${\r\n          camera.view.fullHeight / camera.view.height\r\n        } )`;\r\n      } else {\r\n        viewElement.style.transform = '';\r\n      }\r\n\r\n      if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld();\r\n      if (camera.parent === null && camera.matrixWorldAutoUpdate === true)\r\n        camera.updateMatrixWorld();\r\n\r\n      let tx, ty;\r\n\r\n      if (camera.isOrthographicCamera) {\r\n        tx = -(camera.right + camera.left) / 2;\r\n        ty = (camera.top + camera.bottom) / 2;\r\n      }\r\n\r\n      const scaleByViewOffset =\r\n        camera.view && camera.view.enabled ? camera.view.height / camera.view.fullHeight : 1;\r\n      const cameraCSSMatrix = camera.isOrthographicCamera\r\n        ? `scale( ${scaleByViewOffset} )` +\r\n          'scale(' +\r\n          fov +\r\n          ')' +\r\n          'translate(' +\r\n          epsilon(tx) +\r\n          'px,' +\r\n          epsilon(ty) +\r\n          'px)' +\r\n          getCameraCSSMatrix(camera.matrixWorldInverse)\r\n        : `scale( ${scaleByViewOffset} )` +\r\n          'translateZ(' +\r\n          fov +\r\n          'px)' +\r\n          getCameraCSSMatrix(camera.matrixWorldInverse);\r\n      const perspective = camera.isPerspectiveCamera ? 'perspective(' + fov + 'px) ' : '';\r\n\r\n      const style =\r\n        perspective + cameraCSSMatrix + 'translate(' + _widthHalf + 'px,' + _heightHalf + 'px)';\r\n\r\n      if (cache.camera.style !== style) {\r\n        cameraElement.style.transform = style;\r\n\r\n        cache.camera.style = style;\r\n      }\r\n\r\n      renderObject(scene, scene, camera, cameraCSSMatrix);\r\n    };\r\n\r\n    this.setSize = function (width, height) {\r\n      _width = width;\r\n      _height = height;\r\n      _widthHalf = _width / 2;\r\n      _heightHalf = _height / 2;\r\n\r\n      domElement.style.width = width + 'px';\r\n      domElement.style.height = height + 'px';\r\n\r\n      viewElement.style.width = width + 'px';\r\n      viewElement.style.height = height + 'px';\r\n\r\n      cameraElement.style.width = width + 'px';\r\n      cameraElement.style.height = height + 'px';\r\n    };\r\n\r\n    function epsilon(value) {\r\n      return Math.abs(value) < 1e-10 ? 0 : value;\r\n    }\r\n\r\n    function getCameraCSSMatrix(matrix) {\r\n      const elements = matrix.elements;\r\n\r\n      return (\r\n        'matrix3d(' +\r\n        epsilon(elements[0]) +\r\n        ',' +\r\n        epsilon(-elements[1]) +\r\n        ',' +\r\n        epsilon(elements[2]) +\r\n        ',' +\r\n        epsilon(elements[3]) +\r\n        ',' +\r\n        epsilon(elements[4]) +\r\n        ',' +\r\n        epsilon(-elements[5]) +\r\n        ',' +\r\n        epsilon(elements[6]) +\r\n        ',' +\r\n        epsilon(elements[7]) +\r\n        ',' +\r\n        epsilon(elements[8]) +\r\n        ',' +\r\n        epsilon(-elements[9]) +\r\n        ',' +\r\n        epsilon(elements[10]) +\r\n        ',' +\r\n        epsilon(elements[11]) +\r\n        ',' +\r\n        epsilon(elements[12]) +\r\n        ',' +\r\n        epsilon(-elements[13]) +\r\n        ',' +\r\n        epsilon(elements[14]) +\r\n        ',' +\r\n        epsilon(elements[15]) +\r\n        ')'\r\n      );\r\n    }\r\n\r\n    function getObjectCSSMatrix(matrix) {\r\n      const elements = matrix.elements;\r\n      const matrix3d =\r\n        'matrix3d(' +\r\n        epsilon(elements[0]) +\r\n        ',' +\r\n        epsilon(elements[1]) +\r\n        ',' +\r\n        epsilon(elements[2]) +\r\n        ',' +\r\n        epsilon(elements[3]) +\r\n        ',' +\r\n        epsilon(-elements[4]) +\r\n        ',' +\r\n        epsilon(-elements[5]) +\r\n        ',' +\r\n        epsilon(-elements[6]) +\r\n        ',' +\r\n        epsilon(-elements[7]) +\r\n        ',' +\r\n        epsilon(elements[8]) +\r\n        ',' +\r\n        epsilon(elements[9]) +\r\n        ',' +\r\n        epsilon(elements[10]) +\r\n        ',' +\r\n        epsilon(elements[11]) +\r\n        ',' +\r\n        epsilon(elements[12]) +\r\n        ',' +\r\n        epsilon(elements[13]) +\r\n        ',' +\r\n        epsilon(elements[14]) +\r\n        ',' +\r\n        epsilon(elements[15]) +\r\n        ')';\r\n\r\n      return 'translate(-50%,-50%)' + matrix3d;\r\n    }\r\n\r\n    function renderObject(object, scene, camera, cameraCSSMatrix) {\r\n      if (object.isCSS3DObject) {\r\n        const visible = object.visible === true && object.layers.test(camera.layers) === true;\r\n        object.element.style.display = visible === true ? '' : 'none';\r\n\r\n        if (visible === true) {\r\n          object.onBeforeRender(_this, scene, camera);\r\n\r\n          let style;\r\n\r\n          if (object.isCSS3DSprite) {\r\n            // http://swiftcoder.wordpress.com/2008/11/25/constructing-a-billboard-matrix/\r\n\r\n            _matrix.copy(camera.matrixWorldInverse);\r\n            _matrix.transpose();\r\n\r\n            if (object.rotation2D !== 0)\r\n              _matrix.multiply(_matrix2.makeRotationZ(object.rotation2D));\r\n\r\n            object.matrixWorld.decompose(_position, _quaternion, _scale);\r\n            _matrix.setPosition(_position);\r\n            _matrix.scale(_scale);\r\n\r\n            _matrix.elements[3] = 0;\r\n            _matrix.elements[7] = 0;\r\n            _matrix.elements[11] = 0;\r\n            _matrix.elements[15] = 1;\r\n\r\n            style = getObjectCSSMatrix(_matrix);\r\n          } else {\r\n            style = getObjectCSSMatrix(object.matrixWorld);\r\n          }\r\n\r\n          const element = object.element;\r\n          const cachedObject = cache.objects.get(object);\r\n\r\n          if (cachedObject === undefined || cachedObject.style !== style) {\r\n            element.style.transform = style;\r\n\r\n            const objectData = { style: style };\r\n            cache.objects.set(object, objectData);\r\n          }\r\n\r\n          if (element.parentNode !== cameraElement) {\r\n            cameraElement.appendChild(element);\r\n          }\r\n\r\n          object.onAfterRender(_this, scene, camera);\r\n        }\r\n      }\r\n\r\n      for (let i = 0, l = object.children.length; i < l; i++) {\r\n        renderObject(object.children[i], scene, camera, cameraCSSMatrix);\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nexport { CSS3DObject, CSS3DSprite, CSS3DRenderer };\r\n"],"names":[],"mappings":";;AAMA,MAAM,SAAA,GAAY,IAAI,OAAQ,EAAA,CAAA;AAC9B,MAAM,WAAA,GAAc,IAAI,UAAW,EAAA,CAAA;AACnC,MAAM,MAAA,GAAS,IAAI,OAAQ,EAAA,CAAA;AAE3B,MAAM,oBAAoB,QAAS,CAAA;AAAA,EACjC,WAAY,CAAA,OAAA,GAAU,QAAS,CAAA,aAAA,CAAc,KAAK,CAAG,EAAA;AACnD,IAAM,KAAA,EAAA,CAAA;AAEN,IAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAA;AAErB,IAAA,IAAA,CAAK,OAAU,GAAA,OAAA,CAAA;AACf,IAAK,IAAA,CAAA,OAAA,CAAQ,MAAM,QAAW,GAAA,UAAA,CAAA;AAC9B,IAAK,IAAA,CAAA,OAAA,CAAQ,MAAM,aAAgB,GAAA,MAAA,CAAA;AACnC,IAAK,IAAA,CAAA,OAAA,CAAQ,MAAM,UAAa,GAAA,MAAA,CAAA;AAEhC,IAAK,IAAA,CAAA,OAAA,CAAQ,YAAa,CAAA,WAAA,EAAa,KAAK,CAAA,CAAA;AAE5C,IAAK,IAAA,CAAA,gBAAA,CAAiB,WAAW,WAAY;AAC3C,MAAK,IAAA,CAAA,QAAA,CAAS,SAAU,MAAQ,EAAA;AAC9B,QAAA,IAAI,OAAO,OAAmB,YAAA,OAAA,IAAW,MAAO,CAAA,OAAA,CAAQ,eAAe,IAAM,EAAA;AAC3E,UAAA,MAAA,CAAO,OAAQ,CAAA,UAAA,CAAW,WAAY,CAAA,MAAA,CAAO,OAAO,CAAA,CAAA;AAAA,SACtD;AAAA,OACD,CAAA,CAAA;AAAA,KACF,CAAA,CAAA;AAAA,GACH;AAAA,EAEA,IAAA,CAAK,QAAQ,SAAW,EAAA;AACtB,IAAM,KAAA,CAAA,IAAA,CAAK,QAAQ,SAAS,CAAA,CAAA;AAE5B,IAAA,IAAA,CAAK,OAAU,GAAA,MAAA,CAAO,OAAQ,CAAA,SAAA,CAAU,IAAI,CAAA,CAAA;AAE5C,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF,CAAA;AAEA,MAAM,oBAAoB,WAAY,CAAA;AAAA,EACpC,YAAY,OAAS,EAAA;AACnB,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAEb,IAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAA;AAErB,IAAA,IAAA,CAAK,UAAa,GAAA,CAAA,CAAA;AAAA,GACpB;AAAA,EAEA,IAAA,CAAK,QAAQ,SAAW,EAAA;AACtB,IAAM,KAAA,CAAA,IAAA,CAAK,QAAQ,SAAS,CAAA,CAAA;AAE5B,IAAA,MAAM,IAAO,GAAA,IAAA,CAAA;AAEb,IAAA,IAAA,CAAK,aAAa,MAAO,CAAA,UAAA,CAAA;AAEzB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF,CAAA;AAIA,MAAM,OAAA,GAAU,IAAI,OAAQ,EAAA,CAAA;AAC5B,MAAM,QAAA,GAAW,IAAI,OAAQ,EAAA,CAAA;AAE7B,MAAM,aAAc,CAAA;AAAA,EAClB,WAAA,CAAY,UAAa,GAAA,EAAI,EAAA;AAC3B,IAAA,MAAM,KAAQ,GAAA,IAAA,CAAA;AAEd,IAAA,IAAI,MAAQ,EAAA,OAAA,CAAA;AACZ,IAAA,IAAI,UAAY,EAAA,WAAA,CAAA;AAEhB,IAAA,MAAM,KAAQ,GAAA;AAAA,MACZ,MAAA,EAAQ,EAAE,KAAA,EAAO,EAAG,EAAA;AAAA,MACpB,OAAA,sBAAa,OAAQ,EAAA;AAAA,KACvB,CAAA;AAEA,IAAM,MAAA,UAAA,GACJ,WAAW,OAAY,KAAA,KAAA,CAAA,GAAY,WAAW,OAAU,GAAA,QAAA,CAAS,cAAc,KAAK,CAAA,CAAA;AAEtF,IAAA,UAAA,CAAW,MAAM,QAAW,GAAA,QAAA,CAAA;AAE5B,IAAA,IAAA,CAAK,UAAa,GAAA,UAAA,CAAA;AAElB,IAAM,MAAA,WAAA,GAAc,QAAS,CAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AAChD,IAAA,WAAA,CAAY,MAAM,eAAkB,GAAA,KAAA,CAAA;AACpC,IAAA,WAAA,CAAY,MAAM,aAAgB,GAAA,MAAA,CAAA;AAClC,IAAA,UAAA,CAAW,YAAY,WAAW,CAAA,CAAA;AAElC,IAAM,MAAA,aAAA,GAAgB,QAAS,CAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AAElD,IAAA,aAAA,CAAc,MAAM,cAAiB,GAAA,aAAA,CAAA;AAErC,IAAA,WAAA,CAAY,YAAY,aAAa,CAAA,CAAA;AAErC,IAAA,IAAA,CAAK,UAAU,WAAY;AACzB,MAAO,OAAA;AAAA,QACL,KAAO,EAAA,MAAA;AAAA,QACP,MAAQ,EAAA,OAAA;AAAA,OACV,CAAA;AAAA,KACF,CAAA;AAEA,IAAK,IAAA,CAAA,MAAA,GAAS,SAAU,KAAA,EAAO,MAAQ,EAAA;AACrC,MAAA,MAAM,GAAM,GAAA,MAAA,CAAO,gBAAiB,CAAA,QAAA,CAAS,CAAC,CAAI,GAAA,WAAA,CAAA;AAElD,MAAA,IAAI,MAAO,CAAA,IAAA,IAAQ,MAAO,CAAA,IAAA,CAAK,OAAS,EAAA;AAEtC,QAAA,WAAA,CAAY,MAAM,SAAY,GAAA,CAAA,WAAA,EAC5B,CAAC,MAAO,CAAA,IAAA,CAAK,WAAW,MAAS,GAAA,MAAA,CAAO,KAAK,KAC/C,CAAA,CAAA,IAAA,EAAO,CAAC,MAAO,CAAA,IAAA,CAAK,WAAW,OAAU,GAAA,MAAA,CAAO,KAAK,MAAO,CAAA,CAAA,IAAA,CAAA,CAAA;AAG5D,QAAA,WAAA,CAAY,KAAM,CAAA,SAAA,IAAa,CAAU,OAAA,EAAA,MAAA,CAAO,KAAK,SAAY,GAAA,MAAA,CAAO,IAAK,CAAA,KAAK,KAChF,MAAO,CAAA,IAAA,CAAK,UAAa,GAAA,MAAA,CAAO,KAAK,MACvC,CAAA,EAAA,CAAA,CAAA;AAAA,OACK,MAAA;AACL,QAAA,WAAA,CAAY,MAAM,SAAY,GAAA,EAAA,CAAA;AAAA,OAChC;AAEA,MAAA,IAAI,MAAM,qBAA0B,KAAA,IAAA;AAAM,QAAA,KAAA,CAAM,iBAAkB,EAAA,CAAA;AAClE,MAAA,IAAI,MAAO,CAAA,MAAA,KAAW,IAAQ,IAAA,MAAA,CAAO,qBAA0B,KAAA,IAAA;AAC7D,QAAA,MAAA,CAAO,iBAAkB,EAAA,CAAA;AAE3B,MAAA,IAAI,EAAI,EAAA,EAAA,CAAA;AAER,MAAA,IAAI,OAAO,oBAAsB,EAAA;AAC/B,QAAA,EAAA,GAAK,EAAE,MAAA,CAAO,KAAQ,GAAA,MAAA,CAAO,IAAQ,CAAA,GAAA,CAAA,CAAA;AACrC,QAAM,EAAA,GAAA,CAAA,MAAA,CAAO,GAAM,GAAA,MAAA,CAAO,MAAU,IAAA,CAAA,CAAA;AAAA,OACtC;AAEA,MAAM,MAAA,iBAAA,GACJ,MAAO,CAAA,IAAA,IAAQ,MAAO,CAAA,IAAA,CAAK,OAAU,GAAA,MAAA,CAAO,IAAK,CAAA,MAAA,GAAS,MAAO,CAAA,IAAA,CAAK,UAAa,GAAA,CAAA,CAAA;AACrF,MAAM,MAAA,eAAA,GAAkB,MAAO,CAAA,oBAAA,GAC3B,CAAU,OAAA,EAAA,iBAAiB,CAE3B,QAAA,CAAA,GAAA,GAAA,GACA,aAEA,GAAA,OAAA,CAAQ,EAAE,CAAA,GACV,KACA,GAAA,OAAA,CAAQ,EAAE,CAAA,GACV,KACA,GAAA,kBAAA,CAAmB,MAAO,CAAA,kBAAkB,CAC5C,GAAA,CAAA,OAAA,EAAU,iBAAiB,CAAA,aAAA,CAAA,GAE3B,GACA,GAAA,KAAA,GACA,kBAAmB,CAAA,MAAA,CAAO,kBAAkB,CAAA,CAAA;AAChD,MAAA,MAAM,WAAc,GAAA,MAAA,CAAO,mBAAsB,GAAA,cAAA,GAAiB,MAAM,MAAS,GAAA,EAAA,CAAA;AAEjF,MAAA,MAAM,QACJ,WAAc,GAAA,eAAA,GAAkB,YAAe,GAAA,UAAA,GAAa,QAAQ,WAAc,GAAA,KAAA,CAAA;AAEpF,MAAI,IAAA,KAAA,CAAM,MAAO,CAAA,KAAA,KAAU,KAAO,EAAA;AAChC,QAAA,aAAA,CAAc,MAAM,SAAY,GAAA,KAAA,CAAA;AAEhC,QAAA,KAAA,CAAM,OAAO,KAAQ,GAAA,KAAA,CAAA;AAAA,OACvB;AAEA,MAAa,YAAA,CAAA,KAAA,EAAO,KAAO,EAAA,MAAA,EAAQ,eAAe,CAAA,CAAA;AAAA,KACpD,CAAA;AAEA,IAAK,IAAA,CAAA,OAAA,GAAU,SAAU,KAAA,EAAO,MAAQ,EAAA;AACtC,MAAS,MAAA,GAAA,KAAA,CAAA;AACT,MAAU,OAAA,GAAA,MAAA,CAAA;AACV,MAAA,UAAA,GAAa,MAAS,GAAA,CAAA,CAAA;AACtB,MAAA,WAAA,GAAc,OAAU,GAAA,CAAA,CAAA;AAExB,MAAW,UAAA,CAAA,KAAA,CAAM,QAAQ,KAAQ,GAAA,IAAA,CAAA;AACjC,MAAW,UAAA,CAAA,KAAA,CAAM,SAAS,MAAS,GAAA,IAAA,CAAA;AAEnC,MAAY,WAAA,CAAA,KAAA,CAAM,QAAQ,KAAQ,GAAA,IAAA,CAAA;AAClC,MAAY,WAAA,CAAA,KAAA,CAAM,SAAS,MAAS,GAAA,IAAA,CAAA;AAEpC,MAAc,aAAA,CAAA,KAAA,CAAM,QAAQ,KAAQ,GAAA,IAAA,CAAA;AACpC,MAAc,aAAA,CAAA,KAAA,CAAM,SAAS,MAAS,GAAA,IAAA,CAAA;AAAA,KACxC,CAAA;AAEA,IAAA,SAAS,QAAQ,KAAO,EAAA;AACtB,MAAA,OAAO,IAAK,CAAA,GAAA,CAAI,KAAK,CAAA,GAAI,QAAQ,CAAI,GAAA,KAAA,CAAA;AAAA,KACvC;AAEA,IAAA,SAAS,mBAAmB,MAAQ,EAAA;AAClC,MAAA,MAAM,WAAW,MAAO,CAAA,QAAA,CAAA;AAExB,MACE,OAAA,WAAA,GACA,QAAQ,QAAS,CAAA,CAAC,CAAC,CACnB,GAAA,GAAA,GACA,QAAQ,CAAC,QAAA,CAAS,CAAC,CAAC,CAAA,GACpB,MACA,OAAQ,CAAA,QAAA,CAAS,CAAC,CAAC,CAAA,GACnB,GACA,GAAA,OAAA,CAAQ,QAAS,CAAA,CAAC,CAAC,CACnB,GAAA,GAAA,GACA,QAAQ,QAAS,CAAA,CAAC,CAAC,CACnB,GAAA,GAAA,GACA,OAAQ,CAAA,CAAC,QAAS,CAAA,CAAC,CAAC,CACpB,GAAA,GAAA,GACA,QAAQ,QAAS,CAAA,CAAC,CAAC,CACnB,GAAA,GAAA,GACA,OAAQ,CAAA,QAAA,CAAS,CAAC,CAAC,IACnB,GACA,GAAA,OAAA,CAAQ,SAAS,CAAC,CAAC,IACnB,GACA,GAAA,OAAA,CAAQ,CAAC,QAAA,CAAS,CAAC,CAAC,IACpB,GACA,GAAA,OAAA,CAAQ,SAAS,EAAE,CAAC,IACpB,GACA,GAAA,OAAA,CAAQ,QAAS,CAAA,EAAE,CAAC,CAAA,GACpB,MACA,OAAQ,CAAA,QAAA,CAAS,EAAE,CAAC,CAAA,GACpB,MACA,OAAQ,CAAA,CAAC,QAAS,CAAA,EAAE,CAAC,CAAA,GACrB,MACA,OAAQ,CAAA,QAAA,CAAS,EAAE,CAAC,CAAA,GACpB,MACA,OAAQ,CAAA,QAAA,CAAS,EAAE,CAAC,CACpB,GAAA,GAAA,CAAA;AAAA,KAEJ;AAEA,IAAA,SAAS,mBAAmB,MAAQ,EAAA;AAClC,MAAA,MAAM,WAAW,MAAO,CAAA,QAAA,CAAA;AACxB,MAAM,MAAA,QAAA,GACJ,cACA,OAAQ,CAAA,QAAA,CAAS,CAAC,CAAC,CAAA,GACnB,GACA,GAAA,OAAA,CAAQ,QAAS,CAAA,CAAC,CAAC,CACnB,GAAA,GAAA,GACA,QAAQ,QAAS,CAAA,CAAC,CAAC,CACnB,GAAA,GAAA,GACA,OAAQ,CAAA,QAAA,CAAS,CAAC,CAAC,IACnB,GACA,GAAA,OAAA,CAAQ,CAAC,QAAS,CAAA,CAAC,CAAC,CACpB,GAAA,GAAA,GACA,OAAQ,CAAA,CAAC,QAAS,CAAA,CAAC,CAAC,CACpB,GAAA,GAAA,GACA,QAAQ,CAAC,QAAA,CAAS,CAAC,CAAC,CAAA,GACpB,GACA,GAAA,OAAA,CAAQ,CAAC,QAAA,CAAS,CAAC,CAAC,CAAA,GACpB,MACA,OAAQ,CAAA,QAAA,CAAS,CAAC,CAAC,CAAA,GACnB,GACA,GAAA,OAAA,CAAQ,QAAS,CAAA,CAAC,CAAC,CACnB,GAAA,GAAA,GACA,QAAQ,QAAS,CAAA,EAAE,CAAC,CACpB,GAAA,GAAA,GACA,OAAQ,CAAA,QAAA,CAAS,EAAE,CAAC,IACpB,GACA,GAAA,OAAA,CAAQ,SAAS,EAAE,CAAC,IACpB,GACA,GAAA,OAAA,CAAQ,QAAS,CAAA,EAAE,CAAC,CAAA,GACpB,MACA,OAAQ,CAAA,QAAA,CAAS,EAAE,CAAC,CAAA,GACpB,MACA,OAAQ,CAAA,QAAA,CAAS,EAAE,CAAC,CACpB,GAAA,GAAA,CAAA;AAEF,MAAA,OAAO,sBAAyB,GAAA,QAAA,CAAA;AAAA,KAClC;AAEA,IAAA,SAAS,YAAa,CAAA,MAAA,EAAQ,KAAO,EAAA,MAAA,EAAQ,eAAiB,EAAA;AAC5D,MAAA,IAAI,OAAO,aAAe,EAAA;AACxB,QAAM,MAAA,OAAA,GAAU,OAAO,OAAY,KAAA,IAAA,IAAQ,OAAO,MAAO,CAAA,IAAA,CAAK,MAAO,CAAA,MAAM,CAAM,KAAA,IAAA,CAAA;AACjF,QAAA,MAAA,CAAO,OAAQ,CAAA,KAAA,CAAM,OAAU,GAAA,OAAA,KAAY,OAAO,EAAK,GAAA,MAAA,CAAA;AAEvD,QAAA,IAAI,YAAY,IAAM,EAAA;AACpB,UAAO,MAAA,CAAA,cAAA,CAAe,KAAO,EAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AAE1C,UAAI,IAAA,KAAA,CAAA;AAEJ,UAAA,IAAI,OAAO,aAAe,EAAA;AAGxB,YAAQ,OAAA,CAAA,IAAA,CAAK,OAAO,kBAAkB,CAAA,CAAA;AACtC,YAAA,OAAA,CAAQ,SAAU,EAAA,CAAA;AAElB,YAAA,IAAI,OAAO,UAAe,KAAA,CAAA;AACxB,cAAA,OAAA,CAAQ,QAAS,CAAA,QAAA,CAAS,aAAc,CAAA,MAAA,CAAO,UAAU,CAAC,CAAA,CAAA;AAE5D,YAAA,MAAA,CAAO,WAAY,CAAA,SAAA,CAAU,SAAW,EAAA,WAAA,EAAa,MAAM,CAAA,CAAA;AAC3D,YAAA,OAAA,CAAQ,YAAY,SAAS,CAAA,CAAA;AAC7B,YAAA,OAAA,CAAQ,MAAM,MAAM,CAAA,CAAA;AAEpB,YAAQ,OAAA,CAAA,QAAA,CAAS,CAAC,CAAI,GAAA,CAAA,CAAA;AACtB,YAAQ,OAAA,CAAA,QAAA,CAAS,CAAC,CAAI,GAAA,CAAA,CAAA;AACtB,YAAQ,OAAA,CAAA,QAAA,CAAS,EAAE,CAAI,GAAA,CAAA,CAAA;AACvB,YAAQ,OAAA,CAAA,QAAA,CAAS,EAAE,CAAI,GAAA,CAAA,CAAA;AAEvB,YAAA,KAAA,GAAQ,mBAAmB,OAAO,CAAA,CAAA;AAAA,WAC7B,MAAA;AACL,YAAQ,KAAA,GAAA,kBAAA,CAAmB,OAAO,WAAW,CAAA,CAAA;AAAA,WAC/C;AAEA,UAAA,MAAM,UAAU,MAAO,CAAA,OAAA,CAAA;AACvB,UAAA,MAAM,YAAe,GAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AAE7C,UAAA,IAAI,YAAiB,KAAA,KAAA,CAAA,IAAa,YAAa,CAAA,KAAA,KAAU,KAAO,EAAA;AAC9D,YAAA,OAAA,CAAQ,MAAM,SAAY,GAAA,KAAA,CAAA;AAE1B,YAAM,MAAA,UAAA,GAAa,EAAE,KAAa,EAAA,CAAA;AAClC,YAAM,KAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,MAAA,EAAQ,UAAU,CAAA,CAAA;AAAA,WACtC;AAEA,UAAI,IAAA,OAAA,CAAQ,eAAe,aAAe,EAAA;AACxC,YAAA,aAAA,CAAc,YAAY,OAAO,CAAA,CAAA;AAAA,WACnC;AAEA,UAAO,MAAA,CAAA,aAAA,CAAc,KAAO,EAAA,KAAA,EAAO,MAAM,CAAA,CAAA;AAAA,SAC3C;AAAA,OACF;AAEA,MAAS,KAAA,IAAA,CAAA,GAAI,GAAG,CAAI,GAAA,MAAA,CAAO,SAAS,MAAQ,EAAA,CAAA,GAAI,GAAG,CAAK,EAAA,EAAA;AACtD,QAAA,YAAA,CAAa,OAAO,QAAS,CAAA,CAAC,CAAG,EAAA,KAAA,EAAO,QAAQ,eAAe,CAAA,CAAA;AAAA,OACjE;AAAA,KACF;AAAA,GACF;AACF;;;;"}